分享
 
 
 

VC++实例编程系列——第一天

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

第一部分:Win32 SDK学习

第一天、 做一个空白窗口

先来搞清Win32 SDK应用程序的流程:

再来看看Win32程序是怎么开始的:

在C或C++中,一个DOS程序是从main()函数开始的,那么Windows程序是不是也是从main()函数开始呢?当然,答案是NO。那么Windows程序是从哪开始的呢?在Windows中,程序是从一个叫做WinMain()的函数开始的,它就像DOS程序中的main()函数。

下面看看WinMain()函数的格式:

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)

参数说明:

hInstance:当前实例句柄,由系统自动分配。

hPrevInstance:上一个实例句柄,在Win32中永远为NULL。

lpCmdLine:这个程序的命令行参数,没想到吧,Windows下的程序也支持命令行参数。这是个字符串。

nShowCmd:指定怎样显示窗口。这个参数,我一直都不明白,程序都是由系统启动的,我不知道怎样输入这个参数。

返回值:

如果是在接收到WM_QUIT消息后退出,则应该返回消息的wParam参数;

如果是在消息循环开始前退出,则应该返回一个0。

Win32程序的开始点搞清楚了,那这个函数中应该有点什么呢?

在WinMain()函数中,一般应完成这几方面的任务:(结构及函数详细说明参见本人翻译的Win32 SDK)

注册新的主窗口类型;

在这里需要了解一个结构和一个函数:

WNDCLASS结构;RegisterClass函数

新建并显示主窗口;

在这里需要了解CreateWindow函数、ShowWindow函数、UpdateWindow函数。

开始主窗口的消息循环。

在这里需要了解GetMessage函数、TranslateMessage函数、DispatchMessage。

好,现在就试着写一个空窗口程序:

//--------------------------------------------------------------------

//***********************华奇英多功能编辑器主头文件*********************

//文件名:Heditor.h

//--------------------------------------------------------------------

bool H_RegWindowsClass(HINSTANCE hInstance);

bool H_InitWindow(HINSTANCE hInstance,int nShowCmd);

LRESULT CALLBACK H_WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

//-------------------------------------------------------------------

//********************* 华奇英多功能编辑器主文件***********************

//文件名:Heditor.cpp

//-------------------------------------------------------------------

//包含文件

#include <windows.h> //在Win32程序中必须包含

#include "Heditor.h"

//全局变量

HINSTANCE H_Instance; //保存当前实例句柄的变量,供以后使用

//函数

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)

{

MSG cu_Msg; //消息结构

if(H_RegWindowsClass(hInstance)) //注册新的窗口类型

{ //如果注册成功

H_Instance=hInstance; //保存当前实例句柄

H_InitWindow(hInstance,nShowCmd); //建立窗口并显示

while(GetMessage(&cu_Msg,NULL,0,0)) //开始消息循环

{

TranslateMessage(&cu_Msg); //翻译字符消息

DispatchMessage(&cu_Msg); //分配信息

}

return(cu_Msg.wParam);

}

return(0);

}

bool H_RegWindowsClass(HINSTANCE hInstance) //注册视窗类型

{

WNDCLASS wc; //定义类注册结构

wc.style=CS_OWNDC|CS_HREDRAW|CS_VREDRAW; //定义类风格

wc.lpfnWndProc=H_WndProc; //窗口过程回调函数

wc.hInstance=hInstance; //实例句柄

wc.cbClsExtra=0;

wc.cbWndExtra=0;

wc.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口图标

wc.hCursor=LoadCursor(NULL,IDC_ARROW); //窗口光标

wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1); //窗口背景刷

wc.lpszMenuName=NULL; //窗口菜单名

wc.lpszClassName="webmain_Class"; //定义类名

if(RegisterClass(&wc)) //注册窗口类

return true; //成功,返回真

return false; //失败,返回假

}

bool H_InitWindow( //窗口初始化函数

HINSTANCE hInstance, //当前窗口实例句柄

int nShowCmd //显示窗口的方式

)

{

HWND cu_hWnd; //窗口句柄

cu_hWnd=CreateWindow("webmain_Class", //类名

"一个空白窗口", //窗口名称

WS_OVERLAPPEDWINDOW, //窗口风格

0,0, //窗口的左上角坐标

500,400, //窗口的宽与高

NULL, //窗口的父句柄或所有者句柄

NULL, //窗口的菜单句柄

hInstance, //实例句柄

NULL //一般为NULL,在以后的多文档窗口的建立中会讨论

); //新建窗口

if(!cu_hWnd)

{ //如果建立窗口失败

return(false);

}

ShowWindow(cu_hWnd,nShowCmd); //显示窗口

UpdateWindow(cu_hWnd); //更新窗口

return(true);

}

LRESULT CALLBACK H_WndProc( //窗口处理函数

HWND hwnd, //当前窗口的句柄

UINT uMsg, //消息标识符

WPARAM wParam, //消息的第一个附加参数

LPARAM lParam //消息的第二个附加参数

)

{

switch(uMsg)

{

case WM_DESTROY:

PostQuitMessage(0); //结束程序

break;

default:

return DefWindowProc(hwnd, uMsg, wParam, lParam); //调用默认窗口过程

}

return(0);

}

好,程序代码已写成,按Ctrl+F5试试。运行结果如下:

好,一个空白窗口已经完成,需要注意的是H_WndProc()函数,这个函数不能自己调用,必须由系统调用。它的名字可以是任意的,但参数不可以改变。这个函数是由窗口类型注册时写到窗口类型结构的lpfnWndProc参数中的。

本人由于是第一次写教学文章,难免有错误之处,请广大观者指出:hqywork@263.nethttp://websl.126.com

未完,待续……

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有