win32开发(mdi应用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

 

    mdi应用不是一个新的概念。如果说子窗口之间可以共享一个frame的话,那么mdi的概念就是,每一个子窗口一个frame。这样frame之间可以有各自的WndProc函数进行处理,使用起来也十分方便。

 

    一般mdi是这么操作的,首先注册一个WNDCLASS,所有信息中最重要的信息就是lpszClassName,如下所示,

  // Register the Hello child window class
    wndclass.style				= CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc		= HelloWndProc ;
    wndclass.cbClsExtra          = 0 ;
    wndclass.cbWndExtra          = sizeof (HANDLE) ;
    wndclass.hInstance           = hInstance ;
    wndclass.hIcon               = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor             = LoadCursor (NULL, IDC_ARROW) ;
    wndclass.hbrBackground       = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName        = NULL ;
    wndclass.lpszClassName       = szHelloClass ;
        
    RegisterClass (&wndclass) ;

    紧接着创建一个client window。注意这个window是所有子frame的母窗口,它会在main frame创建的时候执行,函数参数中最重要的信息就是"MDICLIENT"这个信息。

 

case   WM_CREATE:        // Create the client window

				clientcreate.hWindowMenu          = hMenuInitWindow ;
				clientcreate.idFirstChild         = IDM_FIRSTCHILD ;

				hwndClient = CreateWindow( TEXT("MDICLIENT"), NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE, 
								0, 0, 0, 0, hwnd, (HMENU)1, hInst, (PSTR)&clientcreate) ;
        
				return 0 ;

    一切都准备好了,那什么时候开始真正创建子frame呢,其实就是在消息响应的时候。大家可以自己添加一个菜单消息,比如像这样,注意szClass这个变量,它将sub frame和WNDCLASS联系在了一起,

				case   IDM_FILE_NEWHELLO:  // Create a Hello child window

					mdicreate.szClass	= szHelloClass;
					mdicreate.szTitle	= TEXT ("Hello") ;
					mdicreate.hOwner	= hInst ;
					mdicreate.x         = CW_USEDEFAULT ;
					mdicreate.y         = CW_USEDEFAULT ;
					mdicreate.cx        = CW_USEDEFAULT ;
					mdicreate.cy        = CW_USEDEFAULT ;
					mdicreate.style     = 0 ;
					mdicreate.lParam    = 0 ;

					hwndChild = CreateWindowEx(WS_EX_MDICHILD,szHelloClass,TEXT ("Hello"),0,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
											CW_USEDEFAULT,hwndClient,hMenuInitWindow,hInst,NULL);

					return 0 ;

    等到真正菜单单击的时候,我们就发现子frame被创建了。如果需要子frame处理特定的消息,只要在HelloWndProc添加对应的代码就可以了。

 

ps:

a. 目前网上找到的唯一可以执行的代码就是这个地址.。
b. 基本上所有win32 mdi实例代码都来自《windows程序设计》这本书中mdi这一章的demo代码。
c. 对于上面地址提供的代码,大家只要拷贝cpp文件、rc文件、resource.h头文件这三个文件就可以了。有了这三个文件,就可以在任意版本的visual studio上面建工程,运行代码了。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式-老费

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值