热度 18
2013-1-13 21:44
2270 次阅读|
0 个评论
迫于项目需要,从今天开始一步一步学习VC++程序开发。软件版本VC6.0,本节实验及后续章节均摘自孙鑫《VC++深入详解》一书,若有其它参考文献会相应列出。博客内容节选于自己学习笔记,故标号与笔记保持一致。 2.1 Win32 Application 例程 xuzhiqiangwhut 2.1.1 步骤 建立一个 Win32 Application 工程 xuzhiqiangwhut ,体验 windows 平台编程的一些基础概念。 步骤: 1. 新建工程。选择 Win32 Application ,填写工程名称,选好存储位置,点击确定,选择 Empty Project 选项,如下所示即可建立新工程。 2. 新建文件。文件 - 新建,选择 C++ Source File ,如图所示即可。 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 ;//定义字符串 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 消息处理机制如下图所示: 1 在应用程序 xuzhiqiangwhut 中敲击键盘,操作系统接收到窗口消息,将消息投递到 xuzhiqiangwhut 的消息队列中。 2 程序在消息循环中调用 GetMessage 函数从消息队列中取出消息进行预处理, 3 调用 DispatchMessage 函数将消息回传给操作系统。 4 操作系统调用窗口过程函数对消息进行处理。