作者:mobiledu2502885243 | 来源:互联网 | 2023-10-12 12:46
动态创建GroupBox控件时,设置风格为SS_BLACKFRAME,程序运行后发现创建出的GroupBox控件覆盖住了对话框上原有的Button按扭,必须鼠标点击后按扭才会显示出来,请问怎样处理
动态创建GroupBox控件时,设置风格为SS_BLACKFRAME, 程序运行后发现创建出的GroupBox控件覆盖住了对话框上原有的Button按扭, 必须鼠标点击后按扭才会显示出来,请问怎样处理?按扭为先前在对话框上静态添加的.
在OnInitDialog()函数里,创建GroupBox的代码如下:
BOOL CSpeedTool::OnInitDialog()
{
CDialog::OnInitDialog();
CStatic *pCTGopBox=new CStatic;
pCTGopBox->Create(_T("my static"), WS_CHILD|SS_BLACKRECT|WS_VISIBLE, CRect(10,10,100,100), this, IDC_STATIC);
pCTGopBox->MoveWindow(0, 0, 832, 172);
return TRUE;
}
如果将对话框上原有的Button按扭都SetParent(pCTGopBox),是可以显示出对话框上的button按扭来,可是SetParent(pCTGopBox)之后, 会导致DIALOG上的按扭事件不响应, 怎样既能正常显示出BUTTON, 又能使DIALOG其BUTTON事件得到执行, 请各位高手支招!
4 个解决方案
sorry 刚才试验了一下,我告诉你SetParent的方法确实会导致按钮不响应,因为按钮的父窗口变成了pCTGopBox,截获了按钮消息,所以这不是根本解决问题的办法
或者你可以派生一个CStatic,让CYourStatic负责处理按钮消息,然后通知给父窗口
如果你放置pCTGopBox的目的仅仅是为了改变窗口的颜色,那就用OnCtlColor或OnPaint里画好了,这样简便一些
谢谢高手, 请问OnCtlColor怎么用啊,新手,实在不好意思.
//在YourDlg.h里添加一个全局刷子
HBRUSH m_mybrush;
//在CYourDlg构造函数里创建刷子
CYourDlg::YourDlgg(CWnd* pParent /*=NULL*/)
: CDialog(CYourDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CYourDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_mybrush =CreateSolidBrush(RGB(0,0,0)); //创建黑色刷子
}
//在CYourDlg的OnCtlColor里返回刷子
HBRUSH CYourDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
// TODO: Return a different brush if the default is not desired
if(!pWnd->GetDlgCtrlID())
return m_mybrush; //返回自定义的黑色刷子
else
return hbr;
}