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

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

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

  // Register the Hello child window classwndclass.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 windowclientcreate.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 windowmdicreate.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上面建工程,运行代码了。

win32开发(mdi应用)相关推荐

  1. win32开发(对话框启动)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 有过mfc开发经验的朋友都知道,在mfc下面有三种app开发的方式,它分别是mdi开发.sdi开 ...

  2. GCC for Win32开发环境介绍

    GCC for Win32开发环境介绍(1) 第一章 在视窗操作系统下的GCC 第一节GCC家族概览 GCC是一个原本用于Unix-like系统下编程的编译器.不过,现在GCC也有了许多Win32下的 ...

  3. win32开发(画笔、刷子、字体)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 因为win32开发基本上都是和windows打交道,这些api其他的os也用不到,所以建议大家在 ...

  4. win32开发(调试)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 很多同学都喜欢看代码,但是不喜欢调试代码.其实,在我看来,调试代码本身也是一项重要的能力.一份代 ...

  5. 跟我一起玩Win32开发

    跟我一起玩Win32开发(1):关于C++的几个要点 我不知道各位,一提起 C++ ,第一感觉是什么?而据俺的观察,许多人几乎成了 " 谈 C 色变 " .不管是 C 还是 C++ ...

  6. 跟我一起玩Win32开发(4):创建菜单

    跟我一起玩Win32开发(4):创建菜单 也不知道发生什么事情,CSDN把我的文章弄到首页,结果有不少说我在误人子弟,是啊,我去年就说过了,如果你要成为砖家级人物,请远离我的博客,我这个人没什么特长, ...

  7. 跟我一起玩Win32开发(5):具有单选标记的菜单

    跟我一起玩Win32开发(5):具有单选标记的菜单 帅哥们,美女们,下午好,我又来误人子弟,请做好准备. 今天,我们的目的是,想要实现下图中的这种菜单效果. 就是一种类似单选按钮的菜单,多个菜单项中, ...

  8. 跟我一起玩Win32开发(25):监视剪贴板

    跟我一起玩Win32开发(25):监视剪贴板 自从郭大侠和蓉儿离开桃花岛后,最近岛比较寂静,有一种"门前冷落鞍马稀"的感觉.于是,老邪就拿出<九阴真经>认真阅读,同时用 ...

  9. win32开发(窗口类和窗口)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 之前虽然也编写win32代码,比如使用visual studio自动生成的win32框架.但是对 ...

最新文章

  1. 解决Windows 10下Wireshark运行问题
  2. ASP.NET的SEO:使用.ashx文件——排除重复内容
  3. 菜鸟教程:SQL 通用数据类型
  4. intellij默认maven仓库配置路径+默认New Project 工程路径
  5. mysql快速随机_MySQL随机取数据最高效的方法
  6. 单片机c语言检测压力值,基于单片机的压力检测系统设计论文.doc
  7. WebGIS——Openlayers加载图层
  8. Verilog实现AXI4-Lite源代码
  9. java collections读书笔记(3) vector(2)
  10. Linux下查看端口状态的小工具lsof
  11. paip.mysql备份慢的解决
  12. 【Java NIO的深入研究2】RandomAccessFile的使用
  13. 【滤波跟踪】捷联惯导纯惯导解算matlab实现
  14. win10 动态磁盘 linux,教你如何将win10系统动态磁盘改成基本磁盘?
  15. MPEG4标准中的Advanced Simple Profile(ASP)完整的说明-01-02章
  16. Vue -脚手架的安装
  17. 数据库学生表,课程表,选课表
  18. arcengine Icommond 自定义工具
  19. python开发管理平台_python开发crm管理系统
  20. java 输出空心正方形_怎么用java数组打印一个正方形中间空着的

热门文章

  1. nginx+kibana代理以及简单认证
  2. Only a type can be imported解决方法
  3. 说说.NET中忽视的方法
  4. 扎克伯格公开信:Facebook拥有五大核心价值
  5. NS2 分裂机制及代码分析一
  6. Vue----常见面试题
  7. 让我们来谈谈合并排序算法
  8. linux 内核学习线索初步
  9. POJ 3101 Astronomy (角速度啊,高中物理啊。。。T_T)
  10. ‘MIX_INIT_MP3’ was not declared in this scope,这是什么情况?