在固定位置创建子窗口,点击父窗口自动隐藏子窗口
2010-12-08 20:38
731 查看
在固定位置创建子窗口,点击父窗口自动隐藏子窗口
邵盛松 2010年12月8日星期三
一 前言
下载地址http://download.csdn.net/source/2892918
在父窗口上点击按钮,在按钮的下方创建子窗口,按钮和子窗口左对齐。处理父窗口的WM_MOVE消息,子窗口跟随父窗口移动。
二 函数说明
有几个函数先说明一下
GetWindowRect()返回窗口的屏幕坐标的矩形区域
屏幕坐标是窗口上的某一点相对于屏幕左上角的偏移
GetClientRect()返回客户区坐标的矩形区域
客户区坐标是窗口上的某一点相对于该窗口客户区左上角的偏移
有的函数需要使用屏幕坐标,有的函数使用客户区坐标,使用这些函数时需要两种坐标的转换
两种坐标的转换需要ScreenToClient()函数和ClientToScreen()函数
ScreenToClient()屏幕坐标转客户区坐标
ClientToScreen()客户区坐标转屏幕坐标
移动窗口函数MoveWindow(),当移动非子窗口的时候,需要使用的是屏幕坐标;当移动子窗口的时候,需要使用父窗口的客户区坐标。
三实现
新建一个基于对话框的应用程序
以下为代码的说明
CPositionDlg类是父窗口类
CDlgChild类是子窗口类
1子窗口部分
子窗口的属性如下设置
Style设置为 Popup
Border设置为Resizing
2父窗口部分
1 )在父类中声明一个指向子窗口的成员指针变量和布尔型变量
CDlgChild *m_pDlg;
bool m_bStart;
2)在构造函数中初始化声明的成员变量
m_pDlg=NULL;
m_bStart=false;
3)在父窗口初始化时创建子窗口
创建完窗口之后并不马上显示
m_pDlg=new CDlgChild();
m_pDlg->Create(IDD_DIALOG_CHILD,this);
4)单击按钮显示并移动子窗口
子窗口的位置在按钮的下方,左边对齐
void CPositionDlg::OnBnClickedButtonCreate()
{
// TODO: 在此添加控件通知处理程序代码
HandleChild();
m_bStart=true;
}
5)HandleChild()窗口显示函数如下
void CPositionDlg::HandleChild()
{
CRect rectButton;
GetDlgItem(IDC_BUTTON_CREATE)-> GetWindowRect(&rectButton);
CRect rectChild;
m_pDlg->GetWindowRect(rectChild);
m_pDlg->ShowWindow(SW_SHOW);
m_pDlg->MoveWindow(rectButton.left,rectButton.bottom,rectChild.Width(),rectChild.Height(),TRUE);
}
6)子窗口的隐藏
重载PreTranslateMessage实现了想要的效果
BOOL CPositionDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if(pMsg->message == WM_LBUTTONDOWN && pMsg->hwnd != m_pDlg->m_hWnd)
{
m_pDlg->ShowWindow(SW_HIDE);
}
return CDialog::PreTranslateMessage(pMsg);
}
7)父窗口的移动处理
WM_MOVE在WM_INITDIALOG之前触发,该标志的作用是在没有点击按钮之前不执行OnMove中的内容,
void CPositionDlg::OnMove(int x, int y)
{
CDialog::OnMove(x, y);
// TODO: 在此处添加消息处理程序代码
if (m_pDlg!=NULL && m_bStart==true)
{
HandleChild();
}
}
以上程序在 VC++2005 Unicode字符集下调试通过
邵盛松 2010年12月8日星期三
一 前言
下载地址http://download.csdn.net/source/2892918
在父窗口上点击按钮,在按钮的下方创建子窗口,按钮和子窗口左对齐。处理父窗口的WM_MOVE消息,子窗口跟随父窗口移动。
二 函数说明
有几个函数先说明一下
GetWindowRect()返回窗口的屏幕坐标的矩形区域
屏幕坐标是窗口上的某一点相对于屏幕左上角的偏移
GetClientRect()返回客户区坐标的矩形区域
客户区坐标是窗口上的某一点相对于该窗口客户区左上角的偏移
有的函数需要使用屏幕坐标,有的函数使用客户区坐标,使用这些函数时需要两种坐标的转换
两种坐标的转换需要ScreenToClient()函数和ClientToScreen()函数
ScreenToClient()屏幕坐标转客户区坐标
ClientToScreen()客户区坐标转屏幕坐标
移动窗口函数MoveWindow(),当移动非子窗口的时候,需要使用的是屏幕坐标;当移动子窗口的时候,需要使用父窗口的客户区坐标。
三实现
新建一个基于对话框的应用程序
以下为代码的说明
CPositionDlg类是父窗口类
CDlgChild类是子窗口类
1子窗口部分
子窗口的属性如下设置
Style设置为 Popup
Border设置为Resizing
2父窗口部分
1 )在父类中声明一个指向子窗口的成员指针变量和布尔型变量
CDlgChild *m_pDlg;
bool m_bStart;
2)在构造函数中初始化声明的成员变量
m_pDlg=NULL;
m_bStart=false;
3)在父窗口初始化时创建子窗口
创建完窗口之后并不马上显示
m_pDlg=new CDlgChild();
m_pDlg->Create(IDD_DIALOG_CHILD,this);
4)单击按钮显示并移动子窗口
子窗口的位置在按钮的下方,左边对齐
void CPositionDlg::OnBnClickedButtonCreate()
{
// TODO: 在此添加控件通知处理程序代码
HandleChild();
m_bStart=true;
}
5)HandleChild()窗口显示函数如下
void CPositionDlg::HandleChild()
{
CRect rectButton;
GetDlgItem(IDC_BUTTON_CREATE)-> GetWindowRect(&rectButton);
CRect rectChild;
m_pDlg->GetWindowRect(rectChild);
m_pDlg->ShowWindow(SW_SHOW);
m_pDlg->MoveWindow(rectButton.left,rectButton.bottom,rectChild.Width(),rectChild.Height(),TRUE);
}
6)子窗口的隐藏
重载PreTranslateMessage实现了想要的效果
BOOL CPositionDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if(pMsg->message == WM_LBUTTONDOWN && pMsg->hwnd != m_pDlg->m_hWnd)
{
m_pDlg->ShowWindow(SW_HIDE);
}
return CDialog::PreTranslateMessage(pMsg);
}
7)父窗口的移动处理
WM_MOVE在WM_INITDIALOG之前触发,该标志的作用是在没有点击按钮之前不执行OnMove中的内容,
void CPositionDlg::OnMove(int x, int y)
{
CDialog::OnMove(x, y);
// TODO: 在此处添加消息处理程序代码
if (m_pDlg!=NULL && m_bStart==true)
{
HandleChild();
}
}
以上程序在 VC++2005 Unicode字符集下调试通过
相关文章推荐
- 在屏幕特定位置点击隐藏子窗口
- JQuery实现点击div以外的位置隐藏该div窗口
- JQuery实现点击div以外的位置隐藏该div窗口
- 实现下拉列表,点击其他位置自动隐藏效果的三种方式比较
- JQuery实现点击div以外的位置隐藏该div窗口
- JS实现随页面滚动显示/隐藏窗口固定位置元素
- 随页面滚动显示/隐藏窗口固定位置元素
- 随页面滚动显示/隐藏窗口固定位置元素
- QBoxLayout::setSizeConstraint可以固定窗口的大小,且根据内部控件所占用的位置自动调节大小
- JS实现随页面滚动显示/隐藏窗口固定位置元素
- js制作点击会自动隐藏的导航栏(固定在在头部的)
- Android中点击空白位置隐藏软键盘
- [Delphi]让窗体感知鼠标的进入与移出并自动隐藏与显示窗口
- 移动端IOS 固定下方的输入框,点击输入框位置会变的修复
- IOS7 UITextField 隐藏自身软键盘、点击Return自动转到下个文本框、轻触背景隐藏软键盘
- 解决点击状态栏时ScrollView自动滚动到初始位置失效办法:总结优化篇
- 点击图片弹出固定或自适应窗口
- Qt基础——让使用Designer创建的UI也能自动适应窗口大小
- 根据窗口大小自动调整位置,保持在窗口中央
- 用WPF实现鼠标移开窗口自动隐藏