windows程序设计复习(一)

本文介绍了Windows环境下窗口编程的基本流程,包括窗口类注册、窗口创建、显示及更新等关键步骤,并详细解析了消息循环机制和常见消息类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

窗口创建过程

1.注册窗口类

       定义一个WNDCLASS结构体,对结构体进行初始化,然后调用RegisterClass函数注册该窗口类:

typedef struct
{
     UINT style ;//窗口的类别
     WNDPROC lpfnWndProc ;//窗口过程的地址
     int cbClsExtra ;
     int cbWndExtra ;
     HINSTANCE hInstance ;//程序实例句柄
     HICON hIcon ;//程序的图标
     HCURSOR hCursor ;//游标
     HBRUSH hbrBackground ;//窗口背景
     LPCTSTR lpszMenuName ;//菜单名
     LPCTSTR lpszClassName ;//窗口类名
}WNDCLASS, * PWNDCLASS ;

运用RegisterClass函数来注册窗口类。 

2.运用CreateWindow函数来创建窗口。

3.显示和更新窗口:运用ShowWindow函数和UpdateWindow函数来获取和更新窗口。

4.消息循环

消息结构体:

typedef struct tagMSG
{
    HWND hwnd ;//发出消息的窗口句柄
    UINT message ;//消息
    WPARAM wParam ;
    LPARAM lParam ;
    DWORD time ;//消息发出的时间
    POINT pt ;//消息发出时鼠标的位置
}MSG, * PMSG

窗口循环实现:

while(GetMessage(.....))

{

     ShowWindow(......);

     UpdateWindow(......);
}

5.窗口处理过程处理消息

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     ......
    switch(message)
    {
        case 消息:
           ......
           break;
        .........
    }
    return DefWindowProc(hwnd,iMsg,wParam,lParam);
}

6.消息

1)WM_CREATE

触发:当调用CreateWindow和CreateWindowEx函数创建窗口时

参数:LPCREATESTRUCT lpcs = (LPCREATESTRUCT) lParam;

2)WM_SIZE

触发:当创建窗口时;窗口大小发生变化时

参数:fwSizeType = wParam; nWidth = LOWORD(lParam); nHeight = HIWORD(lParam);

近有幸拜读了Charles Petzold的大作《Windows程序设计》,真有种相见恨晚的感觉。这是本1999年出版、主要讲述在Windows平台下如何使用C语言调用API函数进行软件开发的老书。在当今RAD工具充斥市场的今天,该书依然是新手从事Windows下软件开发入门的不二之选。本人从事Windows平台软件开发已近三年,Windows相关的书籍和文档也阅读过不少,直到接触该书之后,好多以往含糊不清的概念才下子豁然开朗。说到这里,不得不佩服Charles Petzold先生的文笔和才识,能够把windows程序开发知识讲解的如此简洁明了、浅显易懂。   第章讲述的主要是些介绍性的、基础性的文字内容。   接触该书的先决条件是安装有Windows系统、了解C语言、安装有可进行Windows编程的开发环境。   Winows是支持抢占式多任务、多线程的图形操作系统。支持CUI(控制台用户接口)和GUI(图形用户接口)两种编程方式。所有基于GUI的Windows程序至少有个窗口,支持鼠标和键盘控制,每个时刻可以有多个Windows程序同时运行,互不冲突。   Winows运转的核心是个被称作“动态连接”的概念。通过“动态连接”功能可调用Windows提供的系统函数即API,这些函数主要包含在Kernel.dll(包含内存管理、文件I/O、任务处理API函数)、User.dll(包含用户界面API函数)、GDI.dll(包含图形设备接口API函数)三个动态连接库中。以往调用C库函数,只要包含头文件,就可以将C库函数中的机器代码连接到我们的程序中;调用Windows API函数,除了需包含头文件,还需要个对应的“导入库(import library)”文件,用以指明dll动态库的函数调用入口,而且dll动态库并不被连接到我们的程序中,只有在程序运行时,系统才将相应dll动态库载入到内存中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值