科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Learning WTL8.0 Part-1 Win32 vs. ATL Windows Programming(一)

Learning WTL8.0 Part-1 Win32 vs. ATL Windows Programming(一)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

学习WTL可以有多种方式,当然如果有COM和ATL的知识背景最好不过,如果你有MFC编程背景却最为糟糕,除非你对MFC无所不知、无所不能: -)(如果你不是MFC的ORACLE,那么最好忘却它)

作者:ghost 来源:CSDN 2007年9月24日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

1.2 Win32程序的基本结构
VS2005向导产生的Win32 Project的块结构(block)和VS2003已有较大的改进了: -)。
 
以下代码均为了更清楚地说明主要问题而剔除了无关紧要的部分。
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
      // TODO: Place code here.
      MSG msg;
 
      MyRegisterClass(hInstance);
 
      // Perform application initialization:
      if (!InitInstance (hInstance, nCmdShow))
      {
            return FALSE;
      }
     
      // Main message loop:
      while (GetMessage(&msg, NULL, 0, 0))
      {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
      }
 
      return (int) msg.wParam;
}
以上代码结构主要由3个块构成:Register windows class、Initialize application和Main message loop 。
 
1.2.1 Register windows class
ATOM MyRegisterClass(HINSTANCE hInstance)
{
      WNDCLASSEX wcex;
 
      wcex.cbSize = sizeof(WNDCLASSEX);
 
      wcex.style              = CS_HREDRAW | CS_VREDRAW;
      wcex.lpfnWndProc = WndProc;
      wcex.cbClsExtra         = 0;
      wcex.cbWndExtra         = 0;
      wcex.hInstance          = hInstance;
      wcex.hIcon              = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32));
      wcex.hCursor            = LoadCursor(NULL, IDC_ARROW);
      wcex.hbrBackground      = (HBRUSH)(COLOR_WINDOW+1);
      wcex.lpszMenuName = MAKEINTRESOURCE(IDC_WIN32);
      wcex.lpszClassName      = szWindowClass;
      wcex.hIconSm            = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
 
      return RegisterClassEx(&wcex);
}
1.2.3 Initialize application
主要为CreateWindow、ShowWindow 。
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
 
   hInst = hInstance; // Store instance handle in our global variable
 
   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
 
   if (!hWnd)
   {
      return FALSE;
   }
 
   ShowWindow(hWnd, nCmdShow);
 
   return TRUE;
}
 
在这里,主要为处理WM_PAINT和WM_DESTROY消息
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
      int wmId, wmEvent;
      PAINTSTRUCT ps;
      HDC hdc;
 
      switch (message)
      {
      case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            // TODO: Add any drawing code here...
                  TextOut(hdc, 0, 0, _T("Hello world!"), 12);
            EndPaint(hWnd, &ps);
            break;
      case WM_DESTROY:
            PostQuitMessage(0);
            break;
      default:
            return DefWindowProc(hWnd, message, wParam, lParam);
      }
      return 0;
}
 
1.3 Build与程序输出
 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1795225

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章