📄 vc++50定制窗口的方法.htm
字号:
SIZE="4">CREATESTRUCT</font><font FACE="宋体" LANG="ZH-CN" SIZE="4">结构来修改窗口类或风格</p></font><font SIZE="4"><p ALIGN="JUSTIFY">return C mdichildWnd::PreCreateWindow(cs);</p><p ALIGN="JUSTIFY">}</p></font><font FACE="宋体" LANG="ZH-CN" SIZE="4"><p ALIGN="JUSTIFY">要修改视图窗口的显示性质,则可在视图文件</font><fontSIZE="4">xxView.cpp</font><font FACE="宋体" LANG="ZH-CN" SIZE="4">的下述成员函数中加入以下语句:</p></font><font SIZE="4"><p ALIGN="JUSTIFY">BOOL xxView::PreCreateWindow(CREATESTRUCT&cs)</p></font><font FACE="宋体" LANG="ZH-CN" SIZE="4"><p ALIGN="JUSTIFY">{</p></font><font SIZE="4"><p ALIGN="JUSTIFY">//</font><font FACE="宋体" LANG="ZH-CN" SIZE="4">增加的语句</p></font><font SIZE="4"><p ALIGN="JUSTIFY">cs.lpszClass=AfxRegisterWndClass(cs-HREDRAW|CS-VREDRAW,0,(HBRUSH))::GetStockObject(WHITE-BRUSH),0);</p><p ALIGN="JUSTIFY">return CscrollView::PreCreateWindow(cs);</p><p ALIGN="JUSTIFY">}</p></font><font FACE="宋体" LANG="ZH-CN" SIZE="4"><p ALIGN="JUSTIFY">其中,</font><font SIZE="4">cs</font><font FACE="宋体"LANG="ZH-CN" SIZE="4">的参数</font><font SIZE="4">pszClass</font><font FACE="宋体"LANG="ZH-CN" SIZE="4">用于存放</font><font SIZE="4">Windows</font><font FACE="宋体"LANG="ZH-CN" SIZE="4">窗口类名称。要想注册</font><font SIZE="4">Windows</font><fontFACE="宋体" LANG="ZH-CN" SIZE="4">窗口类,则必须调用全局函数</font><fontSIZE="4">AfxRegisterWndClass</font><font FACE="宋体" LANG="ZH-CN" SIZE="4">。该函数原型为:</p></font><font SIZE="4"><p ALIGN="JUSTIFY">LPCTSTR AFXAPI AfxRegisterWndClass(UINTnClassStyle,HCURSOR hCursor=0,HBRUSH hbrBackground=0,HICON hIcon=0)</p></font><font FACE="宋体" LANG="ZH-CN" SIZE="4"><p ALIGN="JUSTIFY">上述各参数用于定义风格,其含义分别为光标资源句柄、背景资源句柄、图标资源句柄。上述增加的语句的作用是:改变窗口大小时重画窗口、不显示光标图标、设置白色背景。</p><p ALIGN="JUSTIFY">四、窗口的滚动</p><p ALIGN="JUSTIFY">使用</font><font SIZE="4">CscrollView</font><font FACE="宋体"LANG="ZH-CN" SIZE="4">代替</font><font SIZE="4">Cview</font><font FACE="宋体"LANG="ZH-CN" SIZE="4">类即可实现滚动窗口。此时,系统生成</font><fontSIZE="4">OnInitialUpdate()</font><font FACE="宋体" LANG="ZH-CN" SIZE="4">成员函数:</p></font><font SIZE="4"><p ALIGN="JUSTIFY">void CmyscrollView::OnInitialUpdat()</p><p ALIGN="JUSTIFY">{</p><p ALIGN="JUSTIFY">CscrollView::OnIntialUpdate();</p><p ALIGN="JUSTIFY">Csize sizeTotal;</p><p ALIGN="JUSTIFY">SizeTotal.cs=sizeToal.cy=100;</p><p ALIGN="JUSTIFY">SetScrollSizes(MM-TEXT,sizeTotal);</p><p ALIGN="JUSTIFY">}</p></font><font FACE="宋体" LANG="ZH-CN" SIZE="4"><p ALIGN="JUSTIFY">其中,</font><font SIZE="4">cs</font><font FACE="宋体"LANG="ZH-CN" SIZE="4">和</font><font SIZE="4">cy</font><font FACE="宋体" LANG="ZH-CN"SIZE="4">分别为滚动窗口的水平、垂直分量,表明窗口的水平、垂直方向尺寸小于</font><fontSIZE="4">100</font><font FACE="宋体" LANG="ZH-CN" SIZE="4">像素单位时将出现水平方向滚动条和垂直方向滚动条。通过修改滚动尺寸,可改变出现滚动条的最小窗口。例如,若“</font><fontSIZE="4">sizeTotal.cx=600;sizeTotal.cy=800;</font><font FACE="宋体" LANG="ZH-CN"SIZE="4">”,则当窗口尺寸小于</font><font SIZE="4">600*800</font><fontFACE="宋体" LANG="ZH-CN" SIZE="4">时,就会出现滚动条。</p><p ALIGN="JUSTIFY">五、窗口分割</p><p ALIGN="JUSTIFY">该功能可将窗口分割成多个可滚动的面板,面板之间的边界称为分割条,可用分割条来调整每个面板的相对大小。要想增加窗口分割功能,则必须修改主窗口类。首先,在主窗口类的头文件</font><fontSIZE="4">MainFrm.h</font><font FACE="宋体" LANG="ZH-CN" SIZE="4">中添加以下代码:</p></font><font SIZE="4"><p ALIGN="JUSTIFY">CsplitterWnd m-SWnd;</p><p ALIGN="JUSTIFY">Virtual BOOL OnCreateClient (LPCREATESTRUCTcs,CcreateContext *pContext);</p></font><font FACE="宋体" LANG="ZH-CN" SIZE="4"><p ALIGN="JUSTIFY">再在</font><font SIZE="4">MainFrm.cpp</font><font FACE="宋体"LANG="ZH-CN" SIZE="4">中添加成员函数</font><font SIZE="4">OnCreateClient</font><fontFACE="宋体" LANG="ZH-CN" SIZE="4">的定义:</p></font><font SIZE="4"><p ALIGN="JUSTIFY">BOOL CmainFrame::OnCreateCline(LPCREATESTRUCTcs,CcreateContext *p Context)</p><p ALIGN="JUSTIFY">{</p><p ALIGN="JUSTIFY">return m-SWnd.Creat(this,2,2,Csize(20,20),pContext);</p><p ALIGN="JUSTIFY">}</p></font><font FACE="宋体" LANG="ZH-CN" SIZE="4"><p ALIGN="JUSTIFY">新的</font><font SIZE="4">CsplitterWnd</font><font FACE="宋体"LANG="ZH-CN" SIZE="4">类对象</font><font SIZE="4">m-SWnd</font><font FACE="宋体"LANG="ZH-CN" SIZE="4">用于创建和管理分割窗口,该窗口中可以包含一个或多个面板。首次创建主窗口时,将调用成员函数</font><fontSIZE="4">OnCreateClient</font><font FACE="宋体" LANG="ZH-CN" SIZE="4">。在缺省情况下,该函数创建一个填充主框窗口客户区的视图窗口。覆盖该函数后,将调用</font><fontSIZE="4">CsplitterWnd</font><font FACE="宋体" LANG="ZH-CN" SIZE="4">的成员函数</font><fontSIZE="4">Create</font><font FACE="宋体" LANG="ZH-CN" SIZE="4">来创建分割窗口。其中,第一个参数用于指定分割的父窗口(主窗口);第二个参数指定垂直方向上的面板个数为</font><fontSIZE="4">2</font><font FACE="宋体" LANG="ZH-CN" SIZE="4">;第三个参数指定水平方向上的面板的个数;第四个参数用于设置每个面板的最小尺寸;第五个参数传递描述信息。上述分割窗口的每个面板都是由视图类对象管理的,当用户在某一面板内显示文档和图形时,必须在其它面板中重新绘制,从而在多个面板中均显示相同的内容。为此,必须调用显示文档类的</font><fontSIZE="4">UpdateALLView</font><font FACE="宋体" LANG="ZH-CN" SIZE="4">成员函数来更新其它面板。此时,只需加入</font><fontSIZE="4">pdoc-</font><font FACE="宋体" LANG="ZH-CN" SIZE="4">></font><font SIZE="4">UpdataALLView(NULL)</font><fontFACE="宋体" LANG="ZH-CN" SIZE="4">即可。</p><p ALIGN="JUSTIFY">(本文作者</font><font SIZE="4"> </font><font FACE="宋体"LANG="ZH-CN" SIZE="4">刘杰)</p><p ALIGN="CENTER">回到<a href="../chinese.htm">中文教材</a></p><p ALIGN="JUSTIFY"> </p></font></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -