//程序入口

  1. intAPIENTRY WinMain(HINSTANCE hInstance,
  2. HINSTANCE hPrevInstance,
  3. LPSTR lpCmdLine,
  4. int nCmdShow)
  5. {
  6. MSG msg;  //消息结构体
  7. //向系统注册窗口类别,输入的参数“hInstance”是目前程序运个体的对象代码
  8. MyRegisterClass(hInstance);
  9. //运行初始化函数
  10. if( ! InitInstance(hInstance,nCmdShow)   //InitInstance函数进行初始实例化操作
  11. {
  12. return FALSE;
  13. }
  14. while( GetMessage( &msg,NULL, 0, 0 ) )   //GetMessage函数从消息队列中抓取消息
  15. {
  16. TranslateMessage(&msg);   //对键盘消息进行转换成系统消息
  17. DispatchMessage(&msg);  //分派消息到WndProc函数给对应的消息处理函数处理
  18. }
  19. return msg.wParam;   //退出时返回给操作系统的消息
  20. }

//MyRegisterClass函数

  1. ATMO MyRegisterClass( HINSTANCE hInstance )
  2. {
  3. WNDCLASSEX wcex;
  4. wcex.cbsize = sizeof(WNDCLASSEX);    //WNDCLASS所占用的内存字节
  5. wcex.style = CS_HREARAW | CS_VREDRAW;   //窗体的样式
  6. wcex.lpfnWndProc = (WNDPROC) WndProc;   //消息处理函数名,自己命名
  7. wcex.cbClsExtra = 0;   //指定分配给窗口类结构(此处指lpszClassName)之后的额外字节数
  8. wcex.cbWndExtra = 0;   //指定分配给窗口实例(此处指hInstance)之后的额外字节数
  9. wcex.hInstance = hInstance;   //指定窗口过程所对应的实例句柄
  10. wcex.hIcon =NULL;   //任务栏上的图标,NULL表示采用默认图标
  11. wcex.hCursor = LoadCursor(NULL, IDC_ARROW);   //指定光标的样式
  12. wcex.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);   //指定窗口的背景画刷
  13. wcex.lpszMenuName = NULL;      //通过菜单资源名称加载菜单
  14. wcex.lpszClassName = "seekCName";   //窗口类的类名(一个结构体而已,并不是C++的类)
  15. wcex.hIconSm = NULL;   //窗口标题栏左侧的小图标,NULL表示采用默认图标
  16. return RegisterClassEx(&wcex);
  17. }

//WNDCLASSEX只是比WNDCLASS多了cbsize和hIconSm这两个成员,其它的都是一样。

//以上参数具体参看:http://baike.baidu.com/view/1750396.html

Nwcex.lpszName = "lpszClassName"详解:

当程序员将wcex结构按自己要求填写完成后就可以调用RegisterClass(或RegisterClassEx)函数将该类注册,这样以后凡是要创建该窗口,只需要以该类名(lpszClassName中指定)为参数调用CreateWindow,你看多方便呀,真是一举多得啊!如下Instance函数中的CreateWindow中的第一个参数“seekName”。

 

//InitInstance函数

  1. BOOL Instance( HINSTANCE hInstance, int nCmdShow )
  2. {
  3. HWND hWnd;
  4. hInst = hInstance;
  5. //建立一个窗口对象
  6. hWnd = CreateWindow( "seekCName",   //窗口类名
  7. "绘图窗口",    //窗口标题栏的标题
  8. WS_OVERLAPPEDWINDOW,   //窗口的风格,定义为普通型
  9. CW_USEDEFAULT,  //窗口左上角X轴坐标
  10. 0,      //窗口左上角Y轴坐标
  11. CW_USEDEFAULT,   //窗体的宽度
  12. 10,    //窗体的高度
  13. NULL,   //父窗体句柄
  14. NULL,   //菜单句柄
  15. hInstance,   //此应用程序的实例句柄
  16. NULL);  //一般不用,设为空
  17. if( !hWnd )
  18. {
  19. return FALSE;
  20. }
  21. MoveWindow( hWnd, 10, 10, 600, 450, true );   //设定窗口显示位置及窗口大小
  22. ShowWindow( hWnd, nCmdShow );   //显示窗体
  23. UpdateWindow( hWnd );   //更新窗体
  24. return TRUE;
  25. }

详解ShowWindow和UpdateWindow的作用:

UpdateWindow只是更新客户区的多个无效区域(待更新区域),如果客户区的某个区域需要重画了,那么windows只是将这个区域设为无效区,此时它不是立即重画,而是等待用户或者系统自动调用UpdateWindow,这样如果有多个区域需要重画的话,就可以串联成一个无效区链表,这样只需调用一次UpdateWindow就将这些无效区重画了,而不用多次调用,提高了效率。

UpdateWindow()只向窗体发送WM_PAINT消息,在发送之前判断GetUpdateRect(hWnd,NULL,TRUE)看有无可绘制的客户区域,如果没有,则不发送WM_PAINT。

UpdateWindow是在HDC上画图的(无论窗口隐藏与否),不是用来显示窗口的;

ShowWindow 是用来显示/隐藏窗口,而不是用来在HDC上作图的。

 

//WndProc函数

    1. LRESULT CALLBACK WndProc( HWND hWnd, UINT message,
    2. WPARAM wParam, LPARAM lParam )
    3. {
    4. PAINTSTRUCT ps;
    5. HDC hdc;
    6. switch( message )
    7. {
    8. case WM_PAINT:   //窗口重绘消息
    9. hdc = BeginPaint( hWnd, &ps );
    10. //用hdc进行具体的绘图动作
    11. EndPaint( hWnd, &ps );
    12. break;
    13. case WM_DESTROY:   //窗口结束消息
    14. PostQuitMessage(0);
    15. break;
    16. default:
    17. return DefWindowProc( hWnd, message, wParam, lParam );  //默认处理函数
    18. }
    19. retrun 0;
    20. }

http://blog.csdn.net/qq2399431200/article/details/9320317

Win32 Application基本框架的更多相关文章

  1. Win32 Console Application、Win32 Application、MFC三者之间的联系和区别

    转自:http://blog.csdn.net/c_base_jin/article/details/52304845 在windows编程中,我们或多或少都听说这三个名称,分别是Win32 Cons ...

  2. 【转】VS2012编译出来的程序,在XP上运行,出现“.exe 不是有效的 win32 应用程序” “not a valid win32 application”

    原文网址:http://www.cnblogs.com/Dageking/archive/2013/05/15/3079394.html VS2012编译出来的程序,在XP上运行,出现“.exe 不是 ...

  3. VS2012编译出来的程序,在XP上运行,出现“.exe 不是有效的 win32 应用程序” “not a valid win32 application”

    升级vs2010到vs2012,突然发现build出来的应用程序无法运行,提示“不是有效的 win32 应用程序” or “not a valid win32 application”. 参考CSDN ...

  4. npm 安装文件 运行报错 %1 is not a valid Win32 application

    安装了那个模板出了错报这样的错误 “%1 is not a valid Win32 application” 你就除那个模板新安装. 如下例: 运行 npm install -g @angular/c ...

  5. IOS开发 Application Kit框架的线程安全

    以下部分介绍了Application Kit框架的线程安全. 非线程安全类 以下这些类和函数通常是非线程安全的.大部分情况下,你可以在任何线程使用这些类,只要你在同一时间只有一个线程使用它们.查看这些 ...

  6. 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 ...

  7. 在Win32 Application 环境下实现MFC窗口的创建

    // Win32下MFC.cpp : Defines the entry point for the application.// #include "stdafx.h" clas ...

  8. My first win32 application program

    #include<afxwin.h>#include<afx.h>#define _AFXDLLclass CHelloApp :public CWinApp{public:  ...

  9. 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 ...

随机推荐

  1. 【BZOJ 1011】[HNOI2008]遥远的行星

    [题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1011 [题意] [题解] 这里的答案误差不超过5%是突破点; 如果是直接暴力写; 复杂 ...

  2. python 爬取bilibili 视频信息

    抓包时发现子菜单请求数据时一般需要rid,但的确存在一些如游戏->游戏赛事不使用rid,对于这种未进行处理,此外rid一般在主菜单的响应中,但有的如番剧这种,rid在子菜单的url中,此外返回的 ...

  3. 一起学Python:列表介绍

    列表介绍 想一想: 前面学习的字符串可以用来存储一串信息,那么想一想,怎样存储咱们班所有同学的名字呢? 定义100个变量,每个变量存放一个学生的姓名可行吗?有更好的办法吗? 答: 列表 <1&g ...

  4. [MFC]SDI在图片背景上实现文本跟随鼠标移动

    SDI是单文档接口应用程序的简称.本文要实现的是在视图区域显示一张图片,然后在图片表层显示文字,并且文字跟随鼠标移动.思考一下,可以判断这个问题一共分为以下几个部分:1.显示图片:2.找到鼠标的位置: ...

  5. CSS 常用 background 设置

    CSS 背景图片设置: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> & ...

  6. WPF去除边框的方法

    原文:WPF去除边框的方法 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangsen600/article/details/81978125 W ...

  7. winform - FixedDialog

    可以设置form的属性: 窗口样式: MaximizeBox  :  false       去掉 方法 按钮 MinimizeBox  :  false       去掉 缩小到任务栏 的按钮 禁止 ...

  8. Creating Apps With Material Design —— Defining Custom Animations

    转载请注明 http://blog.csdn.net/eclipsexys 翻译自Developer Android,时间仓促,有翻译问题请留言指出.谢谢 定义动画 在材料设计动画让用户与您的应用程序 ...

  9. 深入Qt 学习 -- 反射机制(比较简单清楚)

    相对于Java天生的这一特性, C++并不具备;但进入到Qt领域,这一切都变得简单自如了. 从Qt的元对象系统可知,除了提供信号/槽机制的特性之外,它还提供了以下特性: ■ QObject::meta ...

  10. flask-mail发送邮件始终失败

    from flask_mail import Mail,Message from flask import Flask import os app=Flask(__name__) app.config ...