window程序的结构

  • WinMain()函数  
int WINAPI WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
    )
{
    return 0;
}

hInstance:HINSTANCE 类型,指向某个实例的句柄,实例是正在运行的程序。

lpCmdLine:指向某个字符串的指针,该字符串包含启动程序的命令行字符。

nCmdShow:决定被创建窗口的外观。

  • 窗口过程函数

此函数处理应用程序从操作系统接收的许多消息。  WndProc 负责响应该事件。

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  • 指定程序窗口

WNDCLSSEX:特殊struct类型,包含用来指定窗口的数据。

typedef struct tagWNDCLASSEX {
  UINT      cbSize;       //The size, in bytes, of this structure.
  UINT      style;
  WNDPROC   lpfnWndProc;
  int       cbClsExtra;
  int       cbWndExtra;
  HINSTANCE hInstance;
  HICON     hIcon;
  HCURSOR   hCursor;
  HBRUSH    hbrBackground;
  LPCTSTR   lpszMenuName;
  LPCTSTR   lpszClassName;
  HICON     hIconSm;
} WNDCLASSEX, *PWNDCLASSEX;

构造WNDCLASSEX类型对象并填写对象成员的值

    static LPCTSTR szAPPName = L"APP";

    WNDCLASSEX WindowClass;
    WindowClass.cbSize = sizeof(WNDCLASSEX);
    WindowClass.style = CS_HREDRAW | CS_VREDRAW;//改变窗口的宽度或高度,则重画窗口
    WindowClass.lpfnWndProc = WndProc;//存储着指向程序中处理消息的函数指针
    WindowClass.cbClsExtra = 0;//为特别用途提供额外空间
    WindowClass.cbWndExtra = 0;//为特别用途提供额外空间
    WindowClass.hInstance = hInstance;//容纳当前应用程序实例的句柄
    WindowClass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));//定义最小化时应用程序的图标
    WindowClass.hCursor = LoadCursor(NULL, IDC_ARROW);//定义窗口使用的光标
    WindowClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);//定义窗口工作区的背景颜色
    WindowClass.lpszMenuName = NULL;//定义窗口菜单的资源的名称
    WindowClass.lpszClassName = szAPPName;//存储着为标识该特定的窗口类而提供的名称,通常使用应用程序的名称为该成员赋值
    WindowClass.hIconSm = LoadIcon(WindowClass.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));//标识某个与该窗口类相联系的小图标
  • 创建程序窗口

注册创口类

RegisterClassEx(&WindowClass);

创建窗口,使用函数CreateWindow(),传递给CreateWindow()函数的其他实差将添加一些附加的特性,函数返回所创建窗口的句柄。

HWND WINAPI CreateWindow(
  _In_opt_  LPCTSTR lpClassName,
  _In_opt_  LPCTSTR lpWindowName,
  _In_      DWORD dwStyle,
  _In_      int x,
  _In_      int y,
  _In_      int nWidth,
  _In_      int nHeight,
  _In_opt_  HWND hWndParent,
  _In_opt_  HMENU hMenu,
  _In_opt_  HINSTANCE hInstance,
  _In_opt_  LPVOID lpParam
);
    HWND hWnd;
        hWnd = CreateWindow(
        szAPPName,//类名称,用来识别前面在RegisterClassEx()函数调用中传递的WNDCLASSEX struct
        szTitle,//定义标题栏上出现的文本
        WS_OVERLAPPEDWINDOW,//定义窗口在创建之后应具有的样式
        CW_USEDEFAULT, CW_USEDEFAULT,
        500, 100,//定义窗口在屏幕上的位置和大小
        NULL,//父窗口的句柄
        NULL,//不需要菜单
        hInstance,//指定由Windows传递给程序的的当前程序实例的句柄
        NULL//多文档界面
        );

显示窗口

ShowWindow(hWnd, nCmdShow);

重画窗口

UpdateWindow(hWnd);
时间: 2024-10-13 18:44:51

window程序的结构的相关文章

Window程序的结构--学习笔记

学过C系语言编程的都知道,程序的入口一定是main()函数,在windows系统中也有这样的函数,它叫WinMain函数.WinMain函数是所有windows程序的入口,主要负责注册窗口类,创建并初始化窗口,进入消息循环,以及消息循环检索到WM_QIUT消息时,终止程序执行. 下面详细说明 在此之前,请看下面的代码: int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nC

