财神 发表于 2014-8-22 11:07:38

windows程序设计第十一章About1程序中的一个小问题

本帖最后由 财神 于 2014-8-22 11:10 编辑

   ABOUT1.C的代码如下

#include <windows.h>
#include "resource.h"

LRESULT CALLBACK WndProc      (HWND, UINT, WPARAM, LPARAM) ;
BOOL    CALLBACK AboutDlgProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                  PSTR szCmdLine, int iCmdShow)
{
   static TCHAR szAppName[] = TEXT ("About1") ;
   MSG          msg ;
   HWND         hwnd ;
   WNDCLASS   wndclass ;

   wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
   wndclass.lpfnWndProc   = WndProc ;
   wndclass.cbClsExtra    = 0 ;
   wndclass.cbWndExtra    = 0 ;
   wndclass.hInstance   = hInstance ;
   wndclass.hIcon         = LoadIcon (hInstance, szAppName) ;
   wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
   wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
   wndclass.lpszMenuName= szAppName ;
   wndclass.lpszClassName = szAppName ;

   if (!RegisterClass (&wndclass))
   {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
   }

   hwnd = CreateWindow (szAppName, TEXT ("About Box Demo Program"),
                        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)
{
   static HINSTANCE hInstance ;

   switch (message)
   {
   case WM_CREATE :
          hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
          return 0 ;

   case WM_COMMAND :
          switch (LOWORD (wParam))
          {
          case IDM_APP_ABOUT :
               DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc) ;
               break ;
          }
          return 0 ;

   case WM_DESTROY :
          PostQuitMessage (0) ;
          return 0 ;
   }
   return DefWindowProc (hwnd, message, wParam, lParam) ;
}

BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,
                            WPARAM wParam, LPARAM lParam)
{
   switch (message)
   {
   case WM_INITDIALOG :
          return TRUE ;

   case WM_COMMAND :
          switch (LOWORD (wParam))
          {
          case IDOK :
          case IDCANCEL :
               EndDialog (hDlg, 0) ;
               return TRUE ;
          }
          break ;
   }
   return FALSE ;
}

问题是DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc) 中第二个参数TEXT ("AboutBox")表示对话框名称,而此程序的对话框资源中只有ID为"ABOUTBOX"的对话框,名称全部为大写,程序一样能正常运行。


请问资源名称是不是不区分大小写?还是其他的原因。谢谢!

小甲鱼 发表于 2014-8-26 20:39:04

是的,但保持良好的编程习惯,最好写一样。

财神 发表于 2014-8-26 20:55:24

谢谢鱼大大!

智商是硬伤 发表于 2015-8-25 07:38:07

{:7_146:}
页: [1]
查看完整版本: windows程序设计第十一章About1程序中的一个小问题