如何实现点一下对话框外面的区域,自动隐藏对话框
2010-07-02 10:19
411 查看
建立名为My的对话框程序.实现如下步骤:
在MyDlg.h中加入:
class CShowWindow1Dlg : public CDialog
{
public:
int m_cx;
int m_cy;
};
在MyDlg.cpp中:
//定义消息映象,处理鼠标单击及激活
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
ON_WM_LBUTTONDOWN()//添加
ON_WM_ACTIVATE()//添加
END_MESSAGE_MAP()
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CRect rect;
GetClientRect(&rect);
rect.InflateRect(m_cx, m_cy);
//Release dialog if the user click outside it.
if(!rect.PtInRect(point))
{
EndDialog(IDCANCEL);
}
CDialog::OnLButtonDown(nFlags, point);
}
void CMyDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CDialog::OnActivate(nState, pWndOther, bMinimized);
if( nState == WA_ACTIVE || nState == WA_CLICKACTIVE)
SetCapture();
else
ReleaseCapture();
}
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
.....
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_cx = GetSystemMetrics(SM_CXFIXEDFRAME);
m_cy = GetSystemMetrics(SM_CYFIXEDFRAME);
}
else
{ //On NT
m_cx = GetSystemMetrics(SM_CXDLGFRAME);
m_cy = GetSystemMetrics(SM_CYDLGFRAME);
}
}
}
说明:
1)WM_ACTIVATE消息在ClassWizard中没有,按如下步骤添加,右击CMyDlg类,选Add Windows Message Handle,接着在Filter for messages available to中选Window,在New Windows messages/events列表中就会出现WM_ACTIVATE,选中,点击Add Handler
2)SM_CXDLGFRAME,SM_CYDLGFRAME NT中取得有WS_DLGFRAMEstyle风格的窗口的高和宽 95中已经废弃而采用SM_CX_FIXEDFRAME和SM_CYFIXEDFRAME
在MyDlg.h中加入:
class CShowWindow1Dlg : public CDialog
{
public:
int m_cx;
int m_cy;
};
在MyDlg.cpp中:
//定义消息映象,处理鼠标单击及激活
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
ON_WM_LBUTTONDOWN()//添加
ON_WM_ACTIVATE()//添加
END_MESSAGE_MAP()
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CRect rect;
GetClientRect(&rect);
rect.InflateRect(m_cx, m_cy);
//Release dialog if the user click outside it.
if(!rect.PtInRect(point))
{
EndDialog(IDCANCEL);
}
CDialog::OnLButtonDown(nFlags, point);
}
void CMyDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CDialog::OnActivate(nState, pWndOther, bMinimized);
if( nState == WA_ACTIVE || nState == WA_CLICKACTIVE)
SetCapture();
else
ReleaseCapture();
}
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
.....
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_cx = GetSystemMetrics(SM_CXFIXEDFRAME);
m_cy = GetSystemMetrics(SM_CYFIXEDFRAME);
}
else
{ //On NT
m_cx = GetSystemMetrics(SM_CXDLGFRAME);
m_cy = GetSystemMetrics(SM_CYDLGFRAME);
}
}
}
说明:
1)WM_ACTIVATE消息在ClassWizard中没有,按如下步骤添加,右击CMyDlg类,选Add Windows Message Handle,接着在Filter for messages available to中选Window,在New Windows messages/events列表中就会出现WM_ACTIVATE,选中,点击Add Handler
2)SM_CXDLGFRAME,SM_CYDLGFRAME NT中取得有WS_DLGFRAMEstyle风格的窗口的高和宽 95中已经废弃而采用SM_CX_FIXEDFRAME和SM_CYFIXEDFRAME
相关文章推荐
- jquery如何实现点菜单或者菜单里面的对象不隐藏,点菜单外面隐藏
- 如何在 对话框 启动时 实现隐藏窗口(只显示托盘)
- [VB.NET]请问类似QQ窗体靠边自动隐藏的效果如何实现?????
- 如何实现控件随对话框大小变化而自动调整大小和位置
- 如何让基于对话框的MFC程序启动后自动隐藏对话框
- 如何实现打开网页自动弹出QQ对话框
- iphone里如何实现像图片浏览那样的自动隐藏和导航条和工具栏
- 以lable实现的checkBox如何切换背景和显示隐藏关联区域
- 如何实现控件随对话框大小变化而自动调整大小和位置
- VB的ShowInTaskbar功能分析以及用VC的实现 如何隐藏对话框在工具栏上的按钮
- 安卓如何实现单击一下软键盘就隐藏
- 如何实现控件随对话框大小变化而自动调整大小和位置
- winform中如何实现自动点击webbrowser弹出对话框中的确定按钮
- winform中如何实现自动点击webbrowser弹出对话框中的确定按钮
- 如何实现大图居中超过的部分两边自动隐藏
- java servlet 几种页面跳转的方法,需要的朋友可以参考一下 在访问网页的过程中,页面自动刷新、跳转和重定向是经常用到的,这里就说说在Java中是如何实现这些功能的! 一、页面自动刷新
- 浅谈如何利用PB实现仿QQ自动显示/隐藏窗口(原创)
- 如何实现控件随对话框大小变化而自动调整大小和位置
- 如何实现:GridView 控件中显示的文本不自动换行,隐藏超出宽度部分wj-wangjun
- C# 如何实现软件自动在线升级