一般在进行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. Robot Framework与Web界面自动化测试学习笔记:简单例子

    假设环境已经搭建好了.这里用RIDE( Robot Framework Test Data Editor)工具来编写用例.下面我们对Robot Framework简称rf. 我们先考虑下一个最基本的登 ...

  2. SSH框架总结(框架分析+环境搭建+实例源码下载)(转)

    首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...

  3. Java进阶01 String类

    链接地址:http://www.cnblogs.com/vamei/archive/2013/04/08/3000914.html 作者:Vamei 出处:http://www.cnblogs.com ...

  4. Windows下用WinSCP传输数据到Linux上

    Scenario:最近公司做的一个项目,UI部分我是使用python在编译时做localization的,是linux下运行的,但是开发是在windows下进行的每次编译后都要手动通过WinSCP这个 ...

  5. 不用SWIG,Go使用C++代码的方式

    将C++代码用C作一次封装,就可以让Go调用了. 这是一个C++头文件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #ifndef CGO_CPPGO_C ...

  6. ActiveMQ持久化方式(转)

    消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息 中心重新启动后仍然可以将消息发送出去,如果把这种持久化 ...

  7. 常见tcp端口

    TCP端口 7 = 回显 9 = 丢弃 11 = 在线用户 13 = 时间服务 15 = 网络状态 17 = 每日引用 18 = 消息发送 19 = 字符发生器 20 = ftp数据 21 = 文件传 ...

  8. [ACM] n划分数m部分,它要求每一个部分,并采取了最大的产品(间隔DP)

    A - 爱管闲事 春希很爱管闲事,他每天都会抽出时间帮助一些同学,因为春希很死板,出于公平性,春希不会先帮助后来找他的同学. 如今有n个同学须要他的帮助,尽管他非常想一天之类帮助全部人,但毕竟精力有限 ...

  9. linux命令:env

    env | grep DB ~/>env | grep DB KTK_NONDB_LOG=4

  10. Windows Azure入门教学系列 (一): 创建第一个WebRole程序

    原文 Windows Azure入门教学系列 (一): 创建第一个WebRole程序 在第一篇教学中,我们将学习如何在Visual Studio 2008 SP1中创建一个WebRole程序(C#语言 ...