载入中
自定义HTML载入中... loading
Win32编程基础知识(一个最简单的Win32程序) [转贴 2008-03-18 17:08:50]  删除... 
字体变小 字体变大
尽管Windows应用程序千变万化,令人眼花缭乱,但,消息机制和窗口过程却始终它们的基础,掌握了这两项技术,也就相当于把握住了问题的关键。

  如果你以前是C程序员或是MFC的忠实用户,只要你学习过C语言的语法,自己亲手编过一些简短的C程序,理解以下的Win32编程基础也不是一件困难的事。

  一个最简单的Win32程序

  在以前的C语言编程中,一个最简单的程序可以只有两行。

void main(void)

{ printf "Hello World!"; }


  而要实现同样功能的Windows程序却最少也要写几十行,这并不是说明Windows应用程序效率低下,难于掌握,只是说明程序在Windows环境下有更丰富的内涵。Windows程序的效率其实不低,在所有的Windows应用程序中,都有一个程序初始化的过程,这得用上几十条语句,这段初始化的代码对于任何Windows应用程序而言,都是大同小异的。下面以一个实现最简单功能的程序EasyWin为例,说明Windows程序的基本框架。

  打开Visual C++ 6.0。

  选择File菜单的New,在出现的对话框中,选择Projects栏目(新建工程),并点取其下的Win32 Application项,表示使用Win32环境创建应用程序。先在Locatin(路径)中填入“c:\”,然后在Project Name(项目名称)中填入“EasyWin”,其它按照缺省设置)。单击OK按钮。

  再次选择File菜单的New,在出现的对话框中,选择Files栏目(新建文件),并点取其下的C++ Source File项,表示新建一个C++源文件。在右边的File栏中输入“EasyWin”,最后确定让Add to project检查框打上勾 )。单击OK按钮。

在EasyWin.cpp文件中输入以下源程序代码。

//*******************************************************************
// 工程:easywin
// 文件:easywin.cpp
// 内容:一个基本的Win32程序//*******************************************************************

#include <windows.h>

#include <windowsx.h>

//函数声明

BOOL InitWindow( HINSTANCE hInstance, int nCmdShow );

LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );

//*******************************************************************

//函数:WinMain()

//功能:Win32应用程序入口函数。创建主窗口,处理消息循环

//*******************************************************************

int PASCAL WinMain( HINSTANCE hInstance, //当前实例句柄

HINSTANCE hPrevInstance, //前一个实例句柄

LPSTR lpCmdLine, //命令行字符

int nCmdShow) //窗口显示方式

{

MSG msg;

//创建主窗口

if ( !InitWindow( hInstance, nCmdShow ) )

return FALSE;

//进入消息循环:

//从该应用程序的消息队列中检取消息,送到消息处理过程,

//当检取到WM_QUIT消息时,退出消息循环。

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

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

//程序结束

return msg.wParam;

}

//******************************************************************

//函数:InitWindow()

//功能:创建窗口。

//******************************************************************

static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )

{

HWND hwnd; //窗口句柄

WNDCLASS wc; //窗口类结构

//填充窗口类结构

wc.style = CS_VREDRAW | CS_HREDRAW;

wc.lpfnWndProc = (WNDPROC)WinProc;

wc.cbClsExtra = 0;

wc.cbWndExtra = 0;

wc.hInstance = hInstance;

wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION );

wc.hCursor = LoadCursor( NULL, IDC_ARROW );

wc.hbrBackground = GetStockObject(WHITE_BRUSH);

wc.lpszMenuName = NULL;

wc.lpszClassName = "EasyWin";

//注册窗口类

RegisterClass( &wc );

 

//创建主窗口

hwnd = CreateWindow(

"EasyWin", //窗口类名称

"一个基本的Win32程序", //窗口标题

WS_OVERLAPPEDWINDOW, //窗口风格,定义为普通型

100, //窗口位置的x坐标

100, //窗口位置的y坐标

400, //窗口的宽度

300, //窗口的高度

NULL, //父窗口句柄

NULL, //菜单句柄

hInstance, //应用程序实例句柄

NULL ); //窗口创建数据指针

if( !hwnd ) return FALSE;

//显示并更新窗口

ShowWindow( hwnd, nCmdShow );

UpdateWindow( hwnd );

return TRUE;

}

//******************************************************************

//函数:WinProc()

//功能:处理主窗口消息

//******************************************************************

LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )

{

switch( message )

{

case WM_KEYDOWN://击键消息

switch( wParam )

{

case VK_ESCAPE:

MessageBox(hWnd,"ESC键按下了!","Keyboard",MB_OK);

break;

}

break;

case WM_RBUTTONDOWN://鼠标消息

{

MessageBox(hWnd,"鼠标右键按下了!","Mouse",MB_OK);

break;

}

case WM_PAINT://窗口重画消息

{

char hello[]="你好,我是EasyWin !";

HDC hdc;

PAINTSTRUCT ps;

hdc=BeginPaint( hWnd,&ps ); //取得设备环境句柄

SetTextColor(hdc, RGB(0,0,255)); //设置文字颜色

TextOut( hdc, 20, 10, hello, strlen(hello) );//输出文字

EndPaint( hWnd, &ps ); //释放资源

break;

}

case WM_DESTROY://退出消息

PostQuitMessage( 0 );//调用退出函数

break;

}

//调用缺省消息处理过程

return DefWindowProc(hWnd, message, wParam, lParam);

}

  程序输入完毕,即可编译执行。在窗口中击鼠标键或按ESC键时,会弹出一个对话框以表示你的操作。

  其实,这个程序可以看成是所有Win32应用程序的框架,在以后所有的程序中,你会发现它们都是在这个程序的基础之上再添加代码。

                                           下一节

分类: 编程基础
票数:
什么是“我顶”?
点击数:    评论数:
本文章引用通告地址(TrackBack Ping URL)为:
本文章尚未被引用。
发表评论
大 名:
(不填写则显示为匿名者)
网 址:
(您的网址,可以不填)
标 题:
内 容:
请根据下图中的字符输入验证码:
(您的评论将有可能审核后才能发表)
和讯个人门户 v1.0 | 和讯部落 | 客服中心