当窗口变大时,如何使自己绘制的图像相对窗口的位置不变 例如 我在Ondraw函数中绘制了一个矩形,在窗口变大时,如何使这个矩形相对窗口的位置不变 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.自己算。2.如果是在控件上绘制的话建议使用EasySize 当窗口改变时,会响应WM_SIZE消息,然后你根据前后窗口大小比例,改变矩形大小,重绘就行了。 自己计算比例,然后MoveWindow/SetWindowPos到正确位置上 以下代码是我在窗口大小改变时调整控件位置的代码你可以参考一下void CAutoFitDlg::OnSize(UINT nType, int cx, int cy){ //计算窗口宽度和高度的改变量 int nIncrementX = cx - m_nWinWidth; int nIncrementY = cy - m_nWinHeight; INT_PTR nCount = m_listCtrlTag.GetSize(); for (int i=0; i<nCount; i++) { //获取变化控制系数 int nMoveXPercent = m_listCtrlTag[i]->m_nMoveXPercent; int nMoveYPercent = m_listCtrlTag[i]->m_nMoveYPercent; int nZoomXPercent = m_listCtrlTag[i]->m_nZoomXPercent; int nZoomYPercent = m_listCtrlTag[i]->m_nZoomYPercent; CWnd* pWndCtrl; //获取控件指针 pWndCtrl = m_listCtrlTag[i]->m_pWnd; if(IsWindow(pWndCtrl->GetSafeHwnd())) { int nLeft = m_listCtrlTag[i]->m_rectWnd.left; int nTop = m_listCtrlTag[i]->m_rectWnd.top; int nWidth = m_listCtrlTag[i]->m_rectWnd.Width(); int nHeight = m_listCtrlTag[i]->m_rectWnd.Height(); //设置新的位置参数 nLeft += (nIncrementX*nMoveXPercent/100); nTop += (nIncrementY*nMoveYPercent/100); nWidth += (nIncrementX*nZoomXPercent/100); nHeight += (nIncrementY*nZoomYPercent/100); // 把控件移动到新位置 pWndCtrl->MoveWindow(nLeft, nTop, nWidth, nHeight); } } CDialog::OnSize(nType, cx, cy);} 如果你又一张绘制的底图了,仅仅需要往前台贴,那么就简单了每次绘制的时候,不要用bltbit,用strebltbit……,可能拼写有错误,就是缩放啦如果你不想缩放,那么就要考虑界面对齐的问题,所有的界面元素(控件)定义一个对其规则,是左上,还是右上,还是居中等等,最好还是自己处理一下,这样子界面不变型,不花不模糊 如果使用 wtl 的话, 有一个 sizedialog, 直接使用,所有你希望变的就都会自动变了,有按照比例变,和按照位置变两种http://www.codeproject.com/KB/wtl/wtldlgresize.aspx强大的刚刚的 做这种变形效果 mfc中如何让CButton按钮始终显示不被覆盖?? 编译通过,link出错 数组传递 VC 文本框控键的文字颜色问题 IID_IMarkupServices 不认是怎么回事呀,在线等!!!! 对话框打印 菜鸟有个小问题:何谓托盘?有什么作用?它的实际意义是什么? 请教大侠,如何判断两个RGB值是不同明暗的同一颜色。 我新建了个对话框CDialog类 我想获取当前View中的指针 请教BGA芯片图像识别定位方面的技术方案 请问水平展开的树形控件怎么写?哪里有下载的
2.如果是在控件上绘制的话建议使用EasySize
你可以参考一下
void CAutoFitDlg::OnSize(UINT nType, int cx, int cy)
{
//计算窗口宽度和高度的改变量
int nIncrementX = cx - m_nWinWidth;
int nIncrementY = cy - m_nWinHeight; INT_PTR nCount = m_listCtrlTag.GetSize(); for (int i=0; i<nCount; i++)
{
//获取变化控制系数
int nMoveXPercent = m_listCtrlTag[i]->m_nMoveXPercent;
int nMoveYPercent = m_listCtrlTag[i]->m_nMoveYPercent;
int nZoomXPercent = m_listCtrlTag[i]->m_nZoomXPercent;
int nZoomYPercent = m_listCtrlTag[i]->m_nZoomYPercent; CWnd* pWndCtrl;
//获取控件指针
pWndCtrl = m_listCtrlTag[i]->m_pWnd; if(IsWindow(pWndCtrl->GetSafeHwnd()))
{
int nLeft = m_listCtrlTag[i]->m_rectWnd.left;
int nTop = m_listCtrlTag[i]->m_rectWnd.top;
int nWidth = m_listCtrlTag[i]->m_rectWnd.Width();
int nHeight = m_listCtrlTag[i]->m_rectWnd.Height(); //设置新的位置参数
nLeft += (nIncrementX*nMoveXPercent/100);
nTop += (nIncrementY*nMoveYPercent/100);
nWidth += (nIncrementX*nZoomXPercent/100);
nHeight += (nIncrementY*nZoomYPercent/100); // 把控件移动到新位置
pWndCtrl->MoveWindow(nLeft, nTop, nWidth, nHeight);
}
} CDialog::OnSize(nType, cx, cy);
}
每次绘制的时候,不要用bltbit,用strebltbit……,可能拼写有错误,就是缩放啦如果你不想缩放,那么就要考虑界面对齐的问题,所有的界面元素(控件)定义一个对其规则,是左上,还是右上,还是居中等等,最好还是自己处理一下,这样子界面不变型,不花不模糊
http://www.codeproject.com/KB/wtl/wtldlgresize.aspx
强大的刚刚的