win32开发(mdi应用)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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应用)相关推荐
- win32开发(对话框启动)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 有过mfc开发经验的朋友都知道,在mfc下面有三种app开发的方式,它分别是mdi开发.sdi开 ...
- GCC for Win32开发环境介绍
GCC for Win32开发环境介绍(1) 第一章 在视窗操作系统下的GCC 第一节GCC家族概览 GCC是一个原本用于Unix-like系统下编程的编译器.不过,现在GCC也有了许多Win32下的 ...
- win32开发(画笔、刷子、字体)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 因为win32开发基本上都是和windows打交道,这些api其他的os也用不到,所以建议大家在 ...
- win32开发(调试)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 很多同学都喜欢看代码,但是不喜欢调试代码.其实,在我看来,调试代码本身也是一项重要的能力.一份代 ...
- 跟我一起玩Win32开发
跟我一起玩Win32开发(1):关于C++的几个要点 我不知道各位,一提起 C++ ,第一感觉是什么?而据俺的观察,许多人几乎成了 " 谈 C 色变 " .不管是 C 还是 C++ ...
- 跟我一起玩Win32开发(4):创建菜单
跟我一起玩Win32开发(4):创建菜单 也不知道发生什么事情,CSDN把我的文章弄到首页,结果有不少说我在误人子弟,是啊,我去年就说过了,如果你要成为砖家级人物,请远离我的博客,我这个人没什么特长, ...
- 跟我一起玩Win32开发(5):具有单选标记的菜单
跟我一起玩Win32开发(5):具有单选标记的菜单 帅哥们,美女们,下午好,我又来误人子弟,请做好准备. 今天,我们的目的是,想要实现下图中的这种菜单效果. 就是一种类似单选按钮的菜单,多个菜单项中, ...
- 跟我一起玩Win32开发(25):监视剪贴板
跟我一起玩Win32开发(25):监视剪贴板 自从郭大侠和蓉儿离开桃花岛后,最近岛比较寂静,有一种"门前冷落鞍马稀"的感觉.于是,老邪就拿出<九阴真经>认真阅读,同时用 ...
- win32开发(窗口类和窗口)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 之前虽然也编写win32代码,比如使用visual studio自动生成的win32框架.但是对 ...
最新文章
- 解决Windows 10下Wireshark运行问题
- ASP.NET的SEO:使用.ashx文件——排除重复内容
- 菜鸟教程:SQL 通用数据类型
- intellij默认maven仓库配置路径+默认New Project 工程路径
- mysql快速随机_MySQL随机取数据最高效的方法
- 单片机c语言检测压力值,基于单片机的压力检测系统设计论文.doc
- WebGIS——Openlayers加载图层
- Verilog实现AXI4-Lite源代码
- java collections读书笔记(3) vector(2)
- Linux下查看端口状态的小工具lsof
- paip.mysql备份慢的解决
- 【Java NIO的深入研究2】RandomAccessFile的使用
- 【滤波跟踪】捷联惯导纯惯导解算matlab实现
- win10 动态磁盘 linux,教你如何将win10系统动态磁盘改成基本磁盘?
- MPEG4标准中的Advanced Simple Profile(ASP)完整的说明-01-02章
- Vue -脚手架的安装
- 数据库学生表,课程表,选课表
- arcengine Icommond 自定义工具
- python开发管理平台_python开发crm管理系统
- java 输出空心正方形_怎么用java数组打印一个正方形中间空着的
热门文章
- nginx+kibana代理以及简单认证
- Only a type can be imported解决方法
- 说说.NET中忽视的方法
- 扎克伯格公开信:Facebook拥有五大核心价值
- NS2 分裂机制及代码分析一
- Vue----常见面试题
- 让我们来谈谈合并排序算法
- linux 内核学习线索初步
- POJ 3101 Astronomy (角速度啊,高中物理啊。。。T_T)
- ‘MIX_INIT_MP3’ was not declared in this scope,这是什么情况?