1。
GetWindowRect(&rect);
SreenToClient(&rect);
与
GetClientRect(&rect);
的效果一样吗?
2。
在一个基于对话框的程序中,怎么样才能使主对话框的大小可以通过鼠标拖动而改变?同时对话框中的控件相对位置不变??
GetWindowRect(&rect);
SreenToClient(&rect);
与
GetClientRect(&rect);
的效果一样吗?
2。
在一个基于对话框的程序中,怎么样才能使主对话框的大小可以通过鼠标拖动而改变?同时对话框中的控件相对位置不变??
GetWindowRect(&rect);
SreenToClient(&rect);
与
GetClientRect(&rect);
的效果一样吗?不一样。系统坐标(在800x600下)的(0,0)是指屏幕的左上点。逻辑坐标则是以应用程序的左上点为起点的(0,0);GetWindowRect函数得到的是系统坐标,如果你要对你的控件进行修改,则需要将系统坐标转换为逻辑坐标;要显示时又需要将逻辑坐标转换为系统坐标。
在一个基于对话框的程序中,怎么样才能使主对话框的大小可以通过鼠标拖动而改变?同时对话框中的控件相对位置不变?? 在DLG中的属性直接设置,变成不是POPUP的风格。
如果同时对话框中的控件相对位置不变,则要在OnSize()中
{
CYourCtrl.SetWindowPos(..............);
}
BOOL CTemp1Dlg::OnInitDialog()
{
CRect myRect;
GetClientRect(&myRect);//引用“应用程序的左上点为起点的(0,0);“
//显示时差不多在屏幕中央
(1) MoveWindow(myRect.left, myRect.top,myRect.Width(), myRect.Height());
//显示时居于屏幕左上角稍微偏向右下
(2)MoveWindow(myRect.left+5, myRect.top+5,myRect.Width(), myRect.Height());
//显示时居于屏幕左上角稍微偏向左上
(3)MoveWindow(myRect.left-5, myRect.top-5,myRect.Width(), myRect.Height());
}
这是怎么回事?按照后两种的情况,应该推断出第一种情况是以屏幕左上角为原点!!!??
谢谢,现在可以用鼠标拖动改变大小了,但是对话框中的控件相对位置不变还是没有解决!
照您所说:
void CTemp2Dlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
CRect rect;
GetClientRect(&rect);
m_btn.SetWindowPos(NULL,rect.Width()/4,rect.Height()/4,
rect.Width()/2,rect.Height()/2,SWP_SHOWWINDOW);
} //m_btn是CButton的相关控件
运行的时候总出现debug assersion failed!对话框,单步执行问题处在setwindowpos这一句!???
首先谢谢您!还有点问题。您所说:
"你在BOOL CTemp1Dlg::OnInitDialog()中使用MoveWindow函数,那么你的CTemp1Dlg就是a top-level CWnd object。这样的话MoveWindow函数中的x,y坐标就是屏幕的坐标。"
那么:
//显示时差不多在屏幕中央
(1) MoveWindow(myRect.left, myRect.top,myRect.Width(), myRect.Height());照您所说,应该显示的时候正好居于屏幕左上角才对阿!不应该差不多在屏幕中央??
{
CYourCtrl.SetWindowPos(..............);
}
运行总是出错??debug assersion failed!
// TODO: Add your message handler code here
if(GetActiveWindow() == NULL) //加入此句
return;
CRect rect;
GetClientRect(&rect);
m_Button1.SetWindowPos(NULL,rect.Width()/4,rect.Height()/4,
rect.Width()/2,rect.Height()/2,SWP_SHOWWINDOW);