Windows程序设计 非模态对话框 HEX

来源:互联网 发布:js自动签到脚本 编辑:程序博客网 时间:2024/06/16 00:50

P418--425

HEXCALC.C

//

/*----------------------------------------   HEXCALC.C -- Hexadecimal Calculator                (c) Charles Petzold, 1998  ----------------------------------------*/ #include <windows.h>LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,                    PSTR szCmdLine, int iCmdShow){     static TCHAR szAppName[] = TEXT ("HexCalc") ;     HWND         hwnd ;     MSG          msg ;     WNDCLASS     wndclass ;          wndclass.style         = CS_HREDRAW | CS_VREDRAW;     wndclass.lpfnWndProc   = WndProc ;     wndclass.cbClsExtra    = 0 ;     wndclass.cbWndExtra    = DLGWINDOWEXTRA ;    // Note!注意这个字段     wndclass.hInstance     = hInstance ;     wndclass.hIcon         = LoadIcon (hInstance, szAppName) ;     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;     wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1) ;     wndclass.lpszMenuName  = NULL ;     wndclass.lpszClassName = szAppName ;          if (!RegisterClass (&wndclass))     {          MessageBox (NULL, TEXT ("This program requires Windows NT!"),                      szAppName, MB_ICONERROR) ;          return 0 ;     }     //用的不是常见的CreateWindow() //第二个参数szAppName 是对话框模版资源的名称     hwnd = CreateDialog (hInstance, szAppName, 0, NULL) ;          ShowWindow (hwnd, iCmdShow) ;          while (GetMessage (&msg, NULL, 0, 0))     {          TranslateMessage (&msg) ;          DispatchMessage (&msg) ;     }     return msg.wParam ;}void ShowNumber (HWND hwnd, UINT iNumber){     TCHAR szBuffer[20] ;     wsprintf (szBuffer, TEXT ("%X"), iNumber) ;     SetDlgItemText (hwnd, VK_ESCAPE, szBuffer) ;}DWORD CalcIt (UINT iFirstNum, int iOperation, UINT iNum){     switch (iOperation)     {     case '=': return iNum ;     case '+': return iFirstNum +  iNum ;     case '-': return iFirstNum -  iNum ;     case '*': return iFirstNum *  iNum ;     case '&': return iFirstNum &  iNum ;     case '|': return iFirstNum |  iNum ;     case '^': return iFirstNum ^  iNum ;     case '<': return iFirstNum << iNum ;     case '>': return iFirstNum >> iNum ;     case '/': return iNum ? iFirstNum / iNum: MAXDWORD ;     case '%': return iNum ? iFirstNum % iNum: MAXDWORD ;     default : return 0 ;     }}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){     static BOOL  bNewNumber = TRUE ;     static int   iOperation = '=' ;     static UINT  iNumber, iFirstNum ;     HWND         hButton ;          switch (message)     {     case WM_KEYDOWN:                   // left arrow --> backspace          if (wParam != VK_LEFT)               break ;          wParam = VK_BACK;                                        // fall through     case WM_CHAR:          if ((wParam = (WPARAM) CharUpper ((TCHAR *) wParam)) == VK_RETURN)               wParam = '=' ;                    if (hButton = GetDlgItem (hwnd, wParam))          {               SendMessage (hButton, BM_SETSTATE, 1, 0) ;               Sleep (100) ;               SendMessage (hButton, BM_SETSTATE, 0, 0) ;          }          else          {               MessageBeep (0) ;               break ;          }                                        // fall through     case WM_COMMAND:          SetFocus (hwnd) ;                    if (LOWORD (wParam) == VK_BACK)         // backspace               ShowNumber (hwnd, iNumber /= 16) ;                    else if (LOWORD (wParam) == VK_ESCAPE)  // escape               ShowNumber (hwnd, iNumber = 0) ;                    else if (isxdigit (LOWORD (wParam)))    // hex digit          {               if (bNewNumber)               {                    iFirstNum = iNumber ;                    iNumber = 0 ;               }               bNewNumber = FALSE ;                              if (iNumber <= MAXDWORD >> 4)                    ShowNumber (hwnd, iNumber = 16 * iNumber + wParam -                    (isdigit (wParam) ? '0': 'A' - 10)) ;               else                    MessageBeep (0) ;          }          else                                    // operation          {               if (!bNewNumber)                    ShowNumber (hwnd, iNumber =                         CalcIt (iFirstNum, iOperation, iNumber)) ;               bNewNumber = TRUE ;               iOperation = LOWORD (wParam) ;          }          return 0 ;               case WM_DESTROY:          PostQuitMessage (0) ;          return 0 ;     }     return DefWindowProc (hwnd, message, wParam, lParam) ;}


// 资源文件 hexcalc.rc  

