第一个问题,例子的 加入
void CCoordinatesTestView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
m_CoordinatesSetCoordinates(cx/2,-1(cy/2));
}
这样就是居中了,至于你要设到其他位置,就自己调整。,但是Y要把它×-1来翻转坐标
第二个问题,你可以做一个自己的包装类来容纳你所有的控件,打一个比方,你有3个控件
一个按钮CButton mButtonFirst;
一个文本CEdit mEditSecond;
一个进度条CProgress mProgressThird;
然后你写一个类
class ControlsWrap
{
//这个在OnSize(UINT nType, int cx, int cy) 里调用,把窗口大小传进来
public void rePosControls(int cx,int cy)
{
_rePosButtonFirst(cx,cy);
_rePosEditSecond(cx,cy);
_rePosProgressThird(cx,cy);
}
private void _rePosButtonFirst(int cx,int cy)
{
// 根据窗口大小调整你想要的按钮位置
}
private void _rePosEditSecond(int cx,int cy)
{
// 根据窗口大小调整你想要的编辑框位置
}
private void _rePosProgressThird(int cx,int cy)
{
// 根据窗口大小调整你想要的进度条位置
}
}
当然这种办法很土,但是够用了,要是自己设计一种布局可以更方便,就像Java的界面那样。
CViewTree pDesignViewTree;//为什么要定义成CWnd
pDesignViewTree=(CViewTree )pViewTabs->ChildWindowFromPoint (point);
两个问题:
总高度是1270699是必然失败的,这个高度严重超出了View类位图绘制的限制范围,太大了。
OnVScroll里面,不应该上来就Invalidate,这个严重消耗资源,系统在滚动消息之后会自动触发区域重绘,你这个全部重绘对于一个超大视图来说,消耗太大了。
CView显示位图,理论最大范围是64k64k,也就是说总的位大小不能超过4G位,但实际上,当高度或者宽度超高的时候,也会出错。
你这个情况,如果高度确定是127万,那么必须用算法优化进行局部显示和切换,不可能全部显示到一个视图中的。
获取对当前的打印机设置访问权限的唯一办法是通过存储在 CWinApp 中的 m_hDevMode 和 m_hDevNames 结构。通过 PRINTDLG 结构的指针传递给从 CWinApp 类派生的类的 GetPrinterDeviceDefaults() 成员函数访问这些成员。由于返回值、 hDevMode 和 hDevNames,HGLOBAL 变量:: GlobalLock() 必须调用以返回指向结构的指针。使用该指针,您可以从该结构以确定打印机的当前状态中提取信息。请这些结构的内容,参阅 DEVMODE 并且 DEVNAMES 在 SDK 联机帮助以获取更多信息。
下面的代码示例将返回当前打印机的页面大小创建与打印机设置 CDC 对象上使用 GetDeviceCaps() 的 CView 派生类的成员函数︰
/ Compile options needed: none
/
BOOL CMyView::GetPageSize(CSize &nRetVal)
{
PRINTDLG FAR pPrintDlg = new PRINTDLG;
BOOL bRet = FALSE;
// Get the current printer's settings
if(AfxGetApp()->GetPrinterDeviceDefaults(pPrintDlg))
{
// Get pointers to the two setting structures
DEVNAMES FAR lpDevNames =
(DEVNAMES FAR )::GlobalLock(pPrintDlg->hDevNames);
DEVMODE FAR lpDevMode =
(DEVMODE FAR )::GlobalLock(pPrintDlg->hDevMode);
// Get the specific driver information
CString szDriver((LPTSTR)lpDevNames +
lpDevNames->wDriverOffset);
CString szDevice((LPTSTR)lpDevNames +
lpDevNames->wDeviceOffset);
CString szOutput((LPTSTR)lpDevNames +
lpDevNames->wOutputOffset);
// Create a CDC object according to the current settings
CDC pDC;
pDCCreateDC(szDriver, szDevice, szOutput, lpDevMode);
// Query this CDC object for the width and height of the current
// page
nRetValcx = pDCGetDeviceCaps(HORZSIZE);
nRetValcy = pDCGetDeviceCaps(VERTSIZE);
// Get rid of the CDC object
pDCDeleteDC();
// Unlock the pointers to the setting structures
::GlobalUnlock(pPrintDlg->hDevNames);
::GlobalUnlock(pPrintDlg->hDevMode);
bRet = TRUE;
}
delete pPrintDlg;
return bRet;
}
以上就是关于单文档视图/文档结构中,怎么改变视图窗口的大小全部的内容,包括:单文档视图/文档结构中,怎么改变视图窗口的大小、mfc单文档中,一个Cview的子窗口指针的获取问题如图、MFC的CSrollView在大尺寸下,拖动滚动条会回d,求解决。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)