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) ;}
这个文件就是定义了一个图标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
- Windows程序设计 非模态对话框 HEX
- 《Windows程序设计》之非模态对话框
- Windows程序设计之对话框
- 《Windows程序设计》对话框1
- 《Windows程序设计》之对话框
- Windows程序设计-通用对话框
- Windows程序设计-模态对话框和非模态对话框
- 《Windows》程序设计之对话框3
- 《Windows程序设计》之公用对话框
- windows程序设计之对话框简介1
- Windows程序设计 第十一章 模态对话框
- 《Windows程序设计》读书笔十一 对话框
- MFC Windows程序设计--对话框,属性表
- 对话框程序设计
- Windows学习心得【非模态对话框】
- Windows程序设计——消息对话框的使用小结
- 《Windows程序设计》学习笔记(chap11 对话框)-->重写俄罗斯方块代码
- windows程序设计读书笔记————对话框
- 应该被记住的 8 位 Java 人物
- "一致性相等"的陷阱
- <context-param>与<init-param>的区别与作用
- 函数指针数组的使用举例
- 陈晔:致所有测试人员的信
- Windows程序设计 非模态对话框 HEX
- Linq to SQL 简单的增删改操作
- Openvswitch之Qos rate-limiting原理
- 华为在德国慕尼黑召开5G无线网络技术大会
- TQ210搭载Android4.0.3系统构建之BEEP从驱动到HAL到JNI到应用程序(JNI篇)
- Java多线程发展简史
- VS2008 反汇编 小解
- NSData 和NSDateFormatter的使用总结
- 协议森林01 邮差与邮局 (网络协议概观)