这个文件就是定义了一个图标icon 和 把另外一个资源文件include进来#include "hexcalc.dlg"

HEXCALC                 ICON    DISCARDABLE     "HexCalc.ico"


//hexcalc.rc  

//

//Hexcalc.rc//Microsoft Developer Studio generated resource script.//#include "resource.h"#define APSTUDIO_READONLY_SYMBOLS///////////////////////////////////////////////////////////////////////////////// Generated from the TEXTINCLUDE 2 resource.//#include "afxres.h"/////////////////////////////////////////////////////////////////////////////#undef APSTUDIO_READONLY_SYMBOLS/////////////////////////////////////////////////////////////////////////////// English (U.S.) resources#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)#ifdef _WIN32LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US#pragma code_page(1252)#endif //_WIN32#ifdef APSTUDIO_INVOKED///////////////////////////////////////////////////////////////////////////////// TEXTINCLUDE//1 TEXTINCLUDE DISCARDABLE BEGIN    "resource.h\0"END2 TEXTINCLUDE DISCARDABLE BEGIN    "#include ""afxres.h""\r\n"    "\0"END3 TEXTINCLUDE DISCARDABLE BEGIN    "#include ""hexcalc.dlg""\r\n"    "\0"END#endif    // APSTUDIO_INVOKED///////////////////////////////////////////////////////////////////////////////// Icon//// Icon with lowest ID value placed first to ensure application icon// remains consistent on all systems.HEXCALC                 ICON    DISCARDABLE     "HexCalc.ico"#endif    // English (U.S.) resources/////////////////////////////////////////////////////////////////////////////#ifndef APSTUDIO_INVOKED///////////////////////////////////////////////////////////////////////////////// Generated from the TEXTINCLUDE 3 resource.//#include "hexcalc.dlg"/////////////////////////////////////////////////////////////////////////////#endif    // not APSTUDIO_INVOKED


//

真正的对话框资源脚本文件 HEXCALC.DLG,这个是手工输入编写的

/*---------------------------   HEXCALC.DLG dialog script  ---------------------------*/HexCalc DIALOG -1, -1, 102, 122STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOXCLASS "HexCalc"CAPTION "Hex Calculator"{     PUSHBUTTON "D",       68,  8,  24, 14, 14     PUSHBUTTON "A",       65,  8,  40, 14, 14     PUSHBUTTON "7",       55,  8,  56, 14, 14     PUSHBUTTON "4",       52,  8,  72, 14, 14     PUSHBUTTON "1",       49,  8,  88, 14, 14     PUSHBUTTON "0",       48,  8, 104, 14, 14     PUSHBUTTON "0",       27, 26,   4, 50, 14     PUSHBUTTON "E",       69, 26,  24, 14, 14     PUSHBUTTON "B",       66, 26,  40, 14, 14     PUSHBUTTON "8",       56, 26,  56, 14, 14     PUSHBUTTON "5",       53, 26,  72, 14, 14     PUSHBUTTON "2",       50, 26,  88, 14, 14     PUSHBUTTON "Back",     8, 26, 104, 32, 14     PUSHBUTTON "C",       67, 44,  40, 14, 14     PUSHBUTTON "F",       70, 44,  24, 14, 14     PUSHBUTTON "9",       57, 44,  56, 14, 14     PUSHBUTTON "6",       54, 44,  72, 14, 14     PUSHBUTTON "3",       51, 44,  88, 14, 14     PUSHBUTTON "+",       43, 62,  24, 14, 14     PUSHBUTTON "-",       45, 62,  40, 14, 14     PUSHBUTTON "*",       42, 62,  56, 14, 14     PUSHBUTTON "/",       47, 62,  72, 14, 14     PUSHBUTTON "%",       37, 62,  88, 14, 14     PUSHBUTTON "Equals",  61, 62, 104, 32, 14     PUSHBUTTON "&&",      38, 80,  24, 14, 14     PUSHBUTTON "|",      124, 80,  40, 14, 14     PUSHBUTTON "^",       94, 80,  56, 14, 14     PUSHBUTTON "<",       60, 80,  72, 14, 14     PUSHBUTTON ">",       62, 80,  88, 14, 14}

// 头文件 resource.h 没有什么 HexCalc.rc的内容

// resource.h//{{NO_DEPENDENCIES}}// Microsoft Developer Studio generated include file.// Used by HexCalc.rc//// Next default values for new objects// #ifdef APSTUDIO_INVOKED#ifndef APSTUDIO_READONLY_SYMBOLS#define _APS_NEXT_RESOURCE_VALUE        103#define _APS_NEXT_COMMAND_VALUE         40001#define _APS_NEXT_CONTROL_VALUE         1003#define _APS_NEXT_SYMED_VALUE           101#endif#endif


         


       


原创粉丝点击