一般在进行windows编程时都使用vc++精简版,其插入菜单,图片等资源等更简单,且vc中对中文有更好的支持,win7下安装的Mingw中文并不能很好地显示,有光标显示的位置和光标实际位置不符的问题。
MingW创建windows程序的工程,在new时要选择projects中的win32 application

windows编程基础:
windows编程的核心是消息驱动,要理解消息机制。
WinMain函数,该函数是windows程序的入口函数,在其中创建了窗口类(WNDCLASSEX)对象,并对其进行了各种设置,包括窗口类的名字(lpszClassName),所属实例句柄的设置,消息处理函数的设置,窗口类图标,菜单,鼠标,背景色等等的设置。然后注册该窗口类。
接着用上面注册的窗口类来创建窗口,使用CreateWindow函数,其中的参数需要指定,窗口类名,窗口标题,窗口风格,窗口的坐标和长宽,实例句柄等等。接着用ShowWindow(hwnd, nWinMode);UpdateWindow(hwnd);来显示窗口,接着是处理用户的消息,TranslateMessage用来翻译(解析)消息,DispatchMessage用来派发消息到相应的消息队列。
WindowFunc(名字可以不一样)是消息处理函数,其中主要是一个swich语句块,各种消息都有相应的标识符,其中WM_PAINT是重绘消息,当窗口被遮挡后重现或重新显示时,都会被执行。若不处理这个消息,则窗口很可能不能正常显示。
switch的结尾一般是这两句:
case WM_DESTROY: PostQuitMessage(0);    break;
default: return DefWindowProc(hwnd, message, wParam, lParam);
当你点击窗口右上角的叉就会发出WM_DESTROY消息,PostQuitMessage(0);只是直接发送一个消息到处理函数(不经过消息队列)进行处理,真正进行退出程序操作的是DefWindowProc中进行的。

插入资源:
在vc++中给程序插入资源是可以直接在直接在菜单栏中选择插入->资源,就可以方便地可视化地创建各种资源。MingW中必须要自己手动编写资源文件,点击File -> New -> ResourceScript来创建资源脚本文件。资源文件放在MingW工程中的Resource Files文件夹中。MingW中工程的目录结构如下:

以菜单的资源脚本文件为例,代码如下:

// Menu.rc
#include "Menu.h"// Menu
MYMENU MENU DISCARDABLE
BEGINPOPUP "文件&F"BEGINMENUITEM "OpenFile",  IDM_FILE_OPENMENUITEM "Exit", IDM_EXITPOPUP "1h&H"BEGINMENUITEM "2",102ENDENDPOPUP "图象变换&T"BEGINMENUITEM "负像",            IDM_INVERTMENUITEM "仿射变换",        IDM_FENDMENUITEM "帮助&H",              IDM_HELP
END

首先是菜单的名字:MYMENU,接下去一个begin,end语句块来对这个菜单进行定义,POPUP指定弹出菜单。弹出菜单只负责弹出子菜单项不会执行功能,所以它不需要指定标志符,接下去的begin,end语句指定改弹出菜单要弹出的菜单项,该菜单项也可以是弹出菜单,即弹出菜单可以嵌套,这就是多级菜单。MENUITEM指定点击后会执行特定功能的菜单项,这些菜单项都要有一个标志符,标识符是一个整数,一般标志符会定义在头文件中,比如这里Menu.h,代码如下:

// Menu.h
#define IDM_FILE            100
#define IDM_FILE_OPEN       101
#define IDM_EXIT            102#define IDM_TRANS            200
#define IDM_INVERT          201
#define IDM_F               202#define IDM_HELP         300

在资源文件中要使用这些标志符,则要在头部include相应的头文件。
要注意这些菜单名字中&后的字母表示该菜单的快捷键,若是顶级菜单,按alt+该字母等于点击该菜单,若是子菜单,则在父菜单打开的情况下直接按该字母就相当于点击该菜单。

双缓冲技术:
双缓冲技术是windows编程中常用的消除闪烁的方法。所谓双缓冲技术就是应用程序在内存中创建一个和屏幕相兼容的图形设备上下文。该上下文实际上处理一个保存在内存中的BMP图片对象,这样就容许应用程序缓慢地在这个BMP上绘制图形。应用程序绘制完毕,就用WIN32API函数 BitBlt来将BMP图片填充到显存中,BitBlt函数速度非常快,足以在屏幕的刷新周期内完成绘图,这样能基本上避免闪烁。但双缓冲也有缺点,首先增加程序复杂度,其次要消耗一些内存,还有它让整个绘图时间变长,导致用户进行滚动时会产生“界面沉重感”,有“惯性”,此外还让人偷懒而不注意绘图操作的优化。

