一般在进行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中工程的目录结构如下:




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

  1. // Menu.rc
  2. #include "Menu.h"
  3.  
  4. // Menu
  5. MYMENU MENU DISCARDABLE
  6. BEGIN
  7. POPUP "文件&F"
  8. BEGIN
  9. MENUITEM "OpenFile", IDM_FILE_OPEN
  10. MENUITEM "Exit", IDM_EXIT
  11. POPUP "1h&H"
  12. BEGIN
  13. MENUITEM "2",102
  14. END
  15.  
  16. END
  17.  
  18. POPUP "图象变换&T"
  19. BEGIN
  20. MENUITEM "负像", IDM_INVERT
  21. MENUITEM "仿射变换", IDM_F
  22. END
  23.  
  24. MENUITEM "帮助&H", IDM_HELP
  25. END

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

  1. // Menu.h
  2. #define IDM_FILE 100
  3. #define IDM_FILE_OPEN 101
  4. #define IDM_EXIT 102
  5.  
  6. #define IDM_TRANS 200
  7. #define IDM_INVERT 201
  8. #define IDM_F 202
  9.  
  10. #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. c++ 中CImage类Load函数,路径中含有空格应对策略!

    最近,在写一些东西的时候,需要用到CImage类将JPG各式的图片转换成BMP图片,传入的是图片的绝对地址:如C:\Users\Administrator\Documents\Visual Studi ...

  2. java环境变量配置问题

    你要配置三个环境变量JAVA_HOMECLASSPATHPath你都配置了吗? 系统变量→新建 JAVA_HOME 变量 .变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0) 系统 ...

  3. javascript笔记整理(概述,变量,数据类型)

    A.概述 1.输出工具: document.write()---可以是html alert()---字符串 prompt(text,defaultText) text---可选.要在对话框中显示的纯文 ...

  4. linux下抓取网页快照

    1.下载 https://code.google.com/p/wkhtmltopdf/downloads/detail?name=wkhtmltoimage-0.11.0_rc1-static-i38 ...

  5. POJ 1042 Gone Fishing (贪心)(刘汝佳黑书)

    Gone Fishing Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 30281   Accepted: 9124 Des ...

  6. 公交线路免费api接口代码

    描写叙述:本接口主要是依据城市名称 +  线路名称 模糊查找城市公交线路信息. 开源api接口:http://openapi.aibang.com/bus/lines?app_key=keyvalue ...

  7. shell语法简单介绍

    一.基本的语法 1.1.shell文件开头 shell文件必须以以下的行開始(必须方在文件的第一行):  #!/bin/sh  符号#!用来告诉系统它后面的參数是用来运行该文件的程序.在这个样例中我们 ...

  8. linux命令:du,看文件大小

    du -s698 . (698字节)From <http://jingyan.baidu.com/article/a17d52855c10bf8098c8f2c9.html>

  9. Ubuntu下使用sshfs挂载远程目录到本地(和Windows挂载盘一样)

    访问局域网中其他Ubuntu机器,在不同机器间跳来跳去,很是麻烦,如果能够把远程目录映射到本地无疑会大大方面使用,就像Windows下的网络映射盘一样.在Linux的世界无疑也会有这种机制和方式,最近 ...

  10. 【Android】 -- 使用UncaughtExceptionHandler捕捉全局异常

    在综合统计SDK(欧盟统计局的朋友,百度统计)之后.有一个非常有利的功能测试:错误分析.此功能可以在程序的执行中遇到崩溃(runtimeException)反馈给server,帮助开发者提高产品.多功 ...