none
关于实例句柄(hInstance)的问题 RRS feed

  • 问题

  • #include <windows.h>
    #include "resource.h"
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
         TCHAR    szAppName[] = TEXT ("IconDemo") ;
         HWND     hwnd ;
         MSG      msg ;
         WNDCLASS wndclass ;
    
         wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
         wndclass.lpfnWndProc   = WndProc ;
         wndclass.cbClsExtra    = 0 ;
         wndclass.cbWndExtra    = 0 ;
         wndclass.hInstance     = hInstance ;
         wndclass.hIcon         = LoadIcon (hInstance, MAKEINTRESOURCE (IDI_ICON)) ;
         wndclass.hCursor       = LoadCursor (hInstance,MAKEINTRESOURCE (IDC_CURSOR)) ;
         wndclass.hbrBackground = (HBRUSH)GetStockObject (WHITE_BRUSH) ;
         wndclass.lpszMenuName  = NULL ;
         wndclass.lpszClassName = szAppName ;
    
         if (!RegisterClass (&wndclass))
         {
              MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                          szAppName, MB_ICONERROR) ;
              return 0 ;
         }
         
         hwnd = CreateWindow (szAppName, TEXT ("Icon Demo"),
                              WS_OVERLAPPEDWINDOW,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              NULL, NULL, hInstance, NULL) ;
         
         ShowWindow (hwnd, iCmdShow) ;
         UpdateWindow (hwnd) ;
         
         while (GetMessage (&msg, NULL, 0, 0))
         {
              TranslateMessage (&msg) ;
              DispatchMessage (&msg) ;
         }
         return msg.wParam ;
    }
    
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    
         HDC          hdc ;
         PAINTSTRUCT  ps ;
         
         switch (message)
         {          
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;      
                   EndPaint (hwnd, &ps) ;
                   return 0 ;
                   
         case WM_DESTROY :
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    

    这是一个比较简单的win32程序

     

      wndclass.hIcon         = LoadIcon (hInstance, MAKEINTRESOURCE (IDI_ICON)) ;

         wndclass.hCursor       = LoadCursor (hInstance,MAKEINTRESOURCE (IDC_CURSOR)) ;

    这两句中的hInstance为什么要指定呢,我不指定的话会有意外吗?

     

    2011年9月25日 3:05

答案

  • hInstance [in]

    Handle to an instance of the module whose executable file contains the icon to be loaded. This parameter must be NULL when a standard icon is being loaded.
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 Rob Pan 2011年9月30日 7:41
    2011年9月25日 3:34
    版主
  • 这个位置的参数是为了标识从哪个进程中加载资源

    你可以不指定

    那样会加载系统默认的

    • 已标记为答案 Rob Pan 2011年9月30日 7:41
    2011年9月26日 1:27

全部回复

  • hInstance [in]

    Handle to an instance of the module whose executable file contains the icon to be loaded. This parameter must be NULL when a standard icon is being loaded.
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 Rob Pan 2011年9月30日 7:41
    2011年9月25日 3:34
    版主
  • 这个位置的参数是为了标识从哪个进程中加载资源

    你可以不指定

    那样会加载系统默认的

    • 已标记为答案 Rob Pan 2011年9月30日 7:41
    2011年9月26日 1:27