原创 VC++基础实验1--Win32 Application

2013-1-13 21:44 2268 18 18 分类: 软件与OS 文集: VC++学习
迫于项目需要,从今天开始一步一步学习VC++程序开发。软件版本VC6.0,本节实验及后续章节均摘自孙鑫《VC++深入详解》一书,若有其它参考文献会相应列出。博客内容节选于自己学习笔记,故标号与笔记保持一致。

2.1 Win32 Application例程xuzhiqiangwhut

2.1.1步骤

建立一个Win32 Application工程xuzhiqiangwhut,体验windows平台编程的一些基础概念。

步骤:

1.新建工程。选择Win32 Application,填写工程名称,选好存储位置,点击确定,选择Empty Project选项,如下所示即可建立新工程。

20130113213827556.jpg

2.新建文件。文件->新建,选择C++ Source File,如图所示即可。

20130113213856498.jpg

3.编程。本例只是显示一个窗口,所以程序很简单,只编写两个函数:windows程序入口函数WinMain;窗口过程函数WinXuProc。源代码如下:

以下是代码片段:
     #include

#include

//窗口过程函数声明

LRESULT CALLBACK WinXuProc

(

HWND hwnd,//handle to window

UINT uMsg,//message identifier

WPARAM wParam,//first message parameter

LPARAM lParam//second message parameter

);


//程序入口函数(主函数)

int WINAPI WinMain

(

HINSTANCE hInstance,//handle to current instance

HINSTANCE hPrevInstance,//handle to previous instance

LPSTR lpCmdLine,//command line

int nCmdShow//show state

)

{

//设计一个窗口类

WNDCLASS wndcls;

wndcls.cbClExtra =0;//类附加内存,一般设为0

wndcls.cbWndExtra =0;//窗口附加内存,一般设为0

wndcls.hbrBackground =(HBRUSH)GetStockObject(BLACK_BRUSH);//调用GetStockObject指定背景画刷

wndcls.hCursor =LoadCursor(NULL,IDC_CROSS);//调用LoadCursor函数加载一个光标资源

wndcls.hIcon =LoadIcon(NULL,IDI_ERROR);//调用LoadIcon函数加载一个图标资源

wndcls.hInstance =hInstance;//应用程序实例句柄由WinMain函数传进来

wndcls.lpfnWndProc =WinXuProc;//指向上面定义的窗口过程函数

wndcls.lpszClassName ="xuzhiqiangwhut";//指定窗口类的名字

wndcls.lpszMenuName =NULL;//指定菜单资源,此处NULL表明创建的窗口没有默认的菜单

wndcls.style =CS_HREDRAW|CS_VREDRAW;//指定窗口类型的样式

//注册窗口类

RegisterClass(&wndcls);


//创建窗口,定义一个变量用来保存成功创建窗口后返回的句柄

HWND hwnd;

hwnd=CreateWindow("xuzhiqiangwhut","hello windows",WS_OVERLAPPEDWINDOW,

0,0,600,400,NULL,NULL,hInstance,NULL);


//显示及刷新窗口

ShowWindow(hwnd,SW_SHOWNORMAL);

UpdateWindow(hwnd);


//定义消息结构体,开始消息循环

MSG msg;

while(GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam ;

}


//窗口过程函数定义

LRESULT CALLBACK WinXuProc

(

HWND hwnd,//handle to window

UINT uMsg,//message identifier

WPARAM wParam,//first message parameter

LPARAM lParam//second message parameter

)

{

switch(uMsg)

{

case WM_CHAR:

char szChar[20];//定义字符串

sprintf(szChar,"char code is %d",wParam);

MessageBox(hwnd,szChar,"char",0);

break;

default:

return DefWindowProc(hwnd,uMsg,wParam,lParam);

}

return 0;

}

2.1.2说明

1.由本例可知创建一个完整的窗口,需要4个步骤:设计一个窗口类;注册窗口类;创建窗口;显示及更新窗口。

2.主函数中编写了一个消息循环,不断地从消息队列中取出消息,并进行响应。本例的Windows消息处理机制如下图所示:

20130113214251666.jpg

       1在应用程序xuzhiqiangwhut中敲击键盘,操作系统接收到窗口消息,将消息投递到xuzhiqiangwhut的消息队列中。

2程序在消息循环中调用GetMessage函数从消息队列中取出消息进行预处理,3调用DispatchMessage函数将消息回传给操作系统。

4操作系统调用窗口过程函数对消息进行处理。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
18
关闭 站长推荐上一条 /3 下一条