WEB开发网
开发学院软件开发VC ATL的GUI程序设计(3) 阅读

ATL的GUI程序设计(3)

 2006-04-11 22:54:28 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 第二章 一个最简单窗口程序的转型我知道,可能会有很多朋友对上一章的“Hello, World!”ATL版不以为然,ATL的GUI程序设计(3),因为它并不能算是什么ATL程序——毕竟它只不过是有了个CComModule而已,不过不管怎样我

本文示例源代码或素材下载

第二章 一个最简单窗口程序的转型

我知道,可能会有很多朋友对上一章的“Hello, World!”ATL版不以为然,因为它并不能算是什么ATL程序——毕竟它只不过是有了个CComModule而已。不过不管怎样我还是要说,它几乎仍然拥有了一个ATL GUI程序的所有组成部分:入口、初始化、程序体、卸载……

“等等!”也许你会突然打断我,“——还有注册窗口类、消息循环呢?”

当然,对于一个完整的GUI程序来讲,这也是必要的。

貌似废话

不清楚你是否已经为本章的内容做好了准备,因为下面我们就要动真格的了。不过考虑到本书的读者群中可能会存在着相当一部分了解MFC却对Win32 GUI的基本原理和流程不甚熟悉的朋友,所以李马特别为你们准备了这一节的内容。SDK的粉丝们可以跳过这一节,如果你们觉得李马讲的有些拖沓冗长的话。

那么,我还是先以一个标准的Win32 SDK程序开始:

//////////////////////////////////////////////////////////////////////////
// ATL的GUI程序设计配套源代码
// 第二章 一个最简单窗口程序的转型
// 工程名称:HelloSDK
// 作者:李马
// http://www.titilima.cn
//////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <tchar.h>
LRESULT CALLBACK HelloWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
  switch ( uMsg )
  {
  case WM_DESTROY:
    {
      PostQuitMessage( 0 );
    }
    break;
  case WM_PAINT:
    {
      HDC hdc;
      PAINTSTRUCT ps;
      hdc = BeginPaint( hWnd, &ps );
      DrawText( hdc, _T("Hello, SDK!"), -1, &ps.rcPaint, DT_CENTER | DT_VCENTER | DT_SINGLELINE );
      EndPaint( hWnd, &ps );
    }
    break;
  default:
    return DefWindowProc( hWnd, uMsg, wParam, lParam );
  }
  return 0;
}
BOOL InitApplication( HINSTANCE hInstance )
{
  WNDCLASS wc;
  wc.cbClsExtra  = 0;
  wc.cbWndExtra  = 0;
  wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
  wc.hCursor    = LoadCursor( NULL, IDC_ARROW );
  wc.hIcon     = LoadIcon( NULL, IDI_APPLICATION );
  wc.hInstance   = hInstance;
  wc.lpfnWndProc  = HelloWndProc;
  wc.lpszClassName = _T("HelloSDK");
  wc.lpszMenuName = NULL;
  wc.style     = CS_HREDRAW | CS_VREDRAW;
  return RegisterClass( &wc );
}
int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd )
{
  // 注册窗口类
  InitApplication( hInstance );
  // 创建窗口
  HWND hWnd = CreateWindow( _T("HelloSDK"), _T("Hello SDK"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
    CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL );
  ShowWindow( hWnd, nShowCmd );
  UpdateWindow( hWnd );
  // 消息循环
  MSG msg;
  while ( GetMessage( &msg, NULL, 0, 0 ) )
  {
    TranslateMessage( &msg );
    DispatchMessage( &msg );
  }
  return msg.wParam;
}

1 2 3 4 5  下一页

Tags:ATL GUI 程序设计

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接