VC++中使用用户自定义消息及自定制窗口技巧
2008-11-13 19:29:43 来源:WEB开发网要修改视图窗口的显示性质,则可在视图文件 MyView.cpp 的下述成员函数中加入以下语句:
BOOL MyView::PreCreateWindow(CREATESTRUCT&cs)
{
// 在这里修改 cs 结构,改变 View 的风格。
cs.lpszClass=AfxRegisterWndClass(cs-HREDRAW|CS-VREDRAW,0,(HBRUSH))::GetStockObject(WHITE-BRUSH),0);
return CScrollView::PreCreateWindow(cs);
}
其中, cs 的参数 pszClass 用于存放 Windows 窗口类名称。要想注册 Windows 窗口类,则必须调用全局函数 AfxRegisterWndClass 。该函数原型为:
LPCTSTR AFXAPI AfxRegisterWndClass(UINTnClassStyle,HCURSOR hCursor=0,HBRUSH hbrBackground=0,HICON hIcon=0)
上述各参数用于定义风格,其含义分别为光标资源句柄、背景资源句柄、图标资源句柄。上述增加的语句的作用是:改变窗口大小时重画窗口、不显示光标图标、设置白色背景。
四、窗口的滚动
MFC 中的 CScrollView 可以帮助你自动实现窗口滚动的决大部分功能,使用 CscrollView 时, ClassWizard 生成 OnInitialUpdate() 成员函数为:
void CMyScrollView::OnInitialUpdat()
{
CScrollView::OnIntialUpdate();
CSize sizePage;
sizePage.cs=sizePage.cy=400;
SetScrollSizes(MM-TEXT,sizePage);
}
其中, cs 和 cy 分别为滚动窗口的水平、垂直分量,表明窗口的水平、垂直方向尺寸小于 400 像素单位时将出现水平方向滚动条和垂直方向滚动条。通过修改滚动尺寸,可改变出现滚动条的最小窗口。例如,若 sizePage.cx=600;sizePage.cy=800; ,则当窗口尺寸小于 600*800 时,就会出现滚动条。
五、窗口分割
该功能可将窗口分割成多个可滚动的帧,帧之间的边界称为分割条,可用分割条来调整每个帧的相对大小。要想增加窗口分割功能,则必须修改主窗口类。首先,在主窗口类的头文件 MainFrm.h 中添加以下代码:
CSplitterWnd m-SWnd;
Virtual BOOL OnCreateClient (LPCREATESTRUCTcs,CcreateContext *pContext);
再在 MainFrm.cpp 中添加成员函数 OnCreateClient 的定义:
BOOL CmainFrame::OnCreateCline(LPCREATESTRUCTcs,CcreateContext *p Context)
{
return m-SWnd.Creat(this,2,2,Csize(20,20),pContext);
}
新的 CSplitterWnd 类对象 m-SWnd 用于创建和管理分割窗口,该窗口中可以包含一个或多个帧。首次创建主窗口时,将调用成员函数 OnCreateClient 。在缺省情况下,该函数创建一个填充主框窗口客户区的视图窗口。覆盖该函数后,将调用 CsplitterWnd 的成员函数 Create 来创建分割窗口。其中,第一个参数用于指定分割的父窗口(主窗口);第二个参数指定垂直方向上的帧个数为 2 ;第三个参数指定水平方向上的帧的个数;第四个参数用于设置每个帧的最小尺寸;第五个参数传递描述信息。上述分割窗口的每个帧都是由视图类对象管理的,当用户在某一帧内显示文档和图形时,必须在其它帧中重新绘制,从而在多个帧中均显示相同的内容。为此,必须调用显示文档类的 UpdateALLView 成员函数来更新其它帧。此时,只需加入 pdoc- > UpdataALLView(NULL) 即可。
更多精彩
赞助商链接