小弟我想在对话框弹出时放置一个窗口在其上面,请教小弟我的代码错在哪里
我想在对话框弹出时放置一个窗口在其下面,请问我的代码错在哪里?
代码如下,我想把m_wndHolder放置在CAboutDlg窗口的下面,实际却发现在其上面,请问该如何修改?
------解决方案--------------------
m_wndHolder.CreateEx(。。。,this 创建时,别将CAboutDlg
设置为m_wndHolder的父窗口即可,将this 改为null
------解决方案--------------------
m_wndHolder是about的父窗口:
void CMainDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
m_wndHolder.CreateEx(WS_EX_CLIENTEDGE,
AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,::LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_WINDOW+1),NULL),
_T("MyPopupWindow"),WS_VISIBLE | WS_SYSMENU ,CRect(0, 0, 400, 300),this,NULL,NULL);
int cx = GetSystemMetrics(SM_CXSCREEN);
int cy = GetSystemMetrics(SM_CYSCREEN);
int dx = 300;
int dy = 200;
m_wndHolder.SetWindowPos(this, cx-dx,cy-dy,dx,dy,SWP_SHOWWINDOW);//SWP_NOACTIVATE|SWP_NOZORDER);
m_wndHolder.CenterWindow(AfxGetMainWnd());
CenterWindow(AfxGetMainWnd());
pdlgAbout=new CAboutDlg;
pdlgAbout->Create(MAKEINTRESOURCE(IDD_ABOUTBOX),&m_wndHolder);
pdlgAbout->ShowWindow(SW_SHOW); }
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
代码如下,我想把m_wndHolder放置在CAboutDlg窗口的下面,实际却发现在其上面,请问该如何修改?
- C/C++ code
class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL CWnd m_wndHolder; // Implementation protected: //{{AFX_MSG(CAboutDlg) virtual BOOL OnInitDialog(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; BOOL CAboutDlg::OnInitDialog() { m_wndHolder.CreateEx(WS_EX_CLIENTEDGE, AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,::LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_WINDOW+1),NULL), _T("MyPopupWindow"),WS_VISIBLE ,CRect(0, 0, 400, 300),this,NULL,NULL); CDialog::OnInitDialog(); int cx = GetSystemMetrics(SM_CXSCREEN); int cy = GetSystemMetrics(SM_CYSCREEN); int dx = 300; int dy = 200; m_wndHolder.SetWindowPos(this, cx-dx,cy-dy,dx,dy,SWP_NOACTIVATE|SWP_NOZORDER); m_wndHolder.CenterWindow(AfxGetMainWnd()); CenterWindow(AfxGetMainWnd()); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }
------解决方案--------------------
m_wndHolder.CreateEx(。。。,this 创建时,别将CAboutDlg
设置为m_wndHolder的父窗口即可,将this 改为null
------解决方案--------------------
m_wndHolder是about的父窗口:
void CMainDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
m_wndHolder.CreateEx(WS_EX_CLIENTEDGE,
AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,::LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_WINDOW+1),NULL),
_T("MyPopupWindow"),WS_VISIBLE | WS_SYSMENU ,CRect(0, 0, 400, 300),this,NULL,NULL);
int cx = GetSystemMetrics(SM_CXSCREEN);
int cy = GetSystemMetrics(SM_CYSCREEN);
int dx = 300;
int dy = 200;
m_wndHolder.SetWindowPos(this, cx-dx,cy-dy,dx,dy,SWP_SHOWWINDOW);//SWP_NOACTIVATE|SWP_NOZORDER);
m_wndHolder.CenterWindow(AfxGetMainWnd());
CenterWindow(AfxGetMainWnd());
pdlgAbout=new CAboutDlg;
pdlgAbout->Create(MAKEINTRESOURCE(IDD_ABOUTBOX),&m_wndHolder);
pdlgAbout->ShowWindow(SW_SHOW); }
else
{
CDialog::OnSysCommand(nID, lParam);
}
}