程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> ATL的GUI程序設計(3)

ATL的GUI程序設計(3)

編輯:vc教程

  第二章 一個最簡單窗口程序的轉型

  我知道,可能會有很多朋友對上一章的“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;
}

  不知道你是否會覺得這段代碼有些冗長?事實上,這個程序已經體現了Win32 GUI程序運行的所有流程(請注意,我並不會對這些代碼進行詳細的解釋,因為我已經假設你已經了解了這些代碼具體行為的必要細節。如果不是這樣的話,請參考相關的書籍或者MSDN):

本文示例代碼或素材下載

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved