Win32 Application基本框架
//程序入口
- intAPIENTRY WinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
- int nCmdShow)
- {
- MSG msg; //消息结构体
- //向系统注册窗口类别,输入的参数“hInstance”是目前程序运个体的对象代码
- MyRegisterClass(hInstance);
- //运行初始化函数
- if( ! InitInstance(hInstance,nCmdShow) //InitInstance函数进行初始实例化操作
- {
- return FALSE;
- }
- while( GetMessage( &msg,NULL, 0, 0 ) ) //GetMessage函数从消息队列中抓取消息
- {
- TranslateMessage(&msg); //对键盘消息进行转换成系统消息
- DispatchMessage(&msg); //分派消息到WndProc函数给对应的消息处理函数处理
- }
- return msg.wParam; //退出时返回给操作系统的消息
- }
//MyRegisterClass函数
- ATMO MyRegisterClass( HINSTANCE hInstance )
- {
- WNDCLASSEX wcex;
- wcex.cbsize = sizeof(WNDCLASSEX); //WNDCLASS所占用的内存字节
- wcex.style = CS_HREARAW | CS_VREDRAW; //窗体的样式
- wcex.lpfnWndProc = (WNDPROC) WndProc; //消息处理函数名,自己命名
- wcex.cbClsExtra = 0; //指定分配给窗口类结构(此处指lpszClassName)之后的额外字节数
- wcex.cbWndExtra = 0; //指定分配给窗口实例(此处指hInstance)之后的额外字节数
- wcex.hInstance = hInstance; //指定窗口过程所对应的实例句柄
- wcex.hIcon =NULL; //任务栏上的图标,NULL表示采用默认图标
- wcex.hCursor = LoadCursor(NULL, IDC_ARROW); //指定光标的样式
- wcex.hbrBackground = (HBRUSH) (COLOR_WINDOW+1); //指定窗口的背景画刷
- wcex.lpszMenuName = NULL; //通过菜单资源名称加载菜单
- wcex.lpszClassName = "seekCName"; //窗口类的类名(一个结构体而已,并不是C++的类)
- wcex.hIconSm = NULL; //窗口标题栏左侧的小图标,NULL表示采用默认图标
- return RegisterClassEx(&wcex);
- }
//WNDCLASSEX只是比WNDCLASS多了cbsize和hIconSm这两个成员,其它的都是一样。
//以上参数具体参看:http://baike.baidu.com/view/1750396.html
Nwcex.lpszName = "lpszClassName"详解:
当程序员将wcex结构按自己要求填写完成后就可以调用RegisterClass(或RegisterClassEx)函数将该类注册,这样以后凡是要创建该窗口,只需要以该类名(lpszClassName中指定)为参数调用CreateWindow,你看多方便呀,真是一举多得啊!如下Instance函数中的CreateWindow中的第一个参数“seekName”。
//InitInstance函数
- BOOL Instance( HINSTANCE hInstance, int nCmdShow )
- {
- HWND hWnd;
- hInst = hInstance;
- //建立一个窗口对象
- hWnd = CreateWindow( "seekCName", //窗口类名
- "绘图窗口", //窗口标题栏的标题
- WS_OVERLAPPEDWINDOW, //窗口的风格,定义为普通型
- CW_USEDEFAULT, //窗口左上角X轴坐标
- 0, //窗口左上角Y轴坐标
- CW_USEDEFAULT, //窗体的宽度
- 10, //窗体的高度
- NULL, //父窗体句柄
- NULL, //菜单句柄
- hInstance, //此应用程序的实例句柄
- NULL); //一般不用,设为空
- if( !hWnd )
- {
- return FALSE;
- }
- MoveWindow( hWnd, 10, 10, 600, 450, true ); //设定窗口显示位置及窗口大小
- ShowWindow( hWnd, nCmdShow ); //显示窗体
- UpdateWindow( hWnd ); //更新窗体
- return TRUE;
- }
详解ShowWindow和UpdateWindow的作用:
UpdateWindow只是更新客户区的多个无效区域(待更新区域),如果客户区的某个区域需要重画了,那么windows只是将这个区域设为无效区,此时它不是立即重画,而是等待用户或者系统自动调用UpdateWindow,这样如果有多个区域需要重画的话,就可以串联成一个无效区链表,这样只需调用一次UpdateWindow就将这些无效区重画了,而不用多次调用,提高了效率。
UpdateWindow()只向窗体发送WM_PAINT消息,在发送之前判断GetUpdateRect(hWnd,NULL,TRUE)看有无可绘制的客户区域,如果没有,则不发送WM_PAINT。
UpdateWindow是在HDC上画图的(无论窗口隐藏与否),不是用来显示窗口的;
ShowWindow 是用来显示/隐藏窗口,而不是用来在HDC上作图的。
//WndProc函数
- LRESULT CALLBACK WndProc( HWND hWnd, UINT message,
- WPARAM wParam, LPARAM lParam )
- {
- PAINTSTRUCT ps;
- HDC hdc;
- switch( message )
- {
- case WM_PAINT: //窗口重绘消息
- hdc = BeginPaint( hWnd, &ps );
- //用hdc进行具体的绘图动作
- EndPaint( hWnd, &ps );
- break;
- case WM_DESTROY: //窗口结束消息
- PostQuitMessage(0);
- break;
- default:
- return DefWindowProc( hWnd, message, wParam, lParam ); //默认处理函数
- }
- retrun 0;
- }
http://blog.csdn.net/qq2399431200/article/details/9320317
Win32 Application基本框架的更多相关文章
- Win32 Console Application、Win32 Application、MFC三者之间的联系和区别
转自:http://blog.csdn.net/c_base_jin/article/details/52304845 在windows编程中,我们或多或少都听说这三个名称,分别是Win32 Cons ...
- 【转】VS2012编译出来的程序,在XP上运行,出现“.exe 不是有效的 win32 应用程序” “not a valid win32 application”
原文网址:http://www.cnblogs.com/Dageking/archive/2013/05/15/3079394.html VS2012编译出来的程序,在XP上运行,出现“.exe 不是 ...
- VS2012编译出来的程序,在XP上运行,出现“.exe 不是有效的 win32 应用程序” “not a valid win32 application”
升级vs2010到vs2012,突然发现build出来的应用程序无法运行,提示“不是有效的 win32 应用程序” or “not a valid win32 application”. 参考CSDN ...
- npm 安装文件 运行报错 %1 is not a valid Win32 application
安装了那个模板出了错报这样的错误 “%1 is not a valid Win32 application” 你就除那个模板新安装. 如下例: 运行 npm install -g @angular/c ...
- IOS开发 Application Kit框架的线程安全
以下部分介绍了Application Kit框架的线程安全. 非线程安全类 以下这些类和函数通常是非线程安全的.大部分情况下,你可以在任何线程使用这些类,只要你在同一时间只有一个线程使用它们.查看这些 ...
- from PyQt4.QtGui import * 提示 ImportError: DLL load failed: %1 is not a valid Win32 application.
个人用64位电脑安装了64位的PyQt后 from PyQt4.QtGui import * 提示 ImportError: DLL load failed: %1 is not a valid Wi ...
- 在Win32 Application 环境下实现MFC窗口的创建
// Win32下MFC.cpp : Defines the entry point for the application.// #include "stdafx.h" clas ...
- My first win32 application program
#include<afxwin.h>#include<afx.h>#define _AFXDLLclass CHelloApp :public CWinApp{public: ...
- ionic 报错%1 is not a valid Win32 application
Fixed the problem by installing python version 3.0 and above will do下载Python3.0或以上版本 python官网传送门:htt ...
随机推荐
- 【BZOJ 1005】[HNOI2008]明明的烦恼(化简的另一种方法)
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1005 [题意] [题解] 题目和题解在上一篇; 这里 对 [(m^(n-2-tot)) ...
- 建立一个OTP应用
http://www.javaeye.com/topic/374167 以下是在erlang项目开发中的一些记录,即包含很多通俗易懂的原则,也包含一些似是而非的建议,比较混乱,还没有积累到一个可以分门 ...
- 浏览器加载js文件顺序
在默认情况下,下载和执行js都会阻塞页面的渲染,当然现在浏览器支持并行下载,但仍然会阻塞图片等的下载和渲染,所以通常建议把js文件放body底.对于执行顺序,不管是外部js还是内部,只要 遇到< ...
- Topshelf组件
使用Topshelf组件构建简单的Windows服务 很多时候都在讨论是否需要了解一个组件或者一个语言的底层原理这个问题,其实我个人觉得,对于这个问题,每个人都有自己的看法,个人情况不同,选择的方 ...
- 使用QuickContactBadge关联联系人
QuickContactBadge继承了ImageView,因此它的本质也是图片,也可以通过android:src属性指定它显示的图片.QuickContackBadge额外功能是:该图片可以关联到手 ...
- Leetcode 617 Merge Two Binary Trees 二叉树
题意: 给定两棵树,将两棵树合并成一颗树 输入 Tree 1 Tree 2 1 2 / \ / \ 3 2 1 3 / \ \ 5 4 7 输出 合并的树 3 / \ 4 5 / \ \ 5 4 7 ...
- python win32api 使用小技巧
前些日子,由于需要,用python写了个小插件,通过win32api 访问外部程序的窗口 并且做些小操作. 因为原来对win32api 不怎么熟悉 所以只好求救.群里有个QQ:32034767 唐骁勇 ...
- WPF编游戏系列 之二 图标效果
原文:WPF编游戏系列 之二 图标效果 本篇将要实现图标的两个效果:1. 显示图标标签,2. 图标模糊效果.在上一篇中提到Image没有HTML <img>的Title属性( ...
- XF 进度条和指示器
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http:/ ...
- NetCore 上传,断点续传,可支持流上传
之前公司要做一个断点续传的业务,找了许多都没有找到合适的,都是残次不全的,终于让我遇到一个基于百度的 webuploader 的断点续传.原作者: 断点续传(上传)( https://www.some ...