MingW环境下的windows编程相关推荐

  1. 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入

    成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入 目录 解决问题 解决思路 解决方法 解决问题 .pyx格式文件,在window ...

  2. Win32环境下动态链接库(DLL)编程原理

    Win32环境下动态链接库(DLL)编程原理 比较大应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作.其中可能存在一些模块的功能较为通用,在构造其它软件系 ...

  3. Linux环境下的网络编程

    本文介绍了在Linux环境下的socket编程常用函数用法及socket编程的一般规则和客户/服务器模型的编程应注意的事项和常遇问题的解决方法,并举了具体代  码实例.要理解本文所谈的技术问题需要读者 ...

  4. mac 环境下 制作windows系统U盘启动盘

    mac 环境下 制作windows系统U盘启动盘 下载系统文件   ylmf.iso 转换为img文件 hdiutil convert /Users/os/Downloads/ylmf.iso -fo ...

  5. 南工程c语言实验报告,Linux环境下-C语言编程实验报告(1)(总4页).doc

    Linux环境下-C语言编程实验报告(1)(总4页).doc 西 安 邮 电 大 学 (计算机学院)课内实验报告实验名称 Linux环境下 C语言编程 专业名称 网络工程班 级 1203班 学生姓名 ...

  6. linux环境c语言课程设计,linux环境下c语言编程课程设计

    linux环境下c语言编程课程设计 (14页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 1/14LINUX操作系统教程课程设计题目算术 ...

  7. Vmware ESX5i 环境下部署Windows Storage Server 2008 R2

    ESX5i 环境下部署Windows Storage Server 2008 R2       Windows Storage Server 2008 这款产品微软早已发布,WSS2008是基于Win ...

  8. 跨进程的 键盘钩子_Delphi下深入Windows编程之钩子原理一

    我的理想是能够写出一个可以永不封号的游戏外G 嗯,所以需要学习Windows下编程,最近好不容易有一点点空余时间,抓紧时间读书[Delphi下深入Windows编程],人丑就该多读书 钩子原理 定义: ...

  9. Ubuntu环境下制作Windows U盘启动工具

    Ubuntu环境下制作Windows U盘启动工具 第一次写这个,着实不会,权当自个儿记录一下吧.这两天准备学习语言,把elementaryOS改装Ubuntu ,装的时候迷糊眼一顿next,结果把原 ...

最新文章

  1. linux下安装jira详细步骤
  2. 大数据学习(1)Hadoop安装
  3. docker容器内部使用vim
  4. EF Core 数据库 Provider 一览
  5. 移动端去掉按钮点击热区
  6. 设计模式在业务系统中的应用
  7. 前端通信:ajax设计方案(五)--- 集成promise规范,更优雅的书写代码(改迭代已作废,移步迭代10)...
  8. 事务隔离级别神话与误解
  9. qtcpsocket断开_2020-05-06 QT子线程使用QTcpSocket连接服务器
  10. 虚拟化顶级技术会议KVM Forum演讲分享 | 移动云KVM共享云盘技术实践
  11. SCDN博客的转载方法
  12. 电脑外接显示器或ipad分屏
  13. 解决路由器登录页被维盟智能路由管理系统拦截
  14. 怎样挑选适合自己的云主机
  15. 1688店铺所有商品API接口(整店商品查询API接口)
  16. Java 读取src目录下的json文件
  17. 让macOS词典具备保存单词的生词本功能
  18. 智能穿戴开发需要什么技术_可穿戴技术–可穿戴应用开发技术
  19. 字节跳动今日头条前端面试题和经验
  20. html右键滚轮不起作用,鼠标滚轮上下失灵处理方法 为什么鼠标滚轮不管用

热门文章

  1. PrinterLogic 厂商修复影响所有联网端点的3个RCE漏洞
  2. Drupal 更新开源编辑器 CKEditor,修复两个 XSS 漏洞
  3. jQuery对象与DOM对象之间的转换方法
  4. DockerFile最佳实践:
  5. hdoj 1728 逃离迷宫
  6. 拦截器手动添加spring注入方法
  7. Android绘制基础及手写绘制实例
  8. 运维监控利器Nagios之:Nagios的日常维护和管理
  9. 【指针】C++中指针的使用艺术[转]
  10. 一步一步学VBScript(4)之WSH对象三