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

一、 创建控件并响应事件三步曲 :添加成员变量,变量类型为所创建控件的类型,如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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值