对话框现在要全屏 代码如下 int cx=::GetSystemMetrics(SM_CXSCREEN);
int cy=::GetSystemMetrics(SM_CYSCREEN);
int lx=0,ly=0,dx=0,dy=0; CRect rtClient,rtBtn; //*********************************************
CWnd *pWnd=GetDlgItem(IDC_FRAME); GetClientRect(&rtClient); //获得对话框客户区屏幕坐标
ClientToScreen(&rtClient); //映射为屏幕坐标
pWnd->GetWindowRect(&rtBtn); //获得button屏幕坐标
lx=rtBtn.Width(); //button长度
ly=rtBtn.Height(); //button高度
dx=rtClient.right-rtBtn.right; //离右边框的距离
dy=rtClient.bottom-rtBtn.bottom; //离底边框的距离
MoveWindow(CRect(0,0,cx,cy)); //移动窗口
pWnd->MoveWindow(CRect(cx-dx-lx,cy-ly-dy,cx-dx,cy-dy)); //移动button ===============================
结果:上面可以让对话框上的控件调整位置,但有个问题
对话框整体变大了,但是控件好像仅仅改变了位置但是大小没有变,也就说 对话框与控件比率失调
没有分了,又分了再加给大家谢谢先了
int cy=::GetSystemMetrics(SM_CYSCREEN);
int lx=0,ly=0,dx=0,dy=0; CRect rtClient,rtBtn; //*********************************************
CWnd *pWnd=GetDlgItem(IDC_FRAME); GetClientRect(&rtClient); //获得对话框客户区屏幕坐标
ClientToScreen(&rtClient); //映射为屏幕坐标
pWnd->GetWindowRect(&rtBtn); //获得button屏幕坐标
lx=rtBtn.Width(); //button长度
ly=rtBtn.Height(); //button高度
dx=rtClient.right-rtBtn.right; //离右边框的距离
dy=rtClient.bottom-rtBtn.bottom; //离底边框的距离
MoveWindow(CRect(0,0,cx,cy)); //移动窗口
pWnd->MoveWindow(CRect(cx-dx-lx,cy-ly-dy,cx-dx,cy-dy)); //移动button ===============================
结果:上面可以让对话框上的控件调整位置,但有个问题
对话框整体变大了,但是控件好像仅仅改变了位置但是大小没有变,也就说 对话框与控件比率失调
没有分了,又分了再加给大家谢谢先了
解决方案 »
- 为什么LoadBitmap()会出现非法操作~~
- 在我的计算机上有admin1,admin2,admin3三个用户,用vc怎么在admin2上以admin3身份运行程序。 除了右击上的运行, 我是说用Vc能写出这样的程序吗?
- 请教CSplitterWnd拆分窗口的问题
- Ctreectrl如何取得某结点下的第n个节点,并把它设置为选中?
- 怎样将某个程序设为当前窗口
- 关于文件图标的问题
- 编辑框里面内容怎么自动换行啊?
- 近年很少编程了,最近看了台湾张国松的《人生字典》深有体悟
- 如何定时弹出后台程序的窗口
- 在InstallShield 中如何找到SdLicense对话框中许可协议显示区域的控件的资源ID号,谢谢
- libnet 发送数据包成功,但是对方网络中却没有抓到这个包
- 关于拼图游戏后期编码
pWnd->GetWindowRect(&rtBtn); //获得button屏幕坐标 这里弹出错误pWnd =0x00000000
三 添加reseze函数
http://blog.csdn.net/Small_hunter/archive/2010/06/01/5640101.aspx
中有详细代码
你的pWnd是什么?你得先获得button的指针再GetWindowRect
第一次调用OnSize的时候对话框还没有建立,判断 pWnd != NULL 然后运行你的代码
if(m_hWnd)
{
。
}
WINDOWPLACEMENT lwndpl;
WINDOWPLACEMENT * lpwndpl;
lpwndpl=&lwndpl;
GetWindowPlacement(lpwndpl);
lpwndpl->showCmd=SW_SHOWMAXIMIZED;
SetWindowPlacement(lpwndpl);
{
if( GetDlgItem(IDC_FRAME)-> GetSafeHwnd() )
{
MessageBox("12");
}
}
-----
怎么运行不到MessageBox
在OnSize中GetWindowRect 不能用
就是说,对话框全屏后,上面的控件,不论在比例和大小上,都要随着对话框的变化做相应的变化。很多人都是OnSize我也知道,但是写了下,不行,而且还有好多的错误具体看上面
有个最笨的最简单的方法,就是把每个控件相对于对话框的比例、位置记下来,然后绘制全屏窗口时根据比例来确定控件窗口位置,再把控件MOVEWINDOW就行了
如果控件少的话,不妨试试,多的话...
多的话可以自己写个函数计算比例得到目标RECT吧,传入全屏之前的主窗口、控件位置等,计算比例,参照屏幕大小,得到应该的RECT坐标区域,OK,也不是不能解决的玩意儿哈