设为首页 加入收藏

TOP

第四章 Windows图形界面-上(一)
2017-10-11 15:53:56 】 浏览:9863
Tags:第四章 Windows 图形 界面

学习《Windows程序设计》记录

 

概念贴士:

1.  每个GUI应用程序至少应该创建一个窗口,称为主窗口,它作为用户与应用程序间的主界面来提供服务。大多数应用程序也直接或间接地创建其他窗口,来完成与主窗口相关的工作。

 

2.  应用程序的主窗口包括标题栏、菜单栏、Windows系统菜单、最小化按钮、最大化按钮、回复按钮、关闭按钮、可改变大小的边框、窗口客户区、垂直滚动条和水平滚动条。

 

3.  VC++6.0创建GUI程序:  1)创建VC++6.0,选择命令“文件”,点击“新建”;

                2)选择“工程”,点击“Win32 Application”选项;

                3)输入工程名、存放路径;

                4)点击OK按钮,选择第二项“一个简单Win32应用程序”;

                5)点击“完成”按钮,完成GUI程序工程创建。

 

4.  Win32程序的入口函数将是WinMain函数,而不是控制台程序的main函数。

 

5.  GUI应用程序的入口函数是WinMain,这是一个自定义的回调函数。其中APIENTRY是_stdcall的宏定义,说明WinMain函数采用的是Windows标准调用方式。

 

6.  用户创建窗口后,就要对窗口的行为负责。当Windows向程序发送消息时,它调用程序中的一个函数,这个函数的参数精确地描述了Windows发送的消息。在程序中称这个函数为窗口函数(Window Procedure)或消息处理函数。它是一个自定义的回调函数。

 

7.  系统为应用程序传递所有的输入到它的各个窗口,每个窗口都关联一个窗口函数,每当这个窗口有输入时,系统调用该函数。窗口函数处理输入,然后再将控制权交给系统。

 

8.  基于窗口界面的Windows应用程序是事件驱动(event-driven)的。为了取得输入,它们并不做显示的函数调用,而是等待系统传递输入给它们。

 

9.  在桌面上显示一个窗口的具体步骤(也就是主程序的结构流程):

        1)注册窗口类(RegisterClassEx);

        2)创建窗口(CreateWindowEx);

        3)在桌面显示窗口(ShowWindow);

        4)更新窗口客户区(UpdateWindow);

        5)进入无限的消息获取和处理的循环。  首先是获取消息(GetMessage).如果有消息到达,则将消息分派到回到函数进行处理(DispatchMessage)。如果消息是WM_QUIT,则GetMessage函数返回FALSE,整个消息循环结束。消息具体的处理过程是在MainWndProc函数中进行的。

 

 

代码解释:

FirstWindow

  PS:这是一个最简单的窗口程序源代码,作用是弹出一个典型的Windows窗口。这些代码可作为今后用API写Windows程序的基本框架。

 1 // 窗口学习01.cpp : Defines the entry point for the application.  2 //  3 
 4 #include "stdafx.h"
 5 LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);  6 int APIENTRY WinMain(HINSTANCE hInstance,  7  HINSTANCE hPrevInstance,  8  LPSTR lpCmdLine,  9                      int nCmdShow) 10 { 11      // TODO: Place code here.
12     char szClassName[]="MainWClass"; 13  WNDCLASSEX wndclass; 14     //用于描述主窗口的参数填充WNDCLASSEX结构
15     wndclass.cbSize=sizeof(wndclass);                    //结构的大小
16     wndclass.style=CS_HREDRAW|CS_VREDRAW;                //指定如果大小改变就重画
17     wndclass.lpfnWndProc=MainWndProc;                    //窗口函数指针
18     wndclass.cbClsExtra=0;                                //没有额外的类内存
19     wndclass.cbWndExtra=0;                                //没有额外的窗口内存;
20     wndclass.hInstance=hInstance;                        //实例句柄
21     wndclass.hIcon=::LoadIcon(NULL,IDI_APPLICATION);    //使用预定义图标
22     wndclass.hCursor=::LoadCursor(NULL,IDC_ARROW);        //使用预定义的光标
23     wndclass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH);    //使用白色背景画刷
24     wndclass.lpszMenuName=NULL;                            //不指定菜单
25     wndclass.lpszClassName=szClassName;                    //窗口类的名称
26     wndclass.hIconSm=NULL;                                //没有类的小图标 27     
28     //注册这个窗口类
29     ::RegisterClassEx(&wndclass); 30     
31     //创建主窗口
32     HWND hwnd=::CreateWindowEx( 33         0,                                              //dwExStyle,扩展样式
34         szClassName,                                    //lpClassName,类名
35         "My first Window!",                             //lpWindowName,标题
36         WS_OVERLAPPEDWINDOW,                            //dwStyle,窗口风格
37         CW_USEDEFAULT,                                  //X,初始X坐标
38         CW_USEDEFAULT,                                  //Y,初始Y坐标
39         CW_USEDEFAULT,                                  //nWidth,宽度
40         CW_USEDEFAULT,                                  //nHeight,高度
41         NULL,                                           //hWndParent,父窗口句柄
42         NULL,                                           //hMenu,菜单句柄
43         hInstance,                                      //hInstance,程序实例句柄
44         NULL);                                          //lpParam,用户数据
45         
46     if(hwnd==NULL) 47  { 48         ::MessageBox(NULL,"创建窗口出错!","error",MB_OK); 49         return -1; 50  } 51 
52     //显示窗口,刷新窗口客户区
53  ::ShowWindow(hwnd,nCmdShow); 54  ::UpdateWindow(hwnd); 55 
56     //从消息队列中取出消息,交给窗口函数处理,知道GetMessage返回FALSE,结束消息循环
57  MSG msg; 58     while(::GetMessage(&msg,NULL,0,0)) 59  { 60         //转化键盘消息
61         ::TranslateMessage(&msg); 62         //将消息发送到相应的窗口函数
63         ::DispatchMessage(&msg); 64  } 65 
66     //当GetMessage返回FALSE时程序结束
67     retu
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇WIN7与WIN10 安装 下一篇浅谈系统服务分发

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目