使用XCB编写X Window程序(01):快速起步

估计现在已经没有谁使用XCB这么底层的库写应用程序了,要用也是用经过精心封装的Motif, LessTiff, GTK, Qt, EWL,  ETK或者Cairo等高层次的库.我之所以这么费心地去折腾XCB,其实主要也是为了学习.毕竟,使用最接近底层的UI库写代码是学习X协议及GUI编程原理的最好方法. XCB的主要教程可以参考这里:http://xcb.freedesktop.org/tutorial/ 和X协议有关的文档,在这里:http://www.x.org/releases/X11R7

seci-log 1.13 发布 简化了安装和程序底层结构做了调整

日志分析软件 seci-log 1.13发布,简化了安装和程序底层结构做了调整.上篇文章1.12,有兴趣可以了解一下.本次升级合并了linux和windows版本.这两个版本都为绿色版本(需要提前安装java 1.7版本),放到任意目录下都可以,如果正式使用建议放到磁盘空间大的磁盘中. 本次升级简化了安装,只依赖java 1.7,日志数据只存储到es中,去掉了mysql数据库,这样就不用安装mysql了,同时得到另外的一个有优势数据占用空间减少了一半多,因为同样一条记录,mysql存储空间要大于

使用XCB编写X Window程序(06):XCB取代Xlib的理由

我经常访问Xorg的官网,希望能找到一些对理解Linux和X Window有用的东西.结果也确实是偶有所得.比如,在Xorg的官网中就建议大家不用Xlib了,改用XCB.不可否认,Xlib确实是一个比较老的东西,老到最新的一本关于Xlib的书都已经是N多年前出版的了.有了Xorg官方的指导,我自然不用学Xlib了,直接上XCB. 经过这一段时间的学习,对XCB有了一定的了解.我的学习是根据XCB官方的教程来的,当然,如果有一点点在GUI编程领域的经验和悟性学习起来会更加事半功倍.在XCB的官方教

Java程序基本结构(一)

先来吐槽下,算是空闲时间来继续写博客之旅,记录点点滴滴.说是开始着手写Java系列的文章,可是坑货儿的公司第二天就派我出差了,一搞就一个星期,而且更坑的是出差住的地方竟然是老板在出差地方买的房子,房子装修滴垃圾,而且连热水都没有(因为常年没人在那住),洗澡都是一个问题,最让人受不了的是晚上还要义务的做事,把我自己的时间都给占用(搞到晚上十一点才睡觉),因为老板比较的抠,他和我们(还有一个和我一起出差滴)一起过来滴,是盯着我们啊.fuck,我心里一肚子的火,可是没办法啊,如今常流行说遇到这样的老板

如何使用Native Messaging API 打开window程序

问 如何使用Native Messaging API 打开window程序 cmd javascript terminal chrome Tychio 2013年03月26日提问 关注 1 关注 收藏 1 收藏,5.6k 浏览 问题对人有帮助,内容完整,我也想知道答案0问题没有实际价值,缺少关键内容,没有改进余地 我参照Fran?ois Beaufort的视频写了一个打开CMD程序的chrome应用,但是没效果,应该已调用到用于打开程序的本地应用了,但是似乎terminal.bat没有执行.视频

c语言学习之 程序基本结构

一个最基本的C程序由五个部分组成: 头文件 (Preprocessor commands) 函数 (function) 变量 (variable) 语句块 (statement 和 expression) 注释 (comments) 例如: #include <stdio.h> int main(){ /*my first c programming*/ printf("hello,world\n"); return 0; } c语言学习之 程序基本结构,码迷,mamico

一、程序基本结构

#region 导入命名空间 using System; using System.Collections.Generic; using System.Linq; using System.Text; #endregion // 声明命名空间 namespace _1.程序基本结构 {     /// <summary>     /// 声明一个类     /// </summary>     class Program     {         /*           * M

8.15 号 程序 选择结构作业的代码

/* 任意输入三个整数,按从大到小的顺序输出. */ #include <stdio.h> void main() { int num1,num2,num3,tmp; printf("输入任意3个整数:逗号分隔\n"); scanf("%d,%d,%d",&num1,&num2,&num3); if(num1 < num2) { tmp = num1; num1 = num2; num2 = tmp; } if(num1 &