ShowWindow()函数

  • 格式:docx
  • 大小:16.96 KB
  • 文档页数:2

ShowWindow()函数
我点击对话框外面时自动关闭它,所以我在对话框OnKillFocus消息中使用命令 ShowWindow(FALSE),但它只有在对话框没有任何控件时才能正常,如果我任意加入一个控件,那么就不能关闭了.
答:试试下面的代码,原理是在激活对话框时,捕获鼠标的动作,当鼠标点击时判断是否点击在对话框外,是的话就释放对话框.
//定义消息映象,处理鼠标单击及激活
BEGIN_MESSAGE_MAP(CSmallDlg, Cdialog)
//{{AFX_MSG_MAP(CSmallDlg)
ON_WM_LBUTTONDOWN()
ON_WM_ACTIVATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
voidCSmallDlg::OnLButtonDown(UINT nFlags, Cpoint point)
{
Crectrect;
GetClientRect(&rect);
rect.InflateRect(m_cxBorder, m_cyBorder);
//Release dialog if the user click outside it.
If(!rect.PtInRect(point))
{
EndDialog(IDCANCEL);
}
Cdialog::OnLButtonDown(nFlags, point);
}
voidCSmallDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
Cdialog::OnActivate(nState, pWndOther, bMinimized);
if(nState == WA_ACTIVE || nState == WA_CLICKACTIVE)
SetCapture();
else
ReleaseCapture();
}
BOOL CSmallDlg::OnInitDialog()
{
Cdialog::OnInitDialog();
m_cxBorder = 4;
m_cyBorder = 4;
//SM_CXDLGFRAME,SM_CYDLGFRAME NT中取得有WS_DLGFRAMEstyle风格的窗口的高和宽
// 95中已经废弃而采用
SM_CX_FIXEDFRAME和SM_CYFIXEDFRAME
OSVERSIONINFO info;
memset((char*)&info, 0, sizeof(OSVERSIONINFO));
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if(GetVersionEx(&info))
{ //we don't run on Win32s, so check only two values
if(info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{ //On windows 95
m_cxBorder = GetSystemMetrics(SM_CXFIXEDFRAME);
m_cyBorder = GetSystemMetrics(SM_CYFIXEDFRAME);
}
else
{ //On NT
m_cxBorder = GetSystemMetrics(SM_CXDLGFRAME);
m_cyBorder = GetSystemMetrics(SM_CYDLGFRAME);
}
}
}。