您的位置:首页 > 编程语言 > C语言/C++

C++创建控件并响应三部曲、设置窗口全屏、OnSize实现控件大小改变、跟踪调试顺序

2016-12-05 14:10 549 查看
一、创建控件并响应事件三步曲:添加成员变量,变量类型为所创建控件的类型,如CButton
1.手动添加 afx_msg void OnmyButton();  
2.手动添加实现函数;  
3.关联:MESSAGE_MAP:ON_BN_CLICKED(IDC_MYBUTTON,OnmyButton)。

二、VC设置窗口全屏显示的方法:通过设置窗口显示状态和窗口位置来使窗口全屏。
在窗口类的头文件中加入如下代码:
private:
void OnFullScreen();//设置窗口全屏
void OnExitFullScreen();//退出窗口全屏
WINDOWPLACEMENT m_OldWndPlacement;//保存旧窗口状态的结构
BOOL m_bFullScreen;//标示窗口是否全屏
CRect m_FullScreenRect;//保存窗口位置的区域

在窗口的构造函数中初始化数据:
m_bFullScreen=false;
OnFullScreen()
{
//判断窗口是否全屏,如果不是则设置为全屏
if(!m_bFullScreen){
GetWindowPlacement(&m_OldWndPlacement);
//获得窗口在屏幕坐标系中的位置
CRect WindowRect;
GetWindowRect(&WindowRect);
//获得客户区在屏幕坐标系中的位置
CRect ClientRect;
RepositionBars(0,0xffff,AFX_PANT_FIRST,reposQuery,&ClientRect);
ClientToScreen(&ClientRect);
//获取屏幕分辨率
int nFullWidth = GetSystemMetris(SM_CXSCREEN);
int nFullHeight = GetSystemMetris(SM_CYSCREEN);
//计算窗口全屏位置
m_FullScreenRect.left = WindowRect.left-ClientRect.left; //大小为负的左边框宽度
m_FullScreenRect.top = WindowRect.top-ClientRect.top; //大小为负的上边框宽度
m_FullScreenRect.right = WindowRect.right-ClientRect.right+nFullWidth; //大小为右边框宽度和屏幕宽度之和
m_FullScreenRect.bottom = WindowRect.bottom-ClientRect.bottom+nFullHeight; //大小为下边框宽度和屏幕高度之和
//设置窗口状态位置结构
WINDOWPLACEMENT wndpl;
wndpl.length = sizeof(WINDOWPLACEMENT);
wndpl.flags = 0;
wndpl.showCmd = SW_WHOWNORMAL;
wndpl.rcNORMALPosition = m_FullScreenRect;
//设置窗口位置
SetWindowPlacement(&wndpl);
m_bFullScreen = TRUE;//将窗口全屏标示设置为TRUE
}
}
//退出全屏还原窗口大小
OnExitFullScreen(){
//判断窗口是否在全屏状态中,如果是全屏则执行下列代码
if(m_bFullScreen){
ShowWindow(SW_HIDE);
SetWindowPlacement(&m_OldWndPlacement);//还原为旧的窗口状态
m_bFullScreen = FLASE;
}

三、OnSize函数实现控件大小改变
CWnd *pWnd;
pWnd = GetDlgItem(IDC_LIST);   //获取控件句柄
if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
{
CRect rect;  //获取控件变化前大小
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
// cx/m_rect.Width()为对话框在横向的变化比例
rect.left=rect.left*cx/m_rect.Width();/////调整控件大小
rect.right=rect.right*cx/m_rect.Width();
rect.top=rect.top*cy/m_rect.Height();
rect.bottom=rect.bottom*cy/m_rect.Height();
pWnd->MoveWindow(rect);//设置控件大小
}
GetClientRect(&m_rect);//将变化后的对话框大小设为旧大小

四、MoveWindow:改变大小和位置(前两个参数代表左上角位置)
SetWindowPos:改变大小或位置(第一个参数为空,x、y代表大小,cx、cy代表位置,nFlags可以为NOMOVE、NOSIZE)

五、C++调试跟踪顺序:theApp->构造函数->InitInstance()->对话框构造函数->对话框初始化->对话框退出->应用程序退出
在调用Domodal之前InitInstance()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: