一般在进行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
BEGIN
POPUP "文件&F"
BEGIN
MENUITEM "OpenFile", IDM_FILE_OPEN
MENUITEM "Exit", IDM_EXIT
POPUP "1h&H"
BEGIN
MENUITEM "2",102
END END POPUP "图象变换&T"
BEGIN
MENUITEM "负像", IDM_INVERT
MENUITEM "仿射变换", IDM_F
END MENUITEM "帮助&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. Windows环境下用C#编程将文件上传至阿里云OSS笔记

    Windows环境下用C#编程将文件上传至阿里云OSS笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/detai ...

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

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

  3. 在虚拟机linux环境下编译windows版adb fastboot

    原文出自:http://blog.chinaunix.net/uid-20546441-id-1746200.html 我根据虚拟机编译遇到的问题进行一些添加 [前提条件] Linux Android ...

  4. linux环境下的c++编程

    就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, anjuta,kd ...

  5. 工作组环境下管理windows.

    此处指的是windows7 1.防火墙设置 开启wmi,remote admin,防火墙远程管理 可以使用命令行 netsh advfirewall export "C:\temp\WFco ...

  6. VS IDE环境下,windows GUI(Qt MFC,win32)使用控制台实时打印调试信息

    在工程属性的页面下,点击Build Events,在Build Events下点击Post-Build Event. 然后再Command Line里面输入以下命令: editbin /SUBSYST ...

  7. C#环境下使用Windows消息传递字符串数据的研究

    前言: 日前,师兄交给了我一个课题,将一个后台运行的Console程序,修改为WindowsForm程序,并在其界面上增加配置设置,以及运行记录。 原来的Console程序,后台运行的流程在其中一个类 ...

  8. linux环境下的时间编程

    Linux下提供了丰富的api以供开发者们处理和时间相关的问题.然而这些接口看似各自为政实则有有着千丝万缕的联系,在学习和时间中引发了各种各样的混乱.因此时间处理成为了许多Linux开发者的梦魇,遇到 ...

  9. 关于在phpStudy环境下,windows cmd中 php不是内部命令问题

    首先查看system32是否加入系统变量 其次要把当前运行的php版本的路径加入到系统变量中去,path中, 一定要是这个样子的: D:\phpStudy\php\php-5.6.27-nts 不然没 ...

随机推荐

  1. jetty插件开发配置

    <plugins> <!-- jetty插件 --> <plugin> <groupId>org.mortbay.jetty</groupId&g ...

  2. ios网络学习------1get post异步请求

    网络请求的步骤: get请求: #pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,由于一般来说属性都是和界面关联的,我们能够通过參数的方式来使用属性 #pragma mark ...

  3. IP数据报首部校验和算法

    当用google搜索IP数据报首部校验和算法的时候,总是看到的是代码,没有看到其过程,于是就有了此文,如有错误请指正.文章省略一点,呵呵   IP/ICMP/IGMP/TCP/UDP等协议的校验和算法 ...

  4. Eclipse用法和技巧二十三:查看JDK源码

    使用java开发,如果能阅读JDK的经典代码,对自己的水平提高是很有帮助的.笔者在实际工作中总结了两种阅读JDK源码的方式.第一种下载android源代码,直接在android源码代码中,这里的代码虽 ...

  5. Python 基础编程

    Python 打印九九乘法表: for i in range(1,10): for j in range(1,i+1): print j,'*',i,'=',j*i,' ', print '\n' P ...

  6. WebStorm开发Nodejs环境搭建,包括破解最新的WebStom11破解

    先放上链接:http://pan.baidu.com/s/1eQUJZGm 文件内包含注册码和WebStom11安装包,希望能够帮助到大家,少些周折

  7. OnClientClick和OnClick

    OnClientClick是客户端事件处理方法,一般采用JavaScript来进行处理,也就是直接在IE端运行,一点击就运行 OnClick是服务器端事件处理函数,使用C#或者vb.net,在服务器端 ...

  8. CLR和.Net对象

    CLR和.Net对象生存周期 前言 1. 基础概念明晰* 1.1 公告语言运行时* 1.2 托管模块* 1.3 对象和类型* 1.4 垃圾回收器 2. 垃圾回收模型* 2.1 为什么需要垃圾回收* 2 ...

  9. 80 多个 Linux 系统管理员必备的监控工具

    随着互联网行业的不断发展,各种监控工具多得不可胜数.这里列出网上最全的监控工具.让你可以拥有超过80种方式来管理你的机器.在本文中,我们主要包括以下方面: 命令行工具 网络相关内容 系统相关的监控工具 ...

  10. XFdtd 7.3.2发布增强生物电磁学中的核磁共振功能

    XFdtd 日前发布7.3.2版,该版本主要针对生物电磁学中的核磁共振(MR)进行了功能增强,另外,也对软件的用户体验和计算性能进行了部分更新. XFdtd 是基于时域有限差分(FDTD)方法的全波三 ...