单文档视图文档结构中,怎么改变视图窗口的大小

单文档视图文档结构中,怎么改变视图窗口的大小,第1张

第一个问题,例子的 加入

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,求解决。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9791315.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存