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

有过mfc开发经验的朋友都知道,在mfc下面有三种app开发的方式,它分别是mdi开发、sdi开发和dialog based开发。尤其是最后一种,这种基于对话框的开发方法常常用来进行简单工具的开发工作。那么,疑问来了,是不是可以用纯win32进行对话框的基本开发呢?答案是肯定,下面我们就来看一下怎么可以达到这一点。

大家如果还有印象的话,传统win32 app的开发流程是这样的,首先注册一个WNDCLASSEX,接着创建窗口,最后就是接收消息、处理消息,所有消息都是在wndProc里面解决。那对话框怎么弄呢,其实更简单,它除了不再需要注册WNDCLASSEX之外,剩下来的流程都是一样的,

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR     lpCmdLine,int       nCmdShow)
{// TODO: Place code here.MSG msg;HWND hWnd = CreateDialog(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), NULL, (DLGPROC)About);ShowWindow(hWnd, nCmdShow);// Main message loop:while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;
}

从代码中,大家可以发现,基于对话框的开发更简单。整个流程就是两个部分,一个是创建对话框,另外一个是获取消息、处理消息。那么消息在什么地方处理呢?其实就在CreateDialog里面注册的函数指针About这里处理,

// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{switch (message){case WM_INITDIALOG:return TRUE;case WM_COMMAND:PostQuitMessage(0);break;}return FALSE;
}

对话框没有实现什么功能,主要就是对WM_INITDIALOG和WM_COMMAND两个消息进行处理。当然,如果大家需要在对话框里面添加什么控件的话,只需要在About填上对应的消息处理逻辑就可以了。

从上面的代码来看,基于对话框的应用开发其实也不复杂。只是大家mfc用多了,自身对工具和平台产生了依赖。从个人发展来说,这其实是很不利的。win32开发虽然花的时间多了一些,但是对原理和流程可以理解得很透彻,这一点是mfc比不了的。

win32开发(对话框启动)相关推荐

  1. GCC for Win32开发环境介绍

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

  2. 跟我一起玩Win32开发

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

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

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

  4. Flask开发服务器启动方式

    开发服务器启动方式 在1.0版本之后,Flask调整了开发服务器的启动方式,由代码编写app.run()语句调整为命令flask run启动. from flask import Flaskapp = ...

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

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

  6. win32开发(调试)

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

  7. android app启动图片 加动画效果,Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案...

    Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案 大家在设计APP的末期,都会想给APP搞一些"花里胡哨"的特效来提高APP的B格.博主表示亲测有效 ...

  8. 关于BOS开发工具启动EAS客户端提示使用限期0天的问题

    问题重现 在BOS开发工具启动EAS客户端提示使用限期0天 先排除以下情况 https://vip.kingdee.com/article/43437916736258096 1.BOS工具版本与开发 ...

  9. Internal error: Oops: 37 [#1] PREEMPT SMP ARM。处理方法果然touchscreens被编译了,但是我的触摸屏没有接,取消此编译选项,重新编译,开发成功启动

    linux kernel version: 4.4.38 hardware : exynos4412-tiny4412 起因:我向调试开发板上的网络设备驱动,需要更新kernel,更新后发现开发板无法 ...

最新文章

  1. 智能车竞赛技术报告 | 节能信标组组 - 内蒙古大学创业学院 - 骄阳一队
  2. MarkDown 流程图 ... ...
  3. Git 创建两个“本地分支”协同工作
  4. EasyNVR摄像机网页无插件直播方案H5前端构建之:关于接口调用常见的一些问题(401 Unauthorized)...
  5. Android之自定义ContentProvider详解
  6. update和delete操作忘加where条件导致全表更新的处理方法
  7. Redis工作笔记-Jedis的基本使用
  8. Linux系统如何把一个文件传递到另一个机器上
  9. linux yum jemalloc,Redis安装报错error:jemalloc/jemalloc.h:No such file or directory解决方法
  10. 振型叠加法 matlab,Ansys模态叠加法谐响应分析
  11. Android:什么是签名、为什么要给应用程序签名、如何给应用程序签名
  12. 信捷PLC应用-三轴钻孔机
  13. 介绍常用的无线通信技术
  14. 2022年软考网络工程师考试备考指南
  15. DBeaver——设置字体大小
  16. idea groovy自定义自动生成实体 dao/mapper service等,支持表注释 字段注释
  17. Qt 笔锋 钢笔 压力值
  18. C++ boost库中的sp_counted_base实现解析
  19. Android 仿今日头条、网易新闻的频道管理
  20. 王慧文清华产品课(一)

热门文章

  1. 《编写可测试的JavaScript代码》——1.3 卓越的应用程序代码
  2. 1163: 零起点学算法70——Yes,I can!
  3. 沐猿而冠 -教育-读书笔记(一)
  4. Sharepoint2013:在页面上显示错误信息
  5. Android 基础总结
  6. 数据库切换为mysql中出现的问题:Error loading MySQLdb module.
  7. 3(1)-字符缓冲流
  8. HDU 1533 二分图最小权匹配 Going Home
  9. as3数据类型检查写法(is/as/typeof/in/instanceof)用法介绍
  10. 如何在类的外部修改类中的私有数据成员