VC++编程------自定义窗口的创建 MFC VC++编程------自定义窗口的创建 MFC(Microsoft基础类库)是Microsoft Visual C++ 提供给WINDOWS程序员的一个“工具箱”或“零件”,程序员可以直 接利用、工或组合,编出各具特色的WINDOWS应用程序。MFC的内容多而复杂,本 文仅就用MFC建立一个风格化的子窗口来简要说明一下用MFC编程的一般过程。 CWnd类是所有窗口类的基类,它允许用户建立一个窗口。下面我们就从CWnd类是 派生的一个子类CSplashWnd。CSplashWnd 窗口类似于进入VC++时那个开头画面。 编写窗口类一般先用ClassWizard从CWnd派生出自己的窗口类.我们这里派生出了 CSplashWnd类。 重载Create函数,建立一个窗口。 void CSplash :: Create (CWnd *parentWnd) { BOOL bRet=CWnd::CreateEx(WM_EX_TOPMOST,AfxRegisterWndClass(0),0,WS_POPUP,x,y, Width,Height,parentWnd->GetSafeHwnd(),NULL,NULL); If (bRet) SetOwner(parentWnd); ShowWindow(SW_SHOW); } Create函数首先调用CWnd 成员函数CreateEx登记并建立一个窗口,其中第一个参 数表示扩展窗口风格,WM_EX_TOPMOST 使本窗口位于其他窗口之上.接下来两个参 数分别是指WNDCLASS和WindowName的指针.前者是AfxRegisterWndClass(WNDCLASS wc)登记窗口结构后返回的指针,后者则只是一个字符串指针,WS_POPUP设定窗口模 式为弹出式窗口,x,y设定了窗口左上角位置,width,height分别指定了窗口的宽度 和高度;下一个参数是一个指向父窗口句柄的指针,可用Cwnd类的GetSafeHwnd() 函数返回,最后两个参数用来设定窗口的菜单和鼠标,这里并不需要。 SetOwner函 数确定Splash窗口的父窗口。 ShowWindow(int nCmdShow)函数可通过参数 nCmdShow显示。 (SW_SHOW)或隐藏(SW_HIDE)一个窗口。 OK! 窗口建好了,下面还 需通过消息映射来控制窗口的行为,用ClassWizard也是很容易建立消息处理函数 的(具体做法可参考有关书籍)。 下面只是针对本窗口将一下窗口处理函数的编写 。 先用ClassWizard重载WM_CREATE消息处理函数: Void CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { ....... Set Timer(2,300,0); } 然后重载WM_TIMER消息处理函数。 Void CSplashWnd::OnTimer(UINI nIDEvent) { if (nIDEvent==2) { Show Window(SW_HIDE); Destroy Window); } 首先SetTimer函数设定过3000 ms 后发 送一个WM_TIMER消息。第一个函数设置的是事件ID号,然后在OnTimer函数里根据 事件ID号来判断到底是什么事件发送的消息.如果是2,就隐藏窗口并注销窗口。 弹出式窗口还需绘制窗口背景,重载OnPaint()函数就可以了。 void OnPaint() { CPaintDC dc(this); CDC memdc; CBitmap bm; bm.LoadBitmap(IDB_SPLASH); BITMAP mp; bm.SelectObject(sizeof(mp),&mp); memdc.CreateCompatible DC(&dc); membc.SelectObject (&bm); dc.BitBlt(0,0,mp.bmWidth,mp.bmHeight,&memdc,0,0,SRCCOPY); } 这里涉及到 很多GDI绘图函数,可参考有关书籍(图书馆有借)。 至此CSplashWnd类已经建 立,当需要使用Splash窗口时可用下列语句建立: Splash.Create(parentWnd);