MingW环境下的windows编程
一般在进行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"// MenuMYMENU MENU DISCARDABLE BEGIN POPUP "文件&F" BEGINMENUITEM "OpenFile",IDM_FILE_OPENMENUITEM "Exit",IDM_EXITPOPUP "1h&H"BEGINMENUITEM "2",102END ENDPOPUP "图象变换&T"BEGINMENUITEM "负像",IDM_INVERTMENUITEM "仿射变换",IDM_FEND MENUITEM "帮助&H",IDM_HELPEND
// Menu.h#define IDM_FILE100#define IDM_FILE_OPEN101#define IDM_EXIT102#define IDM_TRANS200#define IDM_INVERT201#define IDM_F202#define IDM_HELP300