�������� Linux Tags
11. �Ի�����
�Ի������һ����ʽ�ǰ����������Ӵ�������ĵ���ʽ�Ӵ�����Щ������Ĵ�С��λ���ڳ�ʽ��Դ�������ġ��Ի�����ģ�塹��ָ������Ȼ��ʽд�����ܹ����ֹ�������Ի�����ģ�壬��������ͨ������Visual C++ Developer Studio���Խ�̸ʽ�����ķ�ʽ��Ƶģ�Ȼ����Developer Studio�����Ի�����ģ�塣
����ʽ��������ģ�彨���ĶԻ�����ʱ��Microsoft Windows
98����������ʽ�Ի������Ӵ������Ӵ���������ṩ�����Ի�����ѶϢ���������м��̺ͻ������룩���Ӵ�ѶϢ������ʽ����ʱ��ƺ������Щ���ܵ�Windows�ڲ���ʽ��Ϊ���Ի��������������
Windows���ڲ��Ի������Ӵ�ѶϢ������ʽ������������ѶϢҲ���ݸ����Լ���ʽ�еĺ�ʽ�������ʽ������ν�ġ��Ի�������򡹻��ߡ��Ի����򡹡��Ի���������ͨ���Ӵ�ѶϢ������ʽ���ƣ�����Ҳ������һЩ��Ҫ����һ����˵�������ڽ����Ի�����ʱ��ʼ�����Ӵ�����������������Ӵ��������ѶϢ�Լ������Ի�����֮�⣬��ʽд���߲���Ҫ�ٸ��Ի�������������������ܡ��Ի�����ͨ��������WM_PAINTѶϢ��Ҳ��ֱ�Ӵ������̺ͻ������롣
�Ի������������ĺ���̫���ˣ���Ϊ�����������Ӵ��������ʹ�á������������Ѿ��ڵھ����о������Ӵ�����������ڶԻ�������ʹ�����Ӵ�������ʱ,�ھ������ᵽ�����๤����������Windows�ĶԻ��������������ɡ������ǣ��ڳ�ʽCOLORS1�������ھ�����֮���л����뽹�������Ҳ�����ڶԻ������г��֡�Windows�ᴦ���Ի������еĿ�����֮���л����뽹����������ɵ�ȫ��������
�������ڳ�ʽ�����ӶԻ�����Ҫ������ͼʾ���߹��ܱ����鷳һЩ�����ǽ���һ���򵥵ĶԻ����鿪ʼ�������Ը�����֮����໥��ϵ�����˽⡣
ģ̬�Ի�����
��
�Ի������Ϊ���ࣺ��ģ̬�ġ��͡���ģ̬�ġ�������ģ̬�Ի�������Ϊ�ձ顣�����ij�ʽ��ʾһ��ģ̬�Ի�����ʱ��ʹ���߲����ڶԻ�������ͬһ����ʽ�е���һ���Ӵ�֮������л���ʹ���߱������������öԻ����飬�����ͨ����һ�¡�OK�����ߡ�Cancel��������ɡ�����������ʾģ̬�Ի�����ʱ��ʹ����ͨ�����Դ�Ŀǰ�ij�ʽ�л�����һ����ʽ������Щ�Ի����飨��Ϊ��ϵͳģ̬�����������������л���ʽ����Ҳ����������Windows�У���ʾ��ϵͳģ̬�Ի�����֮�ᣬҪ��������κι������������Ƚ����öԻ����顣
������About���Ի�����
��
Windows��ʽ��ʹ����Ҫ����ʹ�������룬Ҳͨ�������ɹ��ܱ��ϵġ�About��ѡ�������ĶԻ����飬�öԻ�����������ʾ��ʽ�����֡�ͼʾ����Ȩ���ͱ��Ϊ��OK���İ�����Ҳ��������������Ѷ�����缼��֧Ԯ�ĵ绰���룩�����ǽ�Ҫ�����ĵ�һ����ʽ������ʾһ����About���Ի������⣬�������á����ABOUT1��ʽ���ʽ11-1��ʾ��
��ʽ11-1 ABOUT1 ABOUT1.C /*------------------------------------------------------------------------ ABOUT1.C -- About Box Demo Program No. 1 (c) Charles Petzold, 1998 -------------------------------------------------------------------------*/ #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 ; }
ABOUT1.RC ��ժ¼�� //Microsoft Developer Studio generated resource script. #include "resource.h" #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// // Dialog ABOUTBOX DIALOG DISCARDABLE 32, 32, 180, 100 STYLE DS_MODALFRAME | WS_POPUP FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,66,80,50,14 ICON "ABOUT1",IDC_STATIC,7,7,21,20 CTEXT "About1",IDC_STATIC,40,12,100,8 CTEXT "About Box Demo Program",IDC_STATIC,7,40,166,8 CTEXT "(c) Charles Petzold, 1998",IDC_STATIC,7,52,166,8 END ///////////////////////////////////////////////////////////////////////////// // Menu ABOUT1 MENU DISCARDABLE BEGIN POPUP "&Help" BEGIN MENUITEM "&About About1...", IDM_APP_ABOUT END END ///////////////////////////////////////////////////////////////////////////// // Icon ABOUT1 ICON DISCARDABLE "About1.ico"
RESOURCE.H ��ժ¼�� // Microsoft Developer Studio generated include file. // Used by About1.rc #define IDM_APP_ABOUT 40001 #define IDC_STATIC -1
ABOUT1.ICO |
��
���������½��н��ܵķ��������������ڳ�ʽ�н���ͼʾ�͹��ܱ���ͼʾ�͹��ܱ���ID����Ϊ��About1�������ܱ���һ��ѡ�������һ��ID��ΪIDM_APP_ABOUT��WM_COMMANDѶϢ����ʹ�ó�ʽ��ʾ��ͼ11-1��ʾ�ĶԻ����顣
��
ͼ11-1 ��ʽABOUT1�ĶԻ����� |
�Ի����鼰��ģ��
��
Ҫ��һ���Ի��������ӵ�Visual C++ Developer Studio���е�Ӧ�ó�ʽ�ϣ������ȴ� Insert ���ܱ���ѡ�� Resource ��Ȼ��ѡ�� Dialog Box ������һ���Ի����������������ǰ���öԻ�������б����С����⣨Dialog���Լ� OK �� Cancel ��ť�� Controls �������������ڶԻ������в��벻ͬ�Ŀ����
Developer Studio���Ի������ID��Ϊ��׼��IDD_DIALOG1���������ڴ������ϣ������ڶԻ����鱾���������Ҽ���Ȼ��ӹ��ܱ���ѡ�� Properties ���ڱ���ʽ�У���ID��Ϊ��AboutBox�����������ţ���Ϊ�����ҽ����ĶԻ����鱣��һ�£��뽫 X Pos �� Y Pos ��λ��Ϊ32�����ʾ�Ի��������춳�ʽ�Ӵ���ʾ�������Ͻǵ���ʾλ�ô�����й�춶Ի������������ϸ���ۣ���
���ڣ������� Properties �Ի�������ѡ�� Styles ҳ���ǩ����Ϊ�˶Ի�����û�б����У����Բ�Ҫѡȡ Title Bar ��ȡ���顣Ȼ���뵥�� Properties �Ի������ �ر� ��ť��
���ڿ�����ƶԻ������ˡ���Ϊ����Ҫ Cancel ��ť�������ȵ����ð�ť��Ȼ�ᰴ�¼����ϵ� Delete ������������ OK ��ť�������ƶ����Ի�����ĵײ�����Developer Studio�Ӵ�����Ĺ���������һ��С����ͼ������ʹ���������Ӵ���ˮƽ���ж��룬�밴�´�ť��
�����Ҫ�ó�ʽ��ͼʾ�����ڶԻ������У����������������ڸ����� Controls �������а��¡� Pictures ����ť���������ƶ����Ի�����ı��棬���������Ȼ������һ�����Ρ������ͼʾ�����ֵ�λ�á�Ȼ���ڴξ����ϰ��»����Ҽ����ӹ��ܱ���ѡ�� Properties ������ ID Ϊ IDC_STATIC ����ʶ������RESOURCE.H�ж���Ϊ-1����춳�ʽ�в�ʹ�õ�����ID���� Type ��Ϊ Icon ���������� Image ��λ�����ʽͼʾ�����ƣ����ߣ�������Ѿ�������һ��ͼʾ����ô��Ҳ���Դ�����ʽ�嵥������ѡ��һ�����ƣ�About1����
��춶Ի������е�������̬�ִ������Դ� Controls ��������ѡ�� Static Text ��Ȼ��ȷ�������ڶԻ������е�λ�á��Ҽ����������Ȼ��ӹ��ܱ���ѡ�� Properties ���� Properties ��� Caption ��λ������Ҫ��ʾ�����֡�ѡ�� Styles ҳ���ǩ���� Align Text ��λѡ�� Center ��
��������Щ�ִ���ʱ����ϣ���Ի�������Ը���һЩ������ѡ�жԻ����飬Ȼ����ҷ�߿���Ҳ����ѡ�����ſ����ͨ���ü����ϵ��α��ƶ�����ɴ˲����������Щ����ͷ�������ƶ����������Shift���ᰴ��ͷ�������Ըı������Ĵ�С����ѡ�����������ʹ�С��ʾ��Developer Studio�Ӵ������½ǡ�
�����������һ��Ӧ�ó�ʽ����ô�����ڲ鿴��Դ������ABOUT1.RCʱ����������Developer Studio������ģ�塣������ƵĶԻ�����ģ�����£�
ABOUTBOX DIALOG DISCARDABLE 32, 32, 180, 100 STYLE DS_MODALFRAME | WS_POPUP FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,66,80,50,14 ICON "ABOUT1",IDC_STATIC,7,7,21,20 CTEXT "About1",IDC_STATIC,40,12,100,8 CTEXT "About Box Demo Program",IDC_STATIC,7,40,166,8 CTEXT "(c) Charles Petzold, 1998",IDC_STATIC,7,52,166,8 END
��һ�и����˶Ի���������ƣ�����ΪABOUTBOX������ͬ������Դ����Ҳ����ʹ��������Ϊ�Ի���������ơ����������ǹؼ���DIALOG��DISCARDABLE�Լ��ĸ����֡�ǰ���������ǶԻ��������Ͻǵ�x��y���꣬�������ڳ�ʽ���жԻ�����ʱ�������춸��Ӵ���ʾ����ġ������������ǶԻ�����Ŀ��Ⱥ͸߶ȡ�
��Щ����ʹ�С�ĵ�λ������ͼ�ء�����ʵ��������һ�����������ϵͳ����ϵͳֻ��춶Ի�����ģ�塣�������ݶԻ�����ʹ������Ĵ�С������������8���MS Sans Serif���壩��x����Ϳ��ȵĵ�λ����Ԫƽ�����ȵ�1/4��y����͸߶ȵĵ�λ����Ԫ�߶ȵ�1/8����ˣ�������Ի�������˵���Ի��������ϽǾ������Ӵ���ʾ����������5����Ԫ�����붥����2-1/2����Ԫ���Ի����鱾����40����Ԫ����10����Ԫ��
����������ϵʹ�ó�ʽд���߿���ʹ������ʹ�С�����¹��նԻ�����ijߴ����ۣ���������Ѷ��ʾ���Ľ������Ƕ��١����ϵͳ������Ԫ�ĸ߶ȴ���Ϊ����ȵ����������ԣ�x���y������Ȳ����ȡ�
ģ���е�STYLE���������CreateWindow�����е�style��λ�����ģ̬�Ի����飬ͨ��ʹ��WS_POPUP��DS_MODALFRAME�����ǽ����������������ѡ�
��BEGIN��END���������������Ҵ��������ֹ���ƶԻ�����ģ��ʱ�������ܻ�ʹ�ã�֮�䣬��������ڶԻ������е����Ӵ����������Ի�����ʹ����������̬�����Ӵ���������Ƿֱ���DEFPUSHBUTTON���ڶ���������ICON��ͼʾ����CTEXT�����־��У�����Щ�����ĸ�ʽΪ��
control-type "text" id, xPos, yPos, xWidth, yHeight, iStyle
���У������iStyle���ǿ�ѡ�ģ���ʹ��Windows��ͷ�����ж����ʶ������ָ�������Ӵ���ʽ��
DEFPUSHBUTTON��ICON��CTEXT��ʶ����ֻ�����ڶԻ�������ʹ�ã�������ij���ض��Ӵ������Ӵ���ʽ����д�����磬CTEXTָʾ������Ӵ�����������ǡ���̬�ġ�������ʽΪ��
WS_CHILD | SS_CENTER | WS_VISIBLE | WS_GROUP
��Ȼǰ��û�г��ֹ�WS_GROUPʶ���֣������ڵھ��µ�COLORS1��ʽ���Ѿ����ֹ�WS_CHILD��SS_CENTER��WS_VISIBLE�Ӵ���ʽ�������ڽ�����̬���Ӵ����ֿ�����ʱ�Ѿ��õ������ǡ�
���ͼʾ��������λ�dz�ʽ��ͼʾ��Դ���ƣ���Ҳ��ABOUT1��Դ�������ж��塣��춰�����������λ�dz����ڰ���������֣����������ͬ��ڳ�ʽ�н������Ӵ�������ʱ����CreateWindow��ָ���ĵڶ���������
id��λ�����Ӵ������丸�Ӵ�����ѶϢ��ͨ��ΪWM_COMMMANDѶϢ��ʱ������ʾ��������ֵ����Щ���Ӵ�������ĸ��Ӵ����ǶԻ����鱾����������ЩѶϢ���͸�Windows��һ���Ӵ�ѶϢ������ʽ������������Ӵ�ѶϢ������ʽҲ����ЩѶϢ���͸����ڳ�ʽ�и����ĶԻ��������IDֵ��ͬ������ڵھ��½������Ӵ�ʱ����CreateWindow��ʽ��ʹ�õ����Ӵ�ID��������ֺ�ͼʾ��������Ӵ�����ѶϢ��������Щֵ���趨ΪIDC_STATIC������RESOURCE.H�ж���Ϊ-1��������IDֵΪIDOK������WINUSER.H�ж���Ϊ1��
���������ĸ������趨���Ӵ���λ�ã����춶Ի�������ʾ��������Ͻǣ��ʹ�С����������ϵͳ����ƽ�����ȵ�1/4��ƽ���߶ȵ�1/8Ϊ��λ����ʾ�ġ����ICON���������Ⱥ͸߶Ƚ������ԡ�
�Ի�����ģ���е�DEFPUSHBUTTON���������˰���DEFPUSHBUTTON�ؼ������������Ӵ���ʽ���������Ӵ���ʽWS_GROUP���������۸ó�ʽ�ĵڶ����汾ABOUT2ʱ��������ϸ˵��WS_GROUP���Լ���ص�WS_TABSTOP��ʽ����
�Ի��������
��
����ʽ�ڵĶԻ�������������͸��Ի������ѶϢ�����ܿ������������Ӵ�ѶϢ������ʽ����������������ʵ���Ӵ�ѶϢ������ʽ���Ի�������Ӵ�ѶϢ������ʽ��Windows�ڲ����壬����Ӵ������������д�ĶԻ�������򣬰��������յ�������ѶϢ��Ϊ������������ABOUT1�ĶԻ��������
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 ; }
�ú�ʽ�IJ����볣���Ӵ�ѶϢ������ʽ�IJ�����ͬ�����Ӵ�ѶϢ������ʽ���ƣ��Ի�������򶼱��붨��Ϊһ��CALLBACK��callback����ʽ��������ʹ����hDlg��Ϊ�Ի������Ӵ��Ĵ��ţ�������Ҳ���԰������Լ�����˼ʹ��hwnd�����ȣ�����������һ�������ʽ���Ӵ�ѶϢ������ʽ������
WM_INITDIALOGѶϢ�ǶԻ�������յ��ĵ�һ��ѶϢ�����ѶϢֻ���͸��Ի������������Ի�������򴫻�TRUE����ôWindows�����뽹���趨���Ի������е�һ������WS_TABSTOP��ʽ�����ǽ���ABOUT2�������м��Խ��ͣ������Ӵ������������Ի������У���һ������WS_TABSTOP��ʽ�����Ӵ��������ǰ��������⣬�Ի��������Ҳ�����ڴ���WM_INITDIALOGʱʹ��SetFocus�������뽹���趨Ϊ�Ի������е�ij�����Ӵ������Ȼ�ᴫ��FALSE��
���⣬�Ի��������ֻ����WM_COMMANDѶϢ�����ǵ�������������У������ڰ�ť�������뽹�������°��¿հ׼�ʱ������������͸��丸�Ӵ���ѶϢ������������ID�������ڶԻ�����ģ���н����趨ΪIDOK����wParam�ĵ������С�������ѶϢ���Ի�����������EndDialog��������Windows����Ի����顣�����������ѶϢ���Ի�������򴫻�FALSE��������Windows�ڲ��ĶԻ������Ӵ�ѶϢ������ʽ�����ǵĶԻ�������򲻴�����ЩѶϢ��
ģ̬�Ի������ѶϢ��ͨ������ʽ��ѶϢ���У����Բ��ص��ĶԻ������м��̼��ټ���Ӱ�졣
�����Ի�����
��
��WndProc�д���WM_CREATEѶϢʱ��ABOUT1ȡ�ó�ʽ��ִ��ʵ����Ų��������ھ�̬�����У�
hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
ABOUT1���WM_COMMANDѶϢ����ȷ��ѶϢwParam�ĵ�λԪ�ֵ��IDM_APP_ABOUT�������������һ��ѶϢʱ����ʽ����DialogBox��
DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc) ;
�ú�ʽ��Ҫִ��ʵ����ţ��ڴ���WM_CREATEʱ����ģ����Ի��������ƣ�����Դ�������ж���ģ����Ի�����ĸ��Ӵ���Ҳ�dz�ʽ�����Ӵ����ͶԻ���������λַ�������ʹ��һ�����ֶ����ǶԻ�����ģ�����ƣ���ô������MAKEINTRESOURCE�޼�����ת��Ϊһ���ִ���
�ӹ��ܱ���ѡ��About About1��������ʾͼ11-2��ʾ�ĶԻ����顣������ʹ�û��󵥻���OK����ť�����հ׼����߰�Enter������������Ի����顣���κΰ����ڶ���ť�ĶԻ����飬�ڰ���Enter����հ׼�֮�ᣬWindows����һ��WM_COMMANDѶϢ���Ի����飬����wParam�ĵ��������ڶ�������ID����ʱ��IDΪIDOK������Escape��Ҳ���ԹرնԻ����飬��ʱWindows������һ��WM_COMMANDѶϢ������ID���IDCANCEL��
ֱ���Ի��������֮�ᣬ������ʾ�Ի������DialogBox�Ž�����Ȩ���ظ�WndProc��DialogBox�Ĵ���ֵ�ǶԻ���������ڲ����е�EndDialog��ʽ�ĵڶ������������ֵδ��ABOUT1��ʹ�ã�������ABOUT2��ʹ�ã���Ȼ�ᣬWndProc���Խ�����Ȩ���ظ�Windows��
��ʹ����ʾ�Ի�����ʱ��WndProcҲ���Լ�������ѶϢ��ʵ���ϣ������ԴӶԻ���������ڲ���WndProc����ѶϢ��ABOUT1�����Ӵ��ǵ���ʽ�Ի������Ӵ��ĸ��Ӵ�������AboutDlgProc�е�SendMessage���п���ʹ��������������ʼ��
SendMessage (GetParent (hDlg), . . . ) ;
��ͬ������
��
��ȻVisual C++ Developer Studio�еĶԻ�����à¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ô´ï¿½à¼ï¿½ï¿½ï¿½ï¿½Ê¹ï¿½ï¿½ï¿½Ç¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ã¿ï¿½ï¿½ï¿½ï¿½ï¿½Ô´ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ð´ï¿½ï¿½ï¿½ï¿½ï¿½â£¬ï¿½ï¿½ï¿½ï¿½Ñ§Ï°Ò»Ð©ï¿½ï¿½Ô´ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï·¨ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ÃµÄ¡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ì¶¶Ô»ï¿½ï¿½ï¿½ï¿½ï¿½Ä£ï¿½ï¿½ï¿½ï¿½Ëµï¿½ï¿½Öªï¿½ï¿½ï¿½ï¿½ï¿½ï·¨ï¿½ï¿½ï¿½ï¿½ï¿½Í¿ï¿½ï¿½Ô½ï¿½Ò»ï¿½ï¿½ï¿½Ë½ï¿½Ô»ï¿½ï¿½ï¿½ï¿½ï¿½Ä·ï¿½Î§ï¿½ï¿½ï¿½ï¿½ï¿½Æ¡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ÒªÊ±ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ô¼ï¿½ï¿½ï¿½ï¿½ï¿½Ò»ï¿½ï¿½ï¿½Ô»ï¿½ï¿½ï¿½ï¿½ï¿½Ä£ï¿½å£¨ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½HEXCALC��ʽ������Դ����������Դ�����﷨���ļ�λ�/Platform SDK/Windows Programming Guidelines/Platform SDK Tools/Compiling/Using the Resource Compiler��
��Developer Studio�ġ�Properties���Ի�������ָ���˶Ի�������Ӵ���ʽ��������ɶԻ�����ģ���е�STYLE���������ABOUT1������ʹ��ģ̬�Ի�������õ���ʽ��
STYLE WS_POPUP | DS_MODALFRAME
Ȼ������Ҳ���Գ���������ʽ����Щ�Ի������б����У����������ָ���Ի��������;��������ʹ����ͨ����������ʾĻ���ƶ��Ի����顣����ʽΪWS_CAPTION�������ʹ��WS_CAPTION����ôDIALOG��������ָ����x�����y�����ǶԻ�������ʾ��������꣬�����춸��Ӵ���ʾ��������Ͻǡ������н���y����֮����ʾ��
���ʹ���˱����У���ô��������CAPTION���������ַ�������С��ڶԻ�����ģ���У�CAPTION������STYLE���������棺
CAPTION "Dialog Box Caption"
���⣬�ڶԻ����������WM_INITDIALOGѶϢ�����ڼ䣬�������Ժ��У�
SetWindowText (hDlg, TEXT ("Dialog Box Caption")) ;
�����ʹ��WS_CAPTION��ʽ��Ҳ��������һ��WS_SYSMENU��ʽ��ϵͳ���ܱ���ť������ʽ����ʹ���ߴ�ϵͳ���ܱ���ѡ�� Move �� Close ��
�� Properties �Ի������ Border �嵥������ѡ�� Resizing ����ͬ���ʽWS_THICKFRAME��������ʹ�������ŶԻ����飬���ܴ˲����������á�����������������һ��Ļ�����������Ϊ�˶Ի�������ʽ������󻯷��顣
���������Ը��Ի���������һ�����ܱ�����ʱ�Ի�����ģ�彫���������������
MENU menu-name
��������ǹ��ܱ������ƣ�������Դ�����еĹ��ܱ��š�ģ̬�Ի��������ʹ�ù��ܱ������ʹ���˹��ܱ�����ô������ȷ�����ܱ��ͶԻ�����������е�����ID����Ψһ�ģ����߲���Ψһ�ģ�ȴ��������ͬ�����
FONT����ʹ�������趨��ϵͳ���壬�Թ��Ի���������ʹ�á����ڹ�ȥ�ĶԻ������в����ã�������ȴ�dz��ձ顣��ʵ�ϣ����ڶ�����£�Developer StudioΪ��������ÿһ���Ի����鶼ѡ��8���MS Sans Serif���塣һ��Windows��ʽ�ܰ��Լ���۴��÷dz����ڲ�ͬ����ֻ��Ϊ��ʽ�ĶԻ����鼰���������������׼��һ�����弴�ɡ�
���ܶԻ������Ӵ�ѶϢ������ʽͨ��λ�Windows�ڲ���������Ҳ����ʹ���Լ���д���Ӵ�ѶϢ������ʽ�������Ի�����ѶϢ��Ҫ���������������ڶԻ�����ģ����ָ��һ���Ӵ��������
CLASS "class-name"
�����÷����ټ��������ڱ���������ʾ��HEXCALC��ʽ�����ǽ��õ�����
����ʹ�öԻ�����ģ�������������DialogBoxʱ��Windowsͨ��������ͨ��CreateWindow��ʽ����ɽ�������ʽ�Ӵ�����Ҫ��ɵ�һ�в�����Windows�ӶԻ�����ģ����ȡ���Ӵ������ꡢ��С���Ӵ���ʽ������͹��ܱ�����DialogBox�IJ����л��ִ��ʵ����ź͸��Ӵ����š�������Ҫ��Ψһ������Ѷ��һ���Ӵ���𣨼���Ի�����ģ�岻ָ���Ӵ����Ļ�����WindowsΪ�Ի�����ע��һ��ר�õ��Ӵ��������Ӵ������Ӵ�ѶϢ������ʽ���Դ�ȡ�Ի��������λַ����λַ������DialogBox������ָ���ģ�������������ʹ��ʽ��øõ���ʽ�Ӵ������յ�ѶϢ����Ȼ��������ͨ���Լ���������ʽ�Ӵ���������ά���Լ��ĶԻ����顣������ʹ��DialogBox����򵥡�
Ҳ����ϣ�������Windows�Ի����������������ϣ���������ܹ�������Դ�����ж���Ի�����ģ�壬Ҳ������ϣ����ʽ��ִ��ʱ���Զ�̬�ؽ����Ի����顣��ʱ����������ֹ��ܵĺ�ʽ��DialogBoxIndirect���˺�ʽ�����Ͻṹ������ģ�塣
��ABOUT1.RC�ĶԻ�����ģ���У�����ʹ����дCTEXT��ICON��DEFPUSHBUTTON������Ի���������Ҫ��������̬�����Ӵ��������������ʹ��������̬��ÿ����̬������һ���ض���Ԥ�ȶ����Ӵ�����һ���Ӵ���ʽ���±���ʾ����һЩ��������̬��ͬ���Ӵ������Ӵ���ʽ��
��11-1 |
��������̬ | �Ӵ���� | �Ӵ���ʽ |
---|---|---|
PUSHBUTTON | ��ť | BS_PUSHBUTTON | WS_TABSTOP |
DEFPUSHBUTTON | ��ť | BS_DEFPUSHBUTTON | WS_TABSTOP |
CHECKBOX | ��ť | BS_CHECKBOX | WS_TABSTOP |
RADIOBUTTON | ��ť | BS_RADIOBUTTON | WS_TABSTOP |
GROUPBOX | ��ť | BS_GROUPBOX | WS_TABSTOP |
LTEXT | ��̬���� | SS_LEFT | WS_GROUP |
CTEXT | ��̬���� | SS_CENTER | WS_GROUP |
RTEXT | ��̬���� | SS_RIGHT | WS_GROUP |
ICON | ��̬ͼʾ | SS_ICON |
EDITTEXT | �༠| ES_LEFT | WS_BORDER | WS_TABSTOP |
SCROLLBAR | ������ | SBS_HORZ |
LISTBOX | �嵥���� | LBS_NOTIFY | WS_BORDER | WS_VSCROLL |
COMBOBOX | ����ʽ�嵥���� | CBS_SIMPLE | WS_TABSTOP |
��Դ��������Ψһ�ܹ�ʶ����Щ��д�ij�ʽ�����˱�����ʾ���Ӵ���ʽ�⣬ÿ������������������ʽ��
WS_CHILD | WS_VISIBLE
�����Щ��������̬������EDITTEXT��SCROLLBAR��LISTBOX��COMBOBOX֮�⣬�����������ĸ�ʽΪ��
control-type "text", id, xPos, yPos, xWidth, yHeight, iStyle
���EDITTEXT��SCROLLBAR��LISTBOX��COMBOBOX�����ʽΪ��
control-type id, xPos, yPos, xWidth, yHeight, iStyle
����û��������λ���������������У�iStyle��������ѡ���Եġ�
�ڵھ��£���������ȷ��Ԥ�ȶ������Ӵ��Ŀ��Ⱥ͸߶ȵĹ�����������Ҫ�ص��ھ���ȥ�ο���Щ������ʱ���ס���Ի�����ģ����ָ����С�ĵ�λΪƽ����Ԫ���ȵ�1/4����ƽ����Ԫ�߶ȵ�1/8��
������������ style ��λ�ǿ�ѡ�ġ������������������Ӵ���ʽʶ���֡����磬������뽨���������ο���߰������ֵĺ�ȡ���飬��ô����ʹ�ã�
CHECKBOX "text", id, xPos, yPos, xWidth, yHeight, BS_LEFTTEXT
ע�⣬��������̬EDITTEXT���Զ�����һ���߿�������뽨��һ��û�б߿�����Ӵ��à¼ï¿½ï¿½ï¿½ï¿½ï¿½î£¬ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ê¹ï¿½Ã£ï¿½
EDITTEXT id, xPos, yPos, xWidth, yHeight, NOT WS_BORDER
��Դ������Ҳ�����������������Ƶ�ר�ÿ�����������
CONTROL "text", id, "class", iStyle, xPos, yPos, xWidth, yHeight
������������ͨ��ָ���Ӵ������������Ӵ���ʽ��������������̬�����Ӵ���������磬Ҫȡ����
PUSHBUTTON "OK", IDOK, 10, 20, 32, 14
������ʹ�ã�
CONTROL "OK", IDOK, "button", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP, 10, 20, 32, 14
��������Դ������ʱ��������������.RES��.EXE�����еı�������ͬ�ġ���Developer Studio�У�������ʹ�� Controls �������е� Custom Control ѡ������������������ABOUT3��ʽ�У�������չʾ������ô�ѡ���һ��������������ij�ʽ���Ѷ����˸ÿ�������Ӵ����
�����ڶԻ�����ģ����ʹ��CONTROL����ʱ�����ذ���WS_CHILD��WS_VISIBLE��ʽ���ڽ������Ӵ�ʱ��Windows�Ѿ���������Щ�Ӵ���ʽ��CONTROL�����ĸ�ʽҲ˵��Windows�Ի�����������ڽ����Ի�����ʱ������˴�����������ȣ�������ǰ�������۵ģ�������һ������ʽ�Ӵ����丸�Ӵ�������DialogBox��ʽ���ṩ��Ȼ�ᣬ�Ի����������Ϊ�Ի�����ģ���е�ÿ���������һ�����Ӵ���������Щ������ĸ��Ӵ������������ʽ�Ի����顣���������CONTROL������ת����һ��CreateWindow���У���ʽ������ʾ��
hCtrl =CreateWindow (TEXT ("button"), TEXT ("OK"), WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON, 10 * cxChar / 4, 20 * cyChar / 8, 32 * cxChar / 4, 14 * cyChar / 8, hDlg, IDOK, hInstance, NULL) ;
���У�cxChar��cyChar��ϵͳ������Ԫ�Ŀ��Ⱥ͸߶ȣ���ͼ��Ϊ��λ��hDlg�����Ǵӽ����öԻ������Ӵ���CreateWindow���д��ص�ֵ��hInstance�����Ǵ�DialogBox���л�õġ�
�����ӵĶԻ�����
��
ABOUT1�еļ򵥶Ի�����չʾ����ƺ�ִ��һ���Ի������Ҫ�㣬��������������һ����΢���ӵ����ӡ���ʽ11-2������ABOUT2��ʽչʾ������ڶԻ���������й�������������õ�ѡ��ť���Լ�����ڶԻ��������ʾ�����л�ͼ��
��ʽ11-2 ABOUT2 ABOUT2.C /*-------------------------------------------------------------------------- ABOUT2.C -- About Box Demo Program No. 2 (c) Charles Petzold, 1998 ---------------------------------------------------------------------------*/ #include <windows.h> #include "resource.h" LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; BOOL CALLBACK AboutDlgProc (HWND, UINT, WPARAM, LPARAM) ; int iCurrentColor = IDC_BLACK, iCurrentFigure = IDC_RECT ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("About2") ; 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 ; } void PaintWindow (HWND hwnd, int iColor, int iFigure) { static COLORREF crColor[8] = { RGB ( 0, 0, 0), RGB ( 0, 0, 255), RGB ( 0, 255, 0), RGB ( 0, 255, 255), RGB (255, 0, 0), RGB (255, 0, 255), RGB (255, 255, 0), RGB (255, 255, 255)} ; HBRUSH hBrush ; HDC hdc ; RECT rect ; hdc = GetDC (hwnd) ; GetClientRect (hwnd, &rect) ; hBrush = CreateSolidBrush (crColor[iColor - IDC_BLACK]) ; hBrush = (HBRUSH) SelectObject (hdc, hBrush) ; if (iFigure == IDC_RECT) Rectangle (hdc, rect.left, rect.top, rect.right, rect.bottom) ; else Ellipse (hdc, rect.left, rect.top, rect.right, rect.bottom) ; DeleteObject (SelectObject (hdc, hBrush)) ; ReleaseDC (hwnd, hdc) ; } void PaintTheBlock (HWND hCtrl, int iColor, int iFigure) { InvalidateRect (hCtrl, NULL, TRUE) ; UpdateWindow (hCtrl) ; PaintWindow (hCtrl, iColor, iFigure) ; } LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam) { static HINSTANCE hInstance ; PAINTSTRUCT ps ; switch (message) { case WM_CREATE: hInstance = ((LPCREATESTRUCT) lParam)->hInstance ; return 0 ; case WM_COMMAND: switch (LOWORD (wParam)) { case IDM_APP_ABOUT: if (DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc)) InvalidateRect (hwnd, NULL, TRUE) ; return 0 ; } break ; case WM_PAINT: BeginPaint (hwnd, &ps) ; EndPaint (hwnd, &ps) ; PaintWindow (hwnd, iCurrentColor, iCurrentFigure) ; 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) { static HWND hCtrlBlock ; static int iColor, iFigure ; switch (message) { case WM_INITDIALOG: iColor = iCurrentColor ; iFigure = iCurrentFigure ; CheckRadioButton (hDlg, IDC_BLACK, IDC_WHITE, iColor) ; CheckRadioButton (hDlg, IDC_RECT, IDC_ELLIPSE, iFigure) ; hCtrlBlock = GetDlgItem (hDlg, IDC_PAINT) ; SetFocus (GetDlgItem (hDlg, iColor)) ; return FALSE ; case WM_COMMAND: switch (LOWORD (wParam)) { case IDOK: iCurrentColor = iColor ; iCurrentFigure = iFigure ; EndDialog (hDlg, TRUE) ; return TRUE ; case IDCANCEL: EndDialog (hDlg, FALSE) ; return TRUE ; case IDC_BLACK: case IDC_RED: case IDC_GREEN: case IDC_YELLOW: case IDC_BLUE: case IDC_MAGENTA: case IDC_CYAN: case IDC_WHITE: iColor = LOWORD (wParam) ; CheckRadioButton (hDlg, IDC_BLACK, IDC_WHITE, LOWORD (wParam)) ; PaintTheBlock (hCtrlBlock, iColor, iFigure) ; return TRUE ; case IDC_RECT: case IDC_ELLIPSE: iFigure = LOWORD (wParam) ; CheckRadioButton (hDlg, IDC_RECT, IDC_ELLIPSE, LOWORD (wParam)) ; PaintTheBlock (hCtrlBlock, iColor, iFigure) ; return TRUE ; } break ; case WM_PAINT: PaintTheBlock (hCtrlBlock, iColor, iFigure) ; break ; } return FALSE ; }
ABOUT2.RC ��ժ¼�� //Microsoft Developer Studio generated resource script. #include "resource.h" #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// // Dialog ABOUTBOX DIALOG DISCARDABLE 32, 32, 200, 234 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION FONT 8, "MS Sans Serif" BEGIN ICON "ABOUT2",IDC_STATIC,7,7,20,20 CTEXT "About2",IDC_STATIC,57,12,86,8 CTEXT "About Box Demo Program",IDC_STATIC,7,40,186,8 LTEXT "",IDC_PAINT,114,67,74,72 GROUPBOX "&Color",IDC_STATIC,7,60,84,143 RADIOBUTTON "&Black",IDC_BLACK,16,76,64,8,WS_GROUP | WS_TABSTOP RADIOBUTTON "B&lue",IDC_BLUE,16,92,64,8 RADIOBUTTON "&Green",IDC_GREEN,16,108,64,8 RADIOBUTTON "Cya&n",IDC_CYAN,16,124,64,8 RADIOBUTTON "&Red",IDC_RED,16,140,64,8 RADIOBUTTON "&Magenta",IDC_MAGENTA,16,156,64,8 RADIOBUTTON "&Yellow",IDC_YELLOW,16,172,64,8 RADIOBUTTON "&White",IDC_WHITE,16,188,64,8 GROUPBOX "&Figure",IDC_STATIC,109,156,84,46,WS_GROUP RADIOBUTTON "Rec&tangle",IDC_RECT,116,172,65,8,WS_GROUP | WS_TABSTOP RADIOBUTTON "&Ellipse",IDC_ELLIPSE,116,188,64,8 DEFPUSHBUTTON "OK",IDOK,35,212,50,14,WS_GROUP PUSHBUTTON "Cancel",IDCANCEL,113,212,50,14,WS_GROUP END ///////////////////////////////////////////////////////////////////////////// // Icon ABOUT2 ICON DISCARDABLE "About2.ico" ///////////////////////////////////////////////////////////////////////////// // Menu ABOUT2 MENU DISCARDABLE BEGIN POPUP "&Help" BEGIN MENUITEM "&About", IDM_APP_ABOUT END END
RESOURCE.H ��ժ¼�� // Microsoft Developer Studio generated include file. // Used by About2.rc #define IDC_BLACK 1000 #define IDC_BLUE 1001 #define IDC_GREEN 1002 #define IDC_CYAN 1003 #define IDC_RED 1004 #define IDC_MAGENTA 1005 #define IDC_YELLOW 1006 #define IDC_WHITE 1007 #define IDC_RECT 1008 #define IDC_ELLIPSE 1009 #define IDC_PAINT 1010 #define IDM_APP_ABOUT 40001 #define IDC_STATIC -1
ABOUT2.ICO |
��
ABOUT2�е�About�������鵥ѡ��ť��һ������ѡ����ɫ����һ������ѡ���Ǿ��λ�����Բ�Ρ���ѡ�ľ��λ�����Բ��ʾ�ڶԻ������ڣ����ڲ���Ŀǰѡ�����ɫ��ɫ��ʹ���߰��¡�OK����ť�ᣬ�Ի��������ֹ����ʽ���Ӵ�ѶϢ������ʽ�����Լ�����ʾ�����ڻ����ѡͼ�Ρ���������¡�Cancel���������Ӵ�����ʾ����ᱣ��Ô�����Ի�������ͼ11-2��ʾ������ABOUT2ʹ��Ԥ�ȶ����ʶ����IDOK��IDCANCEL��Ϊ��������������ÿ����ѡ��ť�����Լ���ʶ���֣�����������IDC��ͷ����춿������ID������Щʶ������RESOURCE.H�ж��塣
��
ͼ11-2 ABOUT2��ʽ�ĶԻ����� |
������ABOUT2�Ի������н�����ѡ��ťʱ���밴��ʾ˳���������ܱ�֤Developer Studio����˳����ʶ���ֵ�ֵ����ʽ��ʹ����Щֵ�����⣬ÿ����ѡ��ť����Ҫѡ�С�Auto��ѡ���Auto Radio Button����Ҫ�ij�ʽ����٣��������ϴ������������Щ��Ȼ��������ABOUT2.RC�еĶ������趨���ǵ�ʶ���֡�
ѡ�С�Properties���Ի���������������ġ�Group��ѡ���OK���͡�Cancel����ť����Figure�����鷽�顢ÿ�����鷽���еĵ�һ����ѡ��ť����Black���͡�Rectangle������ѡ����������ѡ��ť�ġ�Tab Stop����ȡ���顣
������ȫ���������ڶԻ������еĽ���λ�úʹ�Сʱ���Ϳ��Դӡ�Layout�����ܱ�ѡ��Tab Order��ѡ���ABOUT2.RC��Դ��������ʾ��˳�򵥻�ÿһ�������
ʹ�öԻ����������
��
�ڵھ����У����ᷢ�ִ�������Ӵ��������WM_COMMANDѶϢ���丸�Ӵ���Ψһ������Ǿ����п�������������������ɷ���ѶϢ�����Ӵ���������Ӵ����Ըı����Ӵ��������״̬�����磬ѡ���ѡ��ѡ��ť����ȡ���飩����Ҳ���������Ʒ����ڶԻ���������иı��������磬����������һϵ�е�ѡ��ť���Ϳ��Է���ѶϢ�����ǣ���ѡ����߲�ѡ����Щ��ť��������WindowsҲ�ṩ�˼���ʹ�öԻ����������ļ򵥰취����������һ���Ի�������������Ӵ��������໥ͨ�ŵķ�ʽ��
ABOUT2�ĶԻ�����ģ����ʾ�ڳ�ʽ11-2��ABOUT2.RC��Դ�������С�GROUPBOX������ֻ��һ�������⣨����Ϊ��Color�����ߡ�Figure�����ķ��鷽�飬ÿ�鵥ѡ��ť���������ķ��鷽���Χ��ǰһ��İ˸���ѡ��ť�ǻ���ģ��ڶ����������ѡ��ťҲ����ˡ�
���û��󵥻�����һ����ѡ��ťʱ�����ߵ���ѡ��ťӵ�����뽹��ʱ���հ׼��������Ӵ����丸�Ӵ�����һ��WM_COMMANDѶϢ��ѶϢ��wParam�ĵ����鱻��Ϊ�������ID��wParam�ĸ�������һ��֪ͨ�룬lParamֵ�ǿ�������Ӵ����š���춵�ѡ��ť�����֪ͨ����BN_CLICKED����0��Ȼ��Windows�еĶԻ������Ӵ�ѶϢ������ʽ�����WM_COMMANDѶϢ���͸�ABOUT2.C�ڵĶԻ�������򡣵��Ի���������յ�һ����ѡ��ť��WM_COMMANDѶϢʱ����Ϊ�˰�ť�趨ѡ�б�ǣ���Ϊ����������ť���ѡ�б�ǡ�
�����ܻ��ǵ��ڵھ������Ѿ������ѡ�кͲ�ѡ�а�ť����Ҫ�����Ӵ��������BM_CHECKѶϢ��Ҫ�趨һ����ťѡ�б�ǣ�������ʹ�ã�
SendMessage (hwndCtrl, BM_SETCHECK, 1, 0) ;
Ҫ����ѡ�б�ǣ�������ʹ�ã�
SendMessage (hwndCtrl, BM_SETCHECK, 0, 0) ;
����hwndCtrl���������Ӵ���ť��������Ӵ����š�
�����ڶԻ����������ʹ�����ַ�����ʱ�е�����ģ���Ϊ����֪�����е�ѡ��ť���Ӵ����ţ�ֻ�Ǵ�����õ�ѶϢ��֪������һ�����š����˵��ǣ�WindowsΪ���ṩ��һ����ʽ�������öԻ�������źͿ�����ID��ȡ��һ���Ի������������Ӵ����ţ�
hwndCtrl = GetDlgItem (hDlg, id) ;
����Ҳ����ʹ�����º�ʽ�����Ӵ�������ȡ�ÿ������IDֵ��
id = GetWindowLong (hwndCtrl, GWL_ID) ;
�����ڴ������������Dz���Ҫ�ġ���
����ע�⵽���ڳ�ʽ11-2��ʾ�ı�ͷ����ABOUT2.H�У�������ɫ��IDֵ�Ǵ�IDC_BLACK��IDC_WHITE�����仯�ģ����ְ����ڴ������Ե�ѡ��ť��WM_COMMANDѶϢʱ��������á��ڵ�һ�γ���ѡ�л��߲�ѡ�е�ѡ��ťʱ�������ܻ��ڶԻ���������б�д���µij�ʽ��
static int iColor ; �����г�ʽ case WM_COMMAND: switch (LOWORD (wParam)) { �����г�ʽ case IDC_BLACK: case IDC_RED: case IDC_GREEN: case IDC_YELLOW: case IDC_BLUE: case IDC_MAGENTA: case IDC_CYAN: case IDC_WHITE: iColor = LOWORD (wParam) ; for (i = IDC_BLACK, i <= IDC_WHITE, i++) SendMessage (GetDlgItem (hDlg, i), BM_SETCHECK, i == LOWORD (wParam), 0) ; return TRUE ; �����г�ʽ
���ַ��������������ִ�С������µ���ɫֵ������iColor�У����һ�������һ����Ȧ������ʹ�����а�����ɫ��IDֵ����ȡ��ÿ����ѡ��ť��������Ӵ����ţ�����SendMessage��ÿ�����ŷ���һ��BM_SETCHECKѶϢ��ֻ�ж����Ի������Ӵ�ѶϢ������ʽ����WM_COMMANDѶϢ�İ�ť�����ѶϢ��wParamֵ�ű��趨Ϊ1��
��һ�ּ򻯵ķ�����ʹ��ר�ŵĶԻ��������SendDlgItemMessage��
SendDlgItemMessage (hDlg, id, iMsg, wParam, lParam) ;
����ͬ춣�
SendMessage (GetDlgItem (hDlg, id), id, wParam, lParam) ;
���ڣ���Ȧ�����������
for (i = IDC_BLACK, i <= IDC_WHITE, i++) SendDlgItemMessage (hDlg, i, BM_SETCHECK, i == LWORD (wParam), 0) ;
��΢��Щ�Ľ��������������ش�ͻ��Ҫ�ȵ�ʹ����CheckRadioButton��ʽʱ�Ż���֣�
CheckRadioButton (hDlg, idFirst, idLast, idCheck) ;
�����ʽ��ID��idFirst��idLast֮������е�ѡ��ť��ѡ�б�Ƕ������������IDΪidCheck�ĵ�ѡ��ť����Ϊ���DZ�ѡ�еġ��������ID�����������ġ��Ӵ����ǿ�����ȫ���ѻ�Ȧ����ʹ�ã�
CheckRadioButton (hDlg, IDC_BLACK, IDC_WHITE, LOWORD (wParam)) ;
������ABOUT2�Ի�������������õķ�����
��ʹ�ú�ȡ����ʱ��Ҳ�ṩ�����Ƶļ򻯺�ʽ�������������һ����CHECKBOX���Ի������Ӵ��������ô����ʹ�����µĺ�ʽ���趨�����ѡ�б�ǣ�
CheckDlgButton (hDlg, idCheckbox, iCheck) ;
���iCheck�趨Ϊ1����ô��ť��ѡ�У�����趨Ϊ0����ô��ť����ѡ�С�������ʹ�����µķ�����ȡ�öԻ�������ij����ȡ�����״̬��
iCheck = IsDlgButtonChecked (hDlg, idCheckbox) ;
�ڶԻ���������У����ȿ��Խ�ѡ�б�ǵ�Ŀǰ״̬������һ����̬�����У��ֿ������յ�һ��WM_COMMANDѶϢ�ᣬʹ�����·���������ť��
CheckDlgButton (hDlg, idCheckbox, !IsDlgButtonChecked (hDlg, idCheckbox)) ;
�����������BS_AUTOCHECKBOX�������ô��ȫû�б�Ҫ����WM_COMMANDѶϢ������ֹ�Ի�����֮ǰ����ֻҪʹ��IsDlgButtonChecked�Ϳ���ȡ�ð�ťĿǰ��״̬�������������ʹ��BS_AUTORADIOBUTTON��ʽ����ôIsDlgButtonChecked�Ͳ������������ˣ���Ϊ��ҪΪÿ����ѡ��ť����������ֱ����ʽ����TRUE��ʵ���ϣ�����Ҫ����WM_COMMANDѶϢ��׷�ٰ��µİ�ť��
��OK���͡�Cancel����ť
��
ABOUT2�������������ֱ���Ϊ��OK���͡�Cancel������ABOUT2.RC�ĶԻ�����ģ���У���OK����ť��IDֵΪIDOK����WINUSER.H�б�����Ϊ1������Cancel����ť��IDֵΪIDCANCEL������Ϊ2������OK����ť���ڶ��ģ�
DEFPUSHBUTTON "OK",IDOK,35,212,50,14 PUSHBUTTON "Cancel",IDCANCEL,113,212,50,14
�ڶԻ������У�ͨ�����������š�OK���͡�Cancel����ť������OK����ť��Ϊ�ڶ���ť������ü��̽�����ֹ�Ի���һ������£���ͨ�������������󰴼�֮һ�����ߵ��������İ�ť�������뽹��ʱ����Spacebar����ֹ�Ի����顣���������ʹ���߰���Enter���Ի������Ӵ�ѶϢ������ʽҲ������һ��WM_COMMANDѶϢ���������ĸ�������������뽹�㡣wParam�ĵ����鱻�趨Ϊ�Ի��������ڶ�������IDֵ��������һ������ӵ�����뽹�㡣����һ������£�wParam�ĵ����鱻�趨Ϊ�������뽹��֮������IDֵ������Ի�������û���ڶ���������ôWindows��Ի����������һ��WM_COMMANDѶϢ��ѶϢ��wParam�ĵ����鱻�趨ΪIDOK�����ʹ���߰���Esc������Ctrl-Break������ôWindows��wParam���IDCANCEL�������Ի����������һ��WM_COMMANDѶϢ�����ԣ��������ڶԻ���������м��뵥���Ĵ������̲�������Ϊͨ����ֹ�Ի�����İ�������Windows����������������ת��ΪWM_COMMANDѶϢ��
AboutDlgProc��ʽͨ������EndDialog������������WM_COMMANDѶϢ��
switch (LWORD (wParam)) { case IDOK: iCurrentColor = iColor ; iCurrentFigure = iFigure ; EndDialog (hDlg, TRUE) ; return TRUE ; case IDCANCEL : EndDialog (hDlg, FALSE) ; return TRUE ;
ABOUT2���Ӵ�ѶϢ������ʽ�ڳ�ʽ����ʾ�����л��ƾ��λ���Բʱ��ʹ�����������iCurrentColor��iCurrentFigure��AboutDlgProc�ڶԻ������л�ͼʱʹ���˾�̬�������iColor��iFigure��
ע��EndDialog�ĵڶ���������ֵ��ͬ�����ֵ����WndProc����ΪÔDialogBox��ʽ�Ĵ���ֵ���صģ�
case IDM_ABOUT: if (DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc)) InvalidateRect (hwnd, NULL, TRUE) ; return 0 ;
���DialogBox����TRUE����0��������ζ�������ˡ�OK����ť��Ȼ����Ҫʹ���µ���ɫ������WndProc��ʾ���ò¡£µï¿½AboutDlgProc�յ�һ��WM_COMMANDѶϢ����ѶϢ��wParam�ĵ�������IDOKʱ��AboutDlgProc��ͼ�κ���ɫ�������������iCurrentColor��iCurrentFigure�����DialogBox����FALSE�������Ӵ�����ʹ��iCurrentColor��iCurrentFigure��Ôʼ�趨��
TRUE��FALSEͨ�����EndDialog�����У��Ը�֪���Ӵ�ѶϢ������ʽʹ�������á�OK�������á�Cancel������ֹ�Ի�����ġ�������EndDialog�IJ���ʵ������һ��intֵ����DialogBoxҲ����һ��intֵ�����ԣ������ַ����ܱȽ���TRUE����FALSE���ظ������Ѷ��
����ʹ���������
��
��ABOUT2��ʹ������������ܻᡢҲ���ܲ���Ӱ������һЩ��ʽд���ߣ��������Լ�����ϲ���������������ABOUT2�е��������iCurrentColor��iCurrentFigure����ʹ�õ���ȫ�Ϸ�����Ϊ���DZ���ͬʱ���Ӵ�ѶϢ������ʽ�ͶԻ����������ʹ�á���������һ����һ��ѶԻ�����ij�ʽ�У�ÿ���Ի����鶼���ܸı�һ�ѱ�����ֵ��ʹ������������������õù��ࡣ
�����ܸ�ϲ������ʽ�еĶԻ����������Ͻṹ����ϵ�������Ͻṹ���жԻ�������Ըı�����б�����������typedef�����ж�����Щ�ṹ�����磬��ABOUT2�У����Զ����롸About����������ϵ�Ľṹ��
typedef struct { int iColor, iFigure ; } ABOUTBOX_DATA ;
��WndProc�У����������ݴ˽ṹ�����岢��ʼ��һ����̬������
static ABOUTBOX_DATA ad = { IDC_BLACK, IDC_RECT } ;
��WndProc��Ҳ����������ad.iColor��ad.iFigure�滻�����е�iCurrentColor��iCurrentFigure�����жԻ�����ʱ��ʹ��DialogBoxParam������DialogBox���˺�ʽ�ĵ�������������������32λԪֵ��һ����˵����ֵ�趨Ϊָ��һ���ṹ��ָ�꣬��������WndProc�е�ABOUTBOX_DATA�ṹ��
case IDM_ABOUT: if (DialogBoxParam (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc, &ad)) InvalidateRect (hwnd, NULL, TRUE) ; return 0 ;
���ǹؼ���DialogBoxParam������һ����������ΪWM_INITDIALOGѶϢ�е�lParam���ݸ��Ի��������ġ�
�Ի��������������ABOUTBOX_DATA�ṹ��̬�ľ�̬������һ���ṹ��һ��ָ��ṹ��ָ�꣩��
static ABOUTBOX_DATA ad, * pad ;
��AboutDlgProc�У��˶��������iColor��iFigure�Ķ��塣��WM_INITDIALOGѶϢ�Ŀ�ʼ���֣��Ի�����������lParam�趨��������������ֵ��
pad = (ABOUTBOX_DATA *) lParam ; ad = * pad ;
��һ�������У�pad�趨ΪlParam��ָ�ꡣ�༴��padʵ����ָ����WndProc�����ABOUTBOX_DATA�ṹ���ڶ�����������˴�WndProc�еĽṹ����DlgProc�е�����ṹ����λ����λ���ݸ��ơ�
���ڣ�����ʹ���߰��¡�OK����ťʱ���õij�ʽ����֮�⣬���е�AboutDlgProc����ad.iColor��ad.iFigure�滻��iFigure��iColor����ʱ��������ṹ�����ݸ��ƻ�WndProc�еĽṹ��
case IDOK: * pad = ad ; EndDialog (hDlg, TRUE) ; return TRUE ;
Tabͣ���ͷ���
��
�ڵھ��£����������Ӵ������ΪCOLORS1���ӹ��ܣ�ʹ�����ܹ�����Tab����һ��������ת�Ƶ���һ�������С��ڶԻ������У��Ӵ�������Dz���Ҫ�ģ���ΪWindows����˽����뽹���һ���������ƶ�����һ������������й�����������ˣ��������ڶԻ�����ģ����ʹ��WS_TABSTOP��WS_GROUP�Ӵ���ʽ�ﵽ��Ŀ�ġ����������Ҫʹ��Tab����ȡ�Ŀ������Ҫ�����Ӵ���ʽ��ָ��WS_TABSTOP��
������ı�11-1�����ͻ�ע�⵽��������WS_TABSTOP����Ϊ�ڶ���ʽ������һЩ��û�н�����Ϊ�ڶ���ʽ��һ����ԣ�������WS_TABSTOP��ʽ�Ŀ�����ر��Ǿ�̬�������Ӧ��ȡ�����뽹�㣬��Ϊ��ʹ�������뽹�㣬����Ҳ������ɲ����������ڴ���WM_INITDIALOGѶϢʱ�������뽹���趨��һ���ض��Ŀ��������ѶϢ�д���FALSE������Windows�����뽹���趨Ϊ�Ի������ڵ�һ������WS_TABSTOP��ʽ�Ŀ����
Windows���Ի��������ӵĵڶ������̽�������α��ƶ��������ֽ����춵�ѡ��ť���������Ҫ�ԡ������ʹ��Tab���ƶ���ijһ����Ŀǰѡ�еĵ�ѡ��ť����ô������Ҫʹ���α��ƶ����������뽹��Ӹõ�ѡ��ť�ƶ�������������ѡ��ť�ϡ�ʹ��WS_GROUP�Ӵ���ʽ���ɻ��������ܡ���춶Ի�����ģ���е��ض����������У�Windows��ʹ���α��ƶ��������뽹��ӵ�һ������WS_GROUP��ʽ�Ŀ���Ȩ�л�����һ������WS_GROUP��ʽ�Ŀ������С�����б�Ҫ��Windows���ӶԻ����������һ���������Ȧ����һ��������Ա��ҵ�����Ľ�β��
���ڶ��趨�£�������LTEXT��CTEXT��RTEXT��ICON������WS_GROUP��ʽ��������ʽ����ر���˷���Ľ�β�������ë¾ï¿½ï¿½ï¿½ï¿½WS_GROUP��ʽ�ӵ�������̬�Ŀ������С�
����������һ��ABOUT2.RC�еĶԻ�����ģ�塣�ĸ�����WS_TABSTOP��ʽ�Ŀ�������ÿ����ĵ�һ����ѡ��ť�����Եذ������������������ڶ��趨�����ڵ�һ�������Ի�����ʱ��������ʹ��Tab�������ĸ�������֮���ƶ���
��ÿ�鵥ѡ��ť�У�������ʹ���α��ƶ����л����뽹�㲢�ı�ѡ�б�ǡ����磬 Color ����ʽ�嵥����ĵ�һ����ѡ��ť�� Black ���� Figure ����ʽ�嵥���鶼����WS_GROUP��ʽ������ζ�����������α��ƶ���������ӡ�Black����ѡ��ť�ƶ��� Figure ���鷽���С����Ƶ����Σ� Figure ���鷽��ĵ�һ����ѡ��ť�� Rectangle ����DEFPUSHBUTTON������WS_GROUP��ʽ������������ʹ���α��ƶ���������������ѡ��ť�� Rectangle �� Ellipse ֮���ƶ���������������WS_GROUP��ʽ������ֹ�α��ƶ����ڰ����������뽹��ʱ�����á�
ʹ��ABOUT2ʱ��Windows�ĶԻ���������������鵥ѡ��ť�����һЩ�൱���ӵĴ�����������Ԥ�ڵ���������춵�ѡ��ť����ʱ���α��ƶ����л����뽹�㣬�����Ի����������WM_COMMANDѶϢ�����ǣ������ı�������ѡ�еĵ�ѡ��ťʱ��WindowsҲ����ѡ�еĵ�ѡ��ť�趨��WS_TABSTOP��ʽ��������һ��ʹ��Tab�л�����һ���ᣬWindows��������뽹���趨Ϊѡ�еĵ�ѡ��ť��
������λ�еġ����������½����������ĸ�Ե�����ʾ�������������һ�ּ��̽��棬������ͨ����������ĸ�������뽹���ƶ������ⵥѡ��ť�ϡ�͸������C������ Color ����ʽ�嵥���飩����F������ Figure ����ʽ�嵥���飩�������Խ����뽹���ƶ������Ӧ����Ŀǰѡ�еĵ�ѡ��ť�ϡ�
���ܳ�ʽд����ͨ���öԻ�����������������Щ����������Windows�ṩ��������ʽ���Ա��ʽд������Ѱ��һ������ǰһ��Tab��ͣ������������Щ��ʽΪ��
hwndCtrl = GetNextDlgTabItem (hDlg, hwndCtrl, bPrevious) ;
��
hwndCtrl = GetNextDlgGroupItem (hDlg, hwndCtrl, bPrevious) ;
���bPreviousΪTRUE����ô��ʽ����ǰһ��Tab��ͣ�����������ΪFALSE���򴫻���һ��Tab��ͣ����������
�ڶԻ������ϻ�ͼ
��
ABOUT2�������һЩ���˵�����ر�����飬�༴�ڶԻ������ϻ�ͼ������������һ�������������ġ���ABOUT2.RC�ĶԻ�����ģ���ڣ�ʹ��λ�úʹ�СΪ������Ҫ��ͼ����������һ��հ����ֿ����
LTEXT "" IDC_PAINT, 114, 67, 72, 72
�������Ϊ18����Ԫ����9����Ԫ�ߡ�������������û�����֣������Ӵ�ѶϢ������ʽΪ����̬����������Ĺ�����ֻ���ڱ����ػ�������Ӵ�������ʱ����䱳����
��Ŀǰ��ɫ��ͼ��ѡ�����ı䣬���߶Ի������������һ��WM_PAINTѶϢʱ���Ի�����������PaintTheBlock�������ʽ��ABOUT2.C�У�
PaintTheBlock (hCtrlBlock, iColor, iFigure) ;
��AboutDlgProc�У��Ӵ�����hCtrlBlock�Ѿ��ڴ���WM_INITDIALOGѶϢʱ���趨��
hCtrlBlock = GetDlgItem (hDlg, IDD_PAINT) ;
������PaintTheBlock��ʽ��
void PaintTheBlock (HWND hCtrl, int iColor, int iFigure) { InvalidateRect (hCtrl, NULL, TRUE) ; UpdateWindow (hCtrl) ; PaintWindow (hCtrl, iColor, iFigure) ; }
�����ʽʹ�����Ӵ���������Ч����Ϊ�������Ӵ�ѶϢ������ʽ����һ��WM_PAINTѶϢ��Ȼ�����ABOUT2�е���һ����ʽPaintWindow ��
PaintWindow��ʽȡ��һ��װ�����ݴ��ţ�������ŵ�hCtrl�У�������ѡͼ�Σ�������ѡ��ɫ��һ����ɫ��ˢ����ͼ�Ρ����Ӵ�������Ĵ�С��GetClientRect��á����ܶԻ�����ģ������ԪΪ��λ�����˿�����Ĵ�С����GetClientRectȡ����ͼ��Ϊ��λ�ijߴ硣��Ҳ����ʹ�ú�ʽMapDialogRect���Ի������е���Ԫ����ת��Ϊ��ʾ�����е�ͼ�����ꡣ
���Dz�����Ļ����˶Ի��������ʾ����ʵ�ʻ��Ƶ������Ӵ����������ʾ����ÿ���Ի�����õ�һ��WM_PAINTѶϢʱ���������Ӵ����������ʾ����ʧЧ������������ʹ��ȷ����������ʾ��������Ч�ˣ�Ȼ�������ϻ�ͼ��
��������ʽ��춶Ի�����
��
����������������Ӵ��ĺ�ʽҲ������춶Ի������еĿ�������磬������뵷�ҵĻ�����ô����ʹ��MoveWindow�ڶԻ��������ƶ������ǿ��ʹ�����û�����׷�����ǡ�
��ʱ������Ҫ����������������趨����̬�����û��߽���ijЩ���������Ҫ���У�
EnableWindow (hwndCtrl, bEnable) ;
��bEnableΪTRUE����0��ʱ�������ÿ������bEnableΪFALSE��0��ʱ�������ÿ�����ڿ��������ʱ�������ٽ��ռ��̻��߻������롣�����ܽ���һ��ӵ�����뽹��Ŀ����
�����Լ��Ŀ�����
��
����Windows����������ά���Ի���������Ӵ�������Ĺ�������ͬʱҲΪ���ṩ�˸��ּ����ʽ��ķ�����ǰ�������Ѿ��������ڶԻ������ϻ�ͼ�ķ�������Ҳ����ʹ�õھ��������۵��Ӵ���������ı����Ӵ�������IJ�����
�������Զ����Լ������Ӵ���������������õ��Ի������С����磬�ٶ����ر�ϲ����ͨ�ľ��ΰ�����������춽�����Բ�ΰ�������ô������ͨ��ע��һ���Ӵ���𣬲�ʹ���Լ���д���Ӵ�ѶϢ������ʽ�����������������Ӵ���ѶϢ���Ӷ�������Բ�ΰ�������Developer Studio�У������������Զ�����������ϵ�ġ�Properties���Ի�������ָ������Ӵ�����⽫ת���ɶԻ�����ģ���е�CONTROL��������ʽ11-3��ʾ��ABOUT3��ʽ�����������ġ�
��ʽ11-3 ABOUT3 ABOUT3.C /*----------------------------------------------------------------------------- ABOUT3.C -- About Box Demo Program No. 3 (c) Charles Petzold, 1998 ----------------------------------------------------------------------------*/ #include <windows.h> #include "resource.h" LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; BOOL CALLBACK AboutDlgProc (HWND, UINT, WPARAM, LPARAM) ; LRESULT CALLBACK EllipPushWndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("About3") ; 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 ; } wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = EllipPushWndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = NULL ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = TEXT ("EllipPush") ; RegisterClass (&wndclass) ; 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) ; return 0 ; } break ; 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 : EndDialog (hDlg, 0) ; return TRUE ; } break ; } return FALSE ; } LRESULT CALLBACK EllipPushWndProc ( HWND hwnd, UINT message,WPARAM wParam, LPARAM lParam) { TCHAR szText[40] ; HBRUSH hBrush ; HDC hdc ; PAINTSTRUCT ps ; RECT rect ; switch (message) { case WM_PAINT : GetClientRect (hwnd, &rect) ; GetWindowText (hwnd, szText, sizeof (szText)) ; hdc = BeginPaint (hwnd, &ps) ; hBrush = CreateSolidBrush (GetSysColor (COLOR_WINDOW)) ; hBrush = (HBRUSH) SelectObject (hdc, hBrush) ; SetBkColor (hdc, GetSysColor (COLOR_WINDOW)) ; SetTextColor (hdc, GetSysColor (COLOR_WINDOWTEXT)) ; Ellipse (hdc, rect.left, rect.top, rect.right, rect.bottom) ; DrawText (hdc, szText, -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; DeleteObject (SelectObject (hdc, hBrush)) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_KEYUP : if (wParam != VK_SPACE) break ;// fall through case WM_LBUTTONUP : SendMessage (GetParent (hwnd), WM_COMMAND, GetWindowLong (hwnd, GWL_ID), (LPARAM) hwnd) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
ABOUT3.RC ��ժ¼�� //Microsoft Developer Studio generated resource script. #include "resource.h" #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// // Dialog ABOUTBOX DIALOG DISCARDABLE 32, 32, 180, 100 STYLE DS_MODALFRAME | WS_POPUP FONT 8, "MS Sans Serif" BEGIN CONTROL "OK",IDOK,"EllipPush",WS_GROUP | WS_TABSTOP,73,79,32,14 ICON "ABOUT3",IDC_STATIC,7,7,20,20 CTEXT "About3",IDC_STATIC,40,12,100,8 CTEXT "About Box Demo Program",IDC_STATIC,7,40,166,8 CTEXT "(c) Charles Petzold, 1998",IDC_STATIC,7,52,166,8 END ///////////////////////////////////////////////////////////////////////////// // Menu ABOUT3 MENU DISCARDABLE BEGIN POPUP "&Help" BEGIN MENUITEM "&About About3...", IDM_APP_ABOUT END END ///////////////////////////////////////////////////////////////////////////// // Icon ABOUT3 ICON DISCARDABLE "icon1.ico"
RESOURCE.H ��ժ¼�� // Microsoft Developer Studio generated include file. // Used by About3.rc #define IDM_APP_ABOUT 40001 #define IDC_STATIC -1
ABOUT3.ICO |
��
������ע����Ӵ���������EllipPush������Բ�ΰ���������Developer Studio�ĶԻ�����à¼ï¿½ï¿½ï¿½Ð£ï¿½É¾ï¿½ï¿½ï¿½ï¿½Cancel���͡�OK����ť��Ҫ�������ݴ��Ӵ����Ŀ������ӡ� Controls ��������ѡ�� Custom Control �����ڴ˿�����ġ� Properties ���Ի�����ġ� Class ����λ���롸 EllipPush �����ڶԻ�����ģ��������û��ʹ��DEFPUSHBUTTON������������CONTROL������ָ�����Ӵ����
CONTROL "OK" IDOK, "EllipPush", TABGRP, 64, 60, 32, 14
���ڶԻ������н������Ӵ�������ʱ���Ի����������������Ӵ�������CreateWindow�����С�
ABOUT3.C��ʽ��WinMain��ע����EllipPush�Ӵ����
wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = EllipPushWndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = NULL ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = TEXT ("EllipPush") ; RegisterClass (&wndclass) ;
���Ӵ����ָ���Ӵ�ѶϢ������ʽΪEllipPushWndProc����ABOUT3.C������������
EllipPushWndProc�Ӵ�ѶϢ������ʽֻ��������ѶϢ��WM_PAINT��WM_KEYUP��WM_LBUTTONUP���ڴ���WM_PAINTѶϢʱ������GetClientRect��ȡ���Ӵ��Ĵ�С����GetWindowText��ȡ����ʾ�ڰ����ϵ����֣���Windows��ʽEllipse��DrawText�������Բ�����֡�
WM_KEYUP��WM_LBUTTONUPѶϢ�Ĵ����dz��򵥣�
case WM_KEYUP : if (wParam != VK_SPACE) break ; // fall through case WM_LBUTTONUP : SendMessage (GetParent (hwnd), WM_COMMAND, GetWindowLong (hwnd, GWL_ID), (LPARAM) hwnd) ; return 0 ;
�Ӵ�ѶϢ������ʽʹ��GetParent��ȡ���丸�Ӵ������Ի����飩�Ĵ��ţ�������һ��WM_COMMANDѶϢ��ѶϢ��wParam��춿������ID�����ID����GetWindowLongȡ�õġ�Ȼ�ᣬ�Ի������Ӵ�ѶϢ������ʽ�����ѶϢ����ABOUT3�ڵĶԻ�������򣬽���õ�һ��ʹ�����Զ��İ�������ͼ11-3��ʾ����������ͬ���ķ��������������Զ��Ի���������
��
ͼ11-3 ABOUT3�������Զ����� |
�����ȫ��Ҫ��������ʵ��Ȼ��ͨ�������ά�����Ӵ�����������Ҫ�Ĵ������ԣ�EllipPushWndProcֻ��һ���ռ��ӡ����磬��ť��������ͨ�İ���������˸��Ҫ��ת�����ڵ���ɫ���Ӵ�ѶϢ������ʽ���봦��WM_KEYDOWN�����Կհ׼�����WM_LBUTTONDOWNѶϢ���Ӵ�ѶϢ������ʽ���������յ�WM_LBUTTONDOWNѶϢʱ���ػ��󣬲��ң��������ť����춰���״̬���������Ƶ������Ӵ�����ʾ����֮�⣬��ô��Ҫ�ͷŻ������أ�������ť���ڲ���ɫ�ظ�Ϊ����״̬����ֻ���ڻ�������ʱ�ɿ��ð�ť�����Ӵ��Ż���丸�Ӵ��ͻ�һ��WM_COMMANDѶϢ��
EllipPushWndProcҲ������WM_ENABLEѶϢ�������������Ի�����������ʹ��EnableWindow��ʽ������ij�Ӵ�����ǣ����Ӵ�����ʾ��ɫ���֣��������Ǻ�ɫ���֣��Ա�ʾ���Ѿ������ã����Ҳ����ٽ����κ�ѶϢ�ˡ�
������Ӵ���������Ӵ�ѶϢ������ʽ��ҪΪ��������ÿ���Ӵ���Ÿ��Բ�ͬ�����ϣ���ô������ͨ��ʹ���Ӵ����ṹ�е�cbWndExtraֵ�����������������ڲ��Ӵ��ṹ�б����˿ռ䣬��������SetWindowLong��GetWindowLong����ȡ�����ϡ�
��ģ̬�Ի�����
��
�ڱ��µĿ�ʼ��������˵���Ի������Ϊ��ģ̬�ġ��͡���ģ̬�ġ����֡����������Ѿ��о��������ֶԻ������������һ�֣�ģ̬�Ի����顣ģ̬�Ի����飨������ϵͳģ̬�Ի����飩������ʹ�����ڶԻ�������������ʽ֮������л������ǣ�ʹ���߲����л���ͬһ��ʽ����һ���Ӵ���ֱ��ģ̬�Ի����鱻���Ϊֹ����ģ̬�Ի���������ʹ�����ڶԻ�������������ʽ֮������л����ֿ����ڶԻ������뽨���Ի�������Ӵ�֮������л�����ˣ���ģ̬�Ի�������ʹ���߳�ʽ��������ͨ����ʽ�Ӵ����ܸ�Ϊ���ơ�
��ʹ���߾����öԻ����鱣��Ƭ�̻���ӷ���ʱ��ʹ�÷�ģ̬�Ի������Ǻ��ʵġ����磬���鴦����ʽ����ʹ�÷�ģ̬�Ի����������С�Find���͡�Change�������������Find���Ի�������ģ̬�ģ���ôʹ���߱���ӹ��ܱ���ѡ��Find����Ȼ������ҪѰ�ҵ��ִ��������Ի����飬���ص������У��������ظ�����������Ѱ��ͬһ�ִ�����һ�γ��֡�����ʹ�����ڵ�����Ի�����֮������л���᷽��öࡣ
���Ѿ�������ģ̬�Ի���������DialogBox�������ġ�ֻ��������Ի�����֮�ᣬ��ʽ�Żᴫ��ֵ���ڶԻ����������ʹ��EndDialog��������ֹ�Ի����飬DialogBox���ص��Ǹú��еĵڶ���������ֵ����ģ̬�Ի�������ʹ��CreateDialog�������ģ��ú�ʽ��ʹ�õIJ�����DialogBox��ͬ��
hDlgModeless = CreateDialog ( hInstance, szTemplate, hwndParent, DialogProc) ;
������CreateDialog��ʽ�������ضԻ�������Ӵ����ţ���ͨ��������Ӵ����Ŵ�ŵ���������С�
���ܽ�DialogBox��һ�������ģ̬�Ի������CreateDialog��춷�ģ̬�Ի�����������ģ�����������ͨ����ģ̬�Ի���������ͨ�Ӵ�������һ������ס��������ʽ������CreateDialog������������CreateWindow��ʽ���������߽���������ͨ�Ӵ���
ģ̬�Ի��������ģ̬�Ի����������
��
ʹ�÷�ģ̬�Ի�������ʹ��ģ̬�Ի��������ƣ�����Ҳ��һЩ��Ҫ������
���ȣ���ģ̬�Ի�����ͨ������һ�������к�һ��ϵͳ���ܱ���ť��������Developer Studio�н����Ի�����ʱ����Щ���ڶ�ѡ���춷�ģ̬�Ի�����ĶԻ�����ģ���е�STYLE�������磺
STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
�����к�ϵͳ���ܱ�����ʹ���ߣ�ʹ�û�����߼��̽���ģ̬�Ի������ƶ�����һ����ʾ���򡣶��ģ̬�Ի����飬��ͨ�������ṩ�����к�ϵͳ���ܱ�����Ϊʹ���߲�������������Ӵ������κ����������顣
�ڶ�����Ҫ�������ǣ�ע�⣬�����ǵķ���STYLE�����а�����WS_VISIBLE��ʽ���� Developer Studio �У��ӡ� Dialog Properties ���Ի�����ġ� More Styles ��ҳ���ǩ��ѡ���ѡ����ʡ����WS_VISIBLE����ô��������CreateDialog����֮�����ShowWindow��
hDlgModeless = CreateDialog ( . . . ) ; ShowWindow (hDlgModeless, SW_SHOW) ;
�������û�а���WS_VISIBLE��ʽ����û�к���ShowWindow����ô��ģ̬�Ի����齫���ᱻ��ʾ��������������ʵ����ôϰ���ģ̬�Ի�����ij�ʽд�����ڵ�һ����ͼ������ģ̬�Ի�����ʱ��������������⡣
������������ģ̬�Ի������ѶϢ�����ѶϢ��ͬ����ģ̬�Ի������ѶϢҪ��������ʽ��ѶϢ���С�Ҫ����ЩѶϢ���͸��Ի������Ӵ�ѶϢ������ʽ�������ı�ѶϢ���С��������£�����ʹ��CreateDialog������ģ̬�Ի�����ʱ��Ӧ�ý��Ӻ����д��صĶԻ�������Ŵ�����һ�������������hDlgModeless���У�����ѶϢ��Ȧ�ı�Ϊ��
while (GetMessage (&msg, NULL, 0, 0)) { if (hDlgModeless == 0 || !IsDialogMessage (hDlgModeless, &msg)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } }
���ѶϢ�Ƿ��͸���ģ̬�Ի�����ģ���ôIsDialogMessage�������͸��Ի��������Ӵ�ѶϢ������ʽ��������TRUE����0����������������FALSE��0����ֻ��hDlgModelessΪ0����ѶϢ���ǸöԻ������ѶϢʱ���ű������TranslateMessage��DispatchMessage��ʽ������������̼��ټ�������ij�ʽ�Ӵ�����ôѶϢ��Ȧ��������ʾ��
while (GetMessage (&msg, NULL, 0, 0)) { if (hDlgModeless == 0 || !IsDialogMessage (hDlgModeless, &msg)) { if (!TranslateAccelerator (hwnd, hAccel, &msg)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } } }
��������������ʼ��Ϊ0������hDlgModeless��Ϊ0��ֱ�������Ի�����Ϊֹ���Ӷ���֤����ʹ����Ч���Ӵ�����������IsDialogMessage���������ģ̬�Ի�����ʱ����Ҳ����ע����һ�㣬��������һ����˵���ġ�
hDlgModeless����Ҳ�����ɳ�ʽ����������ʹ�ã��Ա�Է�ģ̬�Ի������Ƿ���ڼ�����֤�����磬��ʽ�е������Ӵ�������hDlgModeless�����0ʱ���Ի����鷢��ѶϢ��
����һ����Ҫ������ʹ��DestroyWindow������EndDialog��������ģ̬�Ի����顣��������DestroyWindow�ᣬ��hDlgModeless��������趨Ϊ0��
ʹ����ϰ��춴�ϵͳ���ܱ���ѡ��Close����������ģ̬�Ի����顣���������ˡ�Close��ѡ�Windows�ڵĶԻ������Ӵ�ѶϢ������ʽ��������WM_CLOSEѶϢ���������Լ��ڶԻ���������д�������
case WM_CLOSE : DestroyWindow (hDlg) ; hDlgModeless = NULL ; break ;
ע���������Ӵ�����֮�������DestroyWindow��hDlg�����Ǵ��ݸ��Ի��������IJ�����hDlgModeless�Ǵ�CreateDialog���ص������������ʽ��ѶϢ��Ȧ�ڼ�������
��Ҳ��������ʹ����ʹ�ð������رշ�ģ̬�Ի����飬������ʽ�봦��WM_CLOSEѶϢһ�����Ի�������봫�ظ����������Ӵ�֮�κ����϶����Դ�������������С������ϲ��ʹ�������������ô��Ҳ������CreateDialogParam��������ģ̬�Ի����飬����ǰ����ܵķ�����������һ���ṹָ�ꡣ
�µ�COLORS��ʽ
��
�ھ�������������COLORS1��ʽ�����˾Ÿ����Ӵ����Ա���ʾ���������к������������ʱ�������ʽ����������д���ij�ʽ���൱���ӵ�һ���������COLORS1ת��Ϊʹ�÷�ģ̬�Ի��������ʹ��ʽ���ر���WndProc��ʽ����������������ŵļ򵥣��������COLORS2��ʽ���ʽ11-4��ʾ��
��ʽ11-4 COLORS2 COLORS2.C /*---------------------------------------------------------------------------- COLORS2.C -- Version using Modeless Dialog Box (c) Charles Petzold, 1998 ----------------------------------------------------------------------------*/ #include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; BOOL CALLBACK ColorScrDlg (HWND, UINT, WPARAM, LPARAM) ; HWND hDlgModeless ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("Colors2") ; 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 (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = CreateSolidBrush (0L) ; 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 ("Color Scroll"), WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; hDlgModeless = CreateDialog ( hInstance, TEXT ("ColorScrDlg"), hwnd, ColorScrDlg) ; while (GetMessage (&msg, NULL, 0, 0)) { if (hDlgModeless == 0 || !IsDialogMessage (hDlgModeless, &msg)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } } return msg.wParam ; } LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam) { switch (message) { case WM_DESTROY : DeleteObject ((HGDIOBJ) SetClassLong (hwnd, GCL_HBRBACKGROUND, (LONG) GetStockObject (WHITE_BRUSH))) ; PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; } BOOL CALLBACK ColorScrDlg ( HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam) { static int iColor[3] ; HWND hwndParent, hCtrl ; int iCtrlID, iIndex ; switch (message) { case WM_INITDIALOG : for (iCtrlID = 10 ; iCtrlID < 13 ; iCtrlID++) { hCtrl = GetDlgItem (hDlg, iCtrlID) ; SetScrollRange (hCtrl, SB_CTL, 0, 255, FALSE) ; SetScrollPos (hCtrl, SB_CTL, 0, FALSE) ; } return TRUE ; case WM_VSCROLL : hCtrl = (HWND) lParam ; iCtrlID = GetWindowLong (hCtrl, GWL_ID) ; iIndex = iCtrlID - 10 ; hwndParent = GetParent (hDlg) ; switch (LOWORD (wParam)) { case SB_PAGEDOWN : iColor[iIndex] += 15 ; // fall through case SB_LINEDOWN : iColor[iIndex] = min (255, iColor[iIndex] + 1) ; break ; case SB_PAGEUP : iColor[iIndex] -= 15 ; // fall through case SB_LINEUP : iColor[iIndex] = max (0, iColor[iIndex] - 1) ; break ; case SB_TOP : iColor[iIndex] = 0 ; break ; case SB_BOTTOM : iColor[iIndex] = 255 ; break ; case SB_THUMBPOSITION : case SB_THUMBTRACK : iColor[iIndex] = HIWORD (wParam) ; break ; default : return FALSE ; } SetScrollPos (hCtrl, SB_CTL, iColor[iIndex], TRUE) ; SetDlgItemInt (hDlg, iCtrlID + 3, iColor[iIndex], FALSE) ; DeleteObject ((HGDIOBJ) SetClassLong (hwndParent, GCL_HBRBACKGROUND, (LONG) CreateSolidBrush ( RGB (iColor[0], iColor[1], iColor[2])))) ; InvalidateRect (hwndParent, NULL, TRUE) ; return TRUE ; } return FALSE ; }
COLORS2.RC ��ժ¼�� //Microsoft Developer Studio generated resource script. #include "resource.h" #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// // Dialog COLORSCRDLG DIALOG DISCARDABLE 16, 16, 120, 141 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Color Scroll Scrollbars" FONT 8, "MS Sans Serif" BEGIN CTEXT "&Red",IDC_STATIC,8,8,24,8,NOT WS_GROUP SCROLLBAR 10,8,20,24,100,SBS_VERT | WS_TABSTOP CTEXT "0",13,8,124,24,8,NOT WS_GROUP CTEXT "&Green",IDC_STATIC,48,8,24,8,NOT WS_GROUP SCROLLBAR 11,48,20,24,100,SBS_VERT | WS_TABSTOP CTEXT "0",14,48,124,24,8,NOT WS_GROUP CTEXT "&Blue",IDC_STATIC,89,8,24,8,NOT WS_GROUP SCROLLBAR 12,89,20,24,100,SBS_VERT | WS_TABSTOP CTEXT "0",15,89,124,24,8,NOT WS_GROUP END
RESOURCE.H ��ժ¼�� // Microsoft Developer Studio generated include file. // Used by Colors2.rc #define IDC_STATIC -1
Ô����COLORS1��ʽ����ʾ�ľ����д�С�������Ӵ���С�����ģ����³�ʽ�ڷ�ģ̬�Ի��������Թ̶��ijߴ�����ʾ���ǣ���ͼ11-4��ʾ��
���������Ի�����ģ��ʱ��ֱ�ӽ����������е�ID�ֱ���Ϊ10��11��12������ʾ������Ŀǰֵ��������̬������λ��ID�ֱ���Ϊ13��14��15����ÿ�������ж��趨ΪTab Stop��ʽ���������е�������̬������λ��ɾ��Group��ʽ��
��
ͼ11-4 COLORS2��өĻ��ʾ |
��COLORS2�У���ģ̬�Ի���������WinMain��ʽ�ィ���ģ������ڳ�ʽ���Ӵ���ShowWindow����֮�ᡣע�⣬���Ӵ����Ӵ���ʽ����WS_CLIPCHILDREN����������ʽ��������Ի�������ܹ��ػ����Ӵ���
������������CreateDialog���صĶԻ������Ӵ����Ŵ�����������hDlgModeless�У�����ѶϢ��Ȧ�б����ԡ��������������ʽ�У�����Ҫ�����Ŵ������������У�Ҳ����Ҫ�ں���IsDialogMessage֮ǰ�������ֵ��ѶϢ��Ȧ���Ա�д���£�
while (GetMessage (&msg, NULL, 0, 0)) { if (!IsDialogMessage (hDlgModeless, &msg)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } }
��춶Ի��������ڳ�ʽ����ѶϢ��Ȧǰ����������ֱ����ʽ����ʱ�Żᱻ���������hDlgModeless��ֵ��������Ч�ġ��Ҽ��������µĴ�����ʽ���Ա������ܻ����Ի�������Ӵ�ѶϢ������ʽ�м���һ������Ի�����ij�ʽ�룺
case WM_CLOSE : DestroyWindow (hDlg) ; hDlgModeless = NULL ; break ;
��Ô����COLORS1��ʽ�У�SetWindowText��ʹ��wsprintf��������ֵ��ǩת��Ϊ����֮����趨���ǵ�ֵ������Ϊ��
wsprintf (szBuffer, TEXT ("%i"), color[i]) ; SetWindowText (hwndValue[i], szBuffer) ;
i��ֵΪĿǰ�����ľ����е�ID��hwndValue��һ�����У���������ɫ��ֵ��������̬�������Ӵ����Ӵ����š�
�°汾ʹ��SetDlgItemIntΪÿ�����Ӵ���ÿ��������λ�趨һ�����룺
SetDlgItemInt (hDlg, iCtrlID + 3, color [iCtrlID], FALSE) ;
����SetDlgItemInt�������Ӧ��GetDlgItemInt�ڱà¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ãµï¿½ï¿½ï¿½à£¬ï¿½ï¿½ï¿½ï¿½Ò²ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½è¶¨ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Î»ï¿½ï¿½ï¿½ç¾²Ì¬ï¿½ï¿½ï¿½Ö¿ï¿½ï¿½ï¿½ï¿½ï¿½È¡ï¿½iCtrlID�����Ǿ����е�ID����ID����3ʹ֮��ɶ�Ӧ���ֱ�ǩ��ID����������������ɫֵ��ͨ�������ĸ�������ʾ������������ֵ�ǽ���Ϊ�������ŵģ����ĸ�����ΪTRUE�������������ŵģ����ĸ�����ΪFALSE�������ǣ���������ʽ��ֵ�ķ�Χ�Ǵ�0��256�������������û�����塣
�ڽ�COLORS1ת��ΪCOLORS2�ij����У����ǰ�Խ��Խ��Ĺ���������Windows���ɰ汾������CreateWindow 10�Σ����°汾ֻ������CreateWindow��CreateDialog��һ�Ρ����ǣ��������Ϊ�����Ѿ��Ѻ���CreateWindow�Ĵ����������٣���ô���ʹ��ˣ��뿴��һ����ʽ��
HEXCALC���Ӵ����ǶԻ����飿
��
HEXCALC��ʽ������д��ʽ͵���ľ���֮�������ʽ11-5��ʾ�������ʽ��ȫ������CreateWindow��Ҳ������WM_PAINTѶϢ����ȡ��װ�����ݣ�Ҳ����������ѶϢ��������ֻ���˲���150�е�Ôʼ�룬�͹�����һ�������������̺ͻ�������Լ�10�������ʮ����λ��������������ͼ11-5��ʾ��
��ʽ11-5 HEXCALC 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 ; } 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 ��ժ¼�� //Microsoft Developer Studio generated resource script. #include "resource.h" #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// // Icon HEXCALC ICON DISCARDABLE "HexCalc.ico" ///////////////////////////////////////////////////////////////////////////// #include "hexcalc.dlg"
HEXCALC.DLG /*-------------------------------- HEXCALC.DLG dialog script ----------------------------------*/ HexCalc DIALOG -1, -1, 102, 122 STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX CLASS "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 }
HEXCALC.ICO |
��
|
��
|
��
ͼ11-5 HEXCALC��өĻ��ʾ |
HEXCALC��һ����ͨ����������ʽ�������ʹ��C���Եķ��ű�ʾ��ʽ���м��㡣������������32λԪ�������ӡ������ˡ�����ȡ�������㣬λԪAND, OR, exclusive-OR���㣬��������λ�����㡣��0�������½�����趨ΪFFFFFFFF��
��HEXCALC�мȿ���ʹ�û����ֿ���ʹ�ü��̡����Ӱ������롹���������һ���������8λԪʮ����λ��λ����ʼ��Ȼ�����������ӣ�Ȼ���ǵڶ�������������������͸��������Equals����ť���߰��µȺż���Enter���������ʾ��������Ϊ�˸������룬������ʹ�á�Back����ť��Backspace�������ͷ����������display��������߰���Esc���������Ŀǰ�����롣
HEXCALC�Ƚ���ֵ�һ���ǣ�өĻ����ʾ���Ӵ��ƺ�����ͨ���ص�ʽ�Ӵ����ģ̬�Ի�����Ļ���塣һ���棬HEXCALC������ѶϢ���ں�ʽ��WndProc�д����������ʽ��ͨ�����Ӵ�ѶϢ������ʽ���ƣ��ú�ʽ����һ����������������WM_DESTROYѶϢ������DefWindowProc��������ͨ���Ӵ�ѶϢ������ʽһ������һ���棬�Ӵ�����WinMain�к���CreateDialog��ʹ��HEXCALC.DLG�еĶԻ�����ģ�彨���ġ���ô��HEXCALC������һ����ͨ�Ŀ��ص��Ӵ�������һ����ģ̬�Ի������أ�
�򵥵Ļش��ǣ��Ի���������Ӵ���ͨ����Windowsʹ�����Լ��ڲ����Ӵ�ѶϢ������ʽ�����Ի������Ӵ���ѶϢ��Ȼ�ᣬWindows����ЩѶϢ���͸������Ի�����ij�ʽ�ڵĶԻ����������HEXCALC�У�������Windowsʹ�öԻ�����ģ�彨��һ���Ӵ��������Լ�д��ʽ��������Ӵ���ѶϢ��
���ҵ��ǣ���Developer Studio��Dialog Editor�У��Ի�����ģ����ҪһЩ���Dz������ӵĶ�������ˣ��Ի�����ģ�������HEXCALC.DLG�����У�������Ҫ�ֹ����롣��������ķ����������Խ�һ�����ֵ������ӵ��κ�ר���У��ӡ� File �����ܱ�ѡ�� New ������ѡ�� Files ��ҳ���ǩ��Ȼ��ӵ�����̬�б���ѡ�� Text File �����������ĵ���������������Դ���å£ï¿½ï¿½Òªï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ô´ï¿½ï¿½ï¿½ï¿½ï¿½Ð¡ï¿½ï¿½Ó¡ï¿½ View �����ܱ�ѡ�� Resource Includes ��������ʾһ���Ի����顣�ڡ�Compile-time Directives���à¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
#include "hexcalc.dlg"
��һ�н����뵽HEXCALC.RC��Դ�����У�����������ʾ��һ����
��ϸ��һ��HEXCALC.DLG�����еĶԻ�����ģ�壬��������HEXCALC���Ϊ�Ի�����ʹ�����Լ����Ӵ�ѶϢ������ʽ���Ի�����ģ����Ϸ����£�
HexCalc DIALOG -1, -1, 102, 122 STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX CLASS "HexCalc" CAPTION "Hex Calculator"
ע������WS_OVERLAPPED��WS_MINIMIZEBOX��ʶ���֣����ǿ��Խ���������CreateWindow�������Խ�����ͨ���Ӵ���CLASS����������Ի������������������ĶԻ�����֮������Ҫ�����𣨶�����Ҳ��Developer Studio�е�Dialog Editor����������ָ���ģ������Ի�����ģ��ʡ�����������ʱ��WindowsΪ�Ի�����ע��һ���Ӵ���𣬲�ʹ�����Լ����Ӵ�ѶϢ������ʽ�����Ի�����ѶϢ���������CLASS�����͸���Windows��ѶϢ���͵������ĵط��������˵�����Ƿ��͵���HexCalc�Ӵ������ָ�����Ӵ�ѶϢ������ʽ��
HexCalc�Ӵ��������HEXCALC��WinMain��ʽ��ע��ģ�������ͨ�Ӵ����Ӵ����һ�������ǣ���ע���и�ʮ����Ҫ������WNDCLASS�ṹ��cbWndExtra��λ�趨ΪDLGWINDOWEXTRA��������Լ�ע��ĶԻ�����������DZ���ġ�
��ע���Ӵ����֮�ᣬWinMain����CreateDialog��
hwnd = CreateDialog (hInstance, szAppName, 0, NULL) ;
�ڶ����������ִ���HexCaEc�����ǶԻ�����ģ������֡�����������ͨ���Ǹ��Ӵ����Ӵ����ţ������趨Ϊ0����Ϊ�Ӵ�û�и��Ӵ�������һ��������ͨ���ǶԻ���������λַ�����ﲻ��Ҫ����ΪWindows���ᴦ����ЩѶϢ�����Ҳ���ὫѶϢ���͸��Ի��������
���CreateDialog������Ի�����ģ��һ�𣬱�Windows��Ч��ת��Ϊһ��CreateWindow���С���CreateWindow���еĹ���������ĺ�����ͬ��
hwnd = CreateWindow (TEXT ("HexCalc"), TEXT ("Hex Calculator"), WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, 102 * 4 / cxChar, 122 * 8 / cyChar, NULL, NULL, hInstance, NULL) ;
���У�cxChar��cyChar�����ֱ���ϵͳ������Ԫ�Ŀ��Ⱥ͸߶ȡ�
����ͨ����Windows������CreateWindow���ж��ջ����᣺Windows�����ڽ�������ʽ�Ӵ�1���ֹͣ��������Ϊ�Ի�����ģ���ж��������29�����Ӵ��������������CreateWindow��������Щ����������Ӵ����Ӵ�ѶϢ������ʽ����WM_COMMANDѶϢ���ó�������WndProc����춽���һ�������������Ӵ����Ӵ���˵������һ���ܺõļ��ɡ�
������ʹHEXCALC�ij�ʽ�����½������ٵ���һ�ַ�������������ע�⵽HEXCALCû�б�ͷ��������ͷ������ͨ�������Ի�����ģ���У���ҪΪ�������Ӵ���������ʶ���֡�����֮���Կ��Բ�Ҫ�������������Ϊÿ�������������ID�趨Ϊ�����ڿ������ϵ����ֵ�ASCII�롣����ζ����WndProc������ȫ��ͬ�ضԴ�WM_COMMANDѶϢ��WM_CHARѶϢ����ÿ������£�wParam�ĵ����鶼�ǰ�ť��ASCII�롣
��Ȼ���Լ���ѶϢ����һЩ�����DZ�Ҫ�ġ�WndProc����WM_KEYDOWNѶϢ�������ͷ��ת��ΪBackspace�����ڴ���WM_CHARѶϢʱ��WndProc����Ԫ����ת��Ϊ��д��Enter��ת��Ϊ�Ⱥż���ASCII�롣
WM_CHARѶϢ����Ч����ͨ������GetDlgItem������ġ����GetDlgItem��ʽ����0����ô������Ԫ���ǶԻ�����ģ���ж����ID֮һ�������Ԫ��ID֮һ����ͨ������Ӧ�İ�ť����һ��BM_SETSTATEѶϢ����ʹ֮��˸��
if (hButton = GetDlgItem (hwnd, wParam)) { SendMessage (hButton, BM_SETSTATE, 1, 0) ; Sleep (100) ; SendMessage (hButton, BM_SETSTATE, 0, 0) ; }
������������С�Ĵ��ۣ�ȴΪHEXCALC�ļ��̽�����ɫ���١�Sleep��ʽ����ʽ��ͣ100���롣����ֹ��ť������̫�������ע�ⲻ����
��WndProc����WM_COMMANDѶϢʱ�������ǽ����뽹���趨�����Ӵ���
case WM_COMMAND : SetFocus (hwnd) ;
����һ��ʹ�û��󵥻�ij��ť�����뽹��ͻ��л����ð�ť�ϡ�
ͨ�öԻ�����
��
Windows��һ����ҪĿ�����ƶ���׼��ʹ���߽��档�����ೣ�õĹ��ܱ�����˵�������еúܿ죬�����������峧�̶�����Alt-File-Openѡ������һ��������Ȼ����ʵ�ʵĵ��������Ի�����ȴ����������ͬ��
��Windows 3.1��ʼ���������������һ�����еĽ������������һ�ֽ�����ͨ�öԻ������ʽ�⡹����ǿ�������ʽ���ɼ�����ʽ��ɣ���Щ��ʽ������׼�Ի����������д򿪺ʹ��浵�����������滻��ѡ����ɫ��ѡ�����壨�ҽ��ڱ����������ϵ���Щ���ݣ��Լ���ӡ���ҽ��ڵ�ʮ�������ۣ���
Ϊ��ʹ����Щ��ʽ���������϶�Ҫ��ʼ��ijһ�ṹ�ĸ�����λ�������ýṹ��ָ�괫�͸�ͨ�öԻ������ʽ���ij����ʽ���ú�ʽ�Ὠ������ʾ�Ի����顣��ʹ���߹رնԻ�����ʱ�������еĺ�ʽ������Ȩ���ظ���ʽ�������ԴӴ��͸����Ľṹ�л����Ѷ��
��ʹ��ͨ�öԻ������ʽ����κ�CÔʼ�뵵��ʱ��������Ҫ����COMMDLG.H��ͷ������ͨ�öԻ�������ļ���/Platform SDK/User Interface Services/User Input/Common Dialog Box Library�С�
��ǿPOPPAD
��
����������ʮ�µ�POPPAD�����ӹ��ܱ�ʱ�����м�����׼���ܱ���û��ʵ�������������Ѿ�׼������POPPAD���ò¿ªµï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ëµµï¿½ï¿½ï¿½Ô¼ï¿½ï¿½Ú´ï¿½Æ¬ï¿½Ï´ï¿½ï¿½ï¿½à¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ä¹ï¿½ï¿½Ü¡ï¿½ï¿½Ú´ï¿½ï¿½ï¿½ï¿½Ð£ï¿½ï¿½ï¿½ï¿½Ç»ï¿½ï¿½ï¿½ï¿½ï¿½POPPAD�м�������ѡ��������滻���ܡ�
ʵ��POPPAD3��ʽ�ĵ������ʽ11-6��ʾ��
��ʽ11-6 POPPAD3 POPPAD.C /*------------------------------------------------------------------------ POPPAD.C -- Popup Editor (c) Charles Petzold, 1998 -------------------------------------------------------------------------*/ #include <windows.h> #include <commdlg.h> #include "resource.h" #define EDITID 1 #define UNTITLED TEXT ("(untitled)") LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; BOOL CALLBACK AboutDlgProc (HWND, UINT, WPARAM, LPARAM) ; // Functions in POPFILE.C void PopFileInitialize (HWND) ; BOOL PopFileOpenDlg (HWND, PTSTR, PTSTR) ; BOOL PopFileSaveDlg (HWND, PTSTR, PTSTR) ; BOOL PopFileRead (HWND, PTSTR) ; BOOL PopFileWrite (HWND, PTSTR) ; // Functions in POPFIND.C HWND PopFindFindDlg (HWND) ; HWND PopFindReplaceDlg (HWND) ; BOOL PopFindFindText (HWND, int *, LPFINDREPLACE) ; BOOL PopFindReplaceText (HWND, int *, LPFINDREPLACE) ; BOOL PopFindNextText (HWND, int *) ; BOOL PopFindValidFind (void) ; // Functions in POPFONT.C void PopFontInitialize (HWND) ; BOOL PopFontChooseFont (HWND) ; void PopFontSetFont (HWND) ; void PopFontDeinitialize (void) ; // Functions in POPPRNT.C BOOL PopPrntPrintFile (HINSTANCE, HWND, HWND, PTSTR) ; // Global variables static HWND hDlgModeless ; static TCHAR szAppName[] = TEXT ("PopPad") ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MSG msg ; HWND hwnd ; HACCEL hAccel ; 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, NULL, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, szCmdLine) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; hAccel = LoadAccelerators (hInstance, szAppName) ; while (GetMessage (&msg, NULL, 0, 0)) { if (hDlgModeless == NULL || !IsDialogMessage (hDlgModeless, &msg)) { if (!TranslateAccelerator (hwnd, hAccel, &msg)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } } } return msg.wParam ; } void DoCaption (HWND hwnd, TCHAR * szTitleName) { TCHAR szCaption[64 + MAX_PATH] ; wsprintf (szCaption, TEXT ("%s - %s"), szAppName, szTitleName[0] ? szTitleName : UNTITLED) ; SetWindowText (hwnd, szCaption) ; } void OkMessage (HWND hwnd, TCHAR * szMessage, TCHAR * szTitleName) { TCHAR szBuffer[64 + MAX_PATH] ; wsprintf (szBuffer, szMessage, szTitleName[0] ? szTitleName : UNTITLED) ; MessageBox (hwnd, szBuffer, szAppName, MB_OK | MB_ICONEXCLAMATION) ; } short AskAboutSave (HWND hwnd, TCHAR * szTitleName) { TCHAR szBuffer[64 + MAX_PATH] ; int iReturn ; wsprintf (szBuffer, TEXT ("Save current changes in %s?"), szTitleName[0] ? szTitleName : UNTITLED) ; iReturn = MessageBox (hwnd, szBuffer, szAppName, MB_YESNOCANCEL | MB_ICONQUESTION) ; if (iReturn == IDYES) if (!SendMessage (hwnd, WM_COMMAND, IDM_FILE_SAVE, 0)) iReturn = IDCANCEL ; return iReturn ; } LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam) { static BOOL bNeedSave = FALSE ; static HINSTANCE hInst ; static HWND hwndEdit ; static int iOffset ; static TCHAR szFileName[MAX_PATH], szTitleName[MAX_PATH] ; static UINT messageFindReplace ; int iSelBeg, iSelEnd, iEnable ; LPFINDREPLACE pfr ; switch (message) { case WM_CREATE: hInst = ((LPCREATESTRUCT) lParam) -> hInstance ; // Create the edit control child window hwndEdit = CreateWindow (TEXT ("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_NOHIDESEL | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0, 0, 0, 0, hwnd, (HMENU) EDITID, hInst, NULL) ; SendMessage (hwndEdit, EM_LIMITTEXT, 32000, 0L) ; // Initialize common dialog box stuff PopFileInitialize (hwnd) ; PopFontInitialize (hwndEdit) ; messageFindReplace = RegisterWindowMessage (FINDMSGSTRING) ; DoCaption (hwnd, szTitleName) ; return 0 ; case WM_SETFOCUS: SetFocus (hwndEdit) ; return 0 ; case WM_SIZE: MoveWindow (hwndEdit, 0, 0, LOWORD (lParam), HIWORD (lParam), TRUE) ; return 0 ; case WM_INITMENUPOPUP: switch (lParam) { case 1: // Edit menu // Enable Undo if edit control can do it EnableMenuItem ((HMENU) wParam, IDM_EDIT_UNDO, SendMessage (hwndEdit, EM_CANUNDO, 0, 0L) ? MF_ENABLED : MF_GRAYED) ; // Enable Paste if text is in the clipboard EnableMenuItem ((HMENU) wParam, IDM_EDIT_PASTE, IsClipboardFormatAvailable (CF_TEXT) ? MF_ENABLED : MF_GRAYED) ; // Enable Cut, Copy, and Del if text is selected SendMessage (hwndEdit, EM_GETSEL, (WPARAM) &iSelBeg, (LPARAM) &iSelEnd) ; iEnable = iSelBeg != iSelEnd ? MF_ENABLED : MF_GRAYED ; EnableMenuItem ((HMENU) wParam, IDM_EDIT_CUT, iEnable) ; EnableMenuItem ((HMENU) wParam, IDM_EDIT_COPY, iEnable) ; EnableMenuItem ((HMENU) wParam, IDM_EDIT_CLEAR, iEnable) ; break ; case 2: // Search menu // Enable Find, Next, and Replace if modeless // dialogs are not already active iEnable = hDlgModeless == NULL ? MF_ENABLED : MF_GRAYED ; EnableMenuItem ((HMENU) wParam, IDM_SEARCH_FIND, iEnable) ; EnableMenuItem ((HMENU) wParam, IDM_SEARCH_NEXT, iEnable) ; EnableMenuItem ((HMENU) wParam, IDM_SEARCH_REPLACE, iEnable) ; break ; } return 0 ; case WM_COMMAND: // Messages from edit control if (lParam && LOWORD (wParam) == EDITID) { switch (HIWORD (wParam)) { case EN_UPDATE : bNeedSave = TRUE ; return 0 ; case EN_ERRSPACE : case EN_MAXTEXT : MessageBox (hwnd, TEXT ("Edit control out of space."), szAppName, MB_OK | MB_ICONSTOP) ; return 0 ; } break ; } switch (LOWORD (wParam)) { // Messages from File menu case IDM_FILE_NEW: if (bNeedSave && IDCANCEL == AskAboutSave (hwnd, szTitleName)) return 0 ; SetWindowText (hwndEdit, TEXT ("\0")) ; szFileName[0] = '\0' ; szTitleName[0] = '\0' ; DoCaption (hwnd, szTitleName) ; bNeedSave = FALSE ; return 0 ; case IDM_FILE_OPEN: if (bNeedSave && IDCANCEL == AskAboutSave (hwnd, szTitleName)) return 0 ; if (PopFileOpenDlg (hwnd, szFileName, szTitleName)) { if (!PopFileRead (hwndEdit, szFileName)) { OkMessage (hwnd, TEXT ("Could not read file %s!"), szTitleName) ; szFileName[0] = '\0' ; szTitleName[0] = '\0' ; } } DoCaption (hwnd, szTitleName) ; bNeedSave = FALSE ; return 0 ; case IDM_FILE_SAVE: if (szFileName[0]) { if (PopFileWrite (hwndEdit, szFileName)) { bNeedSave = FALSE ; return 1 ; } else { OkMessage (hwnd, TEXT ("Could not write file %s"), szTitleName) ; return 0 ; } } //fall through case IDM_FILE_SAVE_AS: if (PopFileSaveDlg (hwnd, szFileName, szTitleName)) { DoCaption (hwnd, szTitleName) ; if (PopFileWrite (hwndEdit, szFileName)) { bNeedSave = FALSE ; return 1 ; } else { OkMessage (hwnd, TEXT ("Could not write file %s"), szTitleName) ; return 0 ; } } return 0 ; case IDM_FILE_PRINT: if (!PopPrntPrintFile (hInst, hwnd, hwndEdit, szTitleName)) OkMessage ( hwnd, TEXT ("Could not print file %s"), szTitleName) ; return 0 ; case IDM_APP_EXIT: SendMessage (hwnd, WM_CLOSE, 0, 0) ; return 0 ; // Messages from Edit menu case IDM_EDIT_UNDO: SendMessage (hwndEdit, WM_UNDO, 0, 0) ; return 0 ; case IDM_EDIT_CUT: SendMessage (hwndEdit, WM_CUT, 0, 0) ; return 0 ; case IDM_EDIT_COPY: SendMessage (hwndEdit, WM_COPY, 0, 0) ; return 0 ; case IDM_EDIT_PASTE: SendMessage (hwndEdit, WM_PASTE, 0, 0) ; return 0 ; case IDM_EDIT_CLEAR: SendMessage (hwndEdit, WM_CLEAR, 0, 0) ; return 0 ; case IDM_EDIT_SELECT_ALL: SendMessage (hwndEdit, EM_SETSEL, 0, -1) ; return 0 ; // Messages from Search menu case IDM_SEARCH_FIND: SendMessage (hwndEdit, EM_GETSEL, 0, (LPARAM) &iOffset) ; hDlgModeless = PopFindFindDlg (hwnd) ; return 0 ; case IDM_SEARCH_NEXT: SendMessage (hwndEdit, EM_GETSEL, 0, (LPARAM) &iOffset) ; if (PopFindValidFind ()) PopFindNextText (hwndEdit, &iOffset) ; else hDlgModeless = PopFindFindDlg (hwnd) ; return 0 ; case IDM_SEARCH_REPLACE: SendMessage (hwndEdit, EM_GETSEL, 0, (LPARAM) &iOffset) ; hDlgModeless = PopFindReplaceDlg (hwnd) ; return 0 ; case IDM_FORMAT_FONT: if (PopFontChooseFont (hwnd)) PopFontSetFont (hwndEdit) ; return 0 ; // Messages from Help menu case IDM_HELP: OkMessage (hwnd, TEXT ("Help not yet implemented!"), TEXT ("\0")) ; return 0 ; case IDM_APP_ABOUT: DialogBox (hInst, TEXT ("AboutBox"), hwnd, AboutDlgProc) ; return 0 ; } break ; case WM_CLOSE: if (!bNeedSave || IDCANCEL != AskAboutSave (hwnd, szTitleName)) DestroyWindow (hwnd) ; return 0 ; case WM_QUERYENDSESSION : if (!bNeedSave || IDCANCEL != AskAboutSave (hwnd, szTitleName)) return 1 ; return 0 ; case WM_DESTROY: PopFontDeinitialize () ; PostQuitMessage (0) ; return 0 ; default: // Process "Find-Replace" messages if (message == messageFindReplace) { pfr = (LPFINDREPLACE) lParam ; if (pfr->Flags & FR_DIALOGTERM) hDlgModeless = NULL ; if (pfr->Flags & FR_FINDNEXT) if (!PopFindFindText (hwndEdit, &iOffset, pfr)) OkMessage (hwnd, TEXT ("Text not found!"), TEXT ("\0")) ; if (pfr->Flags & FR_REPLACE || pfr->Flags & FR_REPLACEALL) if (!PopFindReplaceText (hwndEdit, &iOffset, pfr)) OkMessage (hwnd, TEXT ("Text not found!"), TEXT ("\0")) ; if (pfr->Flags & FR_REPLACEALL) while (PopFindReplaceText (hwndEdit, &iOffset, pfr)) ; return 0 ; } break ; } 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: EndDialog (hDlg, 0) ; return TRUE ; } break ; } return FALSE ; }
POPFILE.C /*-------------------------------------------------------------------------- POPFILE.C -- Popup Editor File Functions ------------------------------------------------------------------------*/ #include <windows.h> #include <commdlg.h> static OPENFILENAME ofn ; void PopFileInitialize (HWND hwnd) { static TCHAR szFilter[] = TEXT ("Text Files (*.TXT)\0*.txt\0") \ TEXT ("ASCII Files (*.ASC)\0*.asc\0") \ TEXT ("All Files (*.*)\0*.*\0\0") ; ofn.lStructSize = sizeof (OPENFILENAME) ; ofn.hwndOwner = hwnd ; ofn.hInstance = NULL ; ofn.lpstrFilter = szFilter ; ofn.lpstrCustomFilter = NULL ; ofn.nMaxCustFilter = 0 ; ofn.nFilterIndex = 0 ; ofn.lpstrFile = NULL ; // Set in Open and Close functions ofn.nMaxFile = MAX_PATH ; ofn.lpstrFileTitle = NULL ; // Set in Open and Close functions ofn.nMaxFileTitle = MAX_PATH ; ofn.lpstrInitialDir = NULL ; ofn.lpstrTitle = NULL ; ofn.Flags = 0 ; // Set in Open and Close functions ofn.nFileOffset = 0 ; ofn.nFileExtension = 0 ; ofn.lpstrDefExt = TEXT ("txt") ; ofn.lCustData = 0L ; ofn.lpfnHook = NULL ; ofn.lpTemplateName = NULL ; } BOOL PopFileOpenDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName) { ofn.hwndOwner = hwnd ; ofn.lpstrFile = pstrFileName ; ofn.lpstrFileTitle = pstrTitleName ; ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT ; return GetOpenFileName (&ofn) ; } BOOL PopFileSaveDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName) { ofn.hwndOwner = hwnd ; ofn.lpstrFile = pstrFileName ; ofn.lpstrFileTitle = pstrTitleName ; ofn.Flags = OFN_OVERWRITEPROMPT ; return GetSaveFileName (&ofn) ; } BOOL PopFileRead (HWND hwndEdit, PTSTR pstrFileName) { BYTE bySwap ; DWORD dwBytesRead ; HANDLE hFile ; int i, iFileLength, iUniTest ; PBYTE pBuffer, pText, pConv ; // Open the file. if (INVALID_HANDLE_VALUE == (hFile = CreateFile (pstrFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL))) return FALSE ; // Get file size in bytes and allocate memory for read. // Add an extra two bytes for zero termination. iFileLength = GetFileSize (hFile, NULL) ; pBuffer = malloc (iFileLength + 2) ; // Read file and put terminating zeros at end. ReadFile (hFile, pBuffer, iFileLength, &dwBytesRead, NULL) ; CloseHandle (hFile) ; pBuffer[iFileLength] = '\0' ; pBuffer[iFileLength + 1] = '\0' ; // Test to see if the text is Unicode iUniTest = IS_TEXT_UNICODE_SIGNATURE | IS_TEXT_UNICODE_REVERSE_SIGNATURE ; if (IsTextUnicode (pBuffer, iFileLength, &iUniTest)) { pText = pBuffer + 2 ; iFileLength -= 2 ; if (iUniTest & IS_TEXT_UNICODE_REVERSE_SIGNATURE) { for (i = 0 ; i < iFileLength / 2 ; i++) { bySwap = ((BYTE *) pText) [2 * i] ; ((BYTE *) pText) [2 * i] = ((BYTE *) pText) [2 * i + 1] ; ((BYTE *) pText) [2 * i + 1] = bySwap ; } } // Allocate memory for possibly converted string pConv = malloc (iFileLength + 2) ; // If the edit control is not Unicode, convert Unicode text to // non-Unicode (i.e., in general, wide character). #ifndef UNICODE WideCharToMultiByte (CP_ACP, 0, (PWSTR) pText, -1, pConv, iFileLength + 2, NULL, NULL) ; // If the edit control is Unicode, just copy the string #else lstrcpy ((PTSTR) pConv, (PTSTR) pText) ; #endif } else // the file is not Unicode { pText = pBuffer ; // Allocate memory for possibly converted string. pConv = malloc (2 * iFileLength + 2) ; // If the edit control is Unicode, convert ASCII text. #ifdef UNICODE MultiByteToWideChar (CP_ACP, 0, pText, -1, (PTSTR) pConv, iFileLength + 1) ; // If not, just copy buffer #else lstrcpy ((PTSTR) pConv, (PTSTR) pText) ; #endif } SetWindowText (hwndEdit, (PTSTR) pConv) ; free (pBuffer) ; free (pConv) ; return TRUE ; } BOOL PopFileWrite (HWND hwndEdit, PTSTR pstrFileName) { DWORD dwBytesWritten ; HANDLE hFile ; int iLength ; PTSTR pstrBuffer ; WORD wByteOrderMark = 0xFEFF ; // Open the file, creating it if necessary if (INVALID_HANDLE_VALUE == (hFile = CreateFile (pstrFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL))) return FALSE ; // Get the number of characters in the edit control and allocate // memory for them. iLength = GetWindowTextLength (hwndEdit) ; pstrBuffer = (PTSTR) malloc ((iLength + 1) * sizeof (TCHAR)) ; if (!pstrBuffer) { CloseHandle (hFile) ; return FALSE ; } // If the edit control will return Unicode text, write the // byte order mark to the file. #ifdef UNICODE WriteFile (hFile, &wByteOrderMark, 2, &dwBytesWritten, NULL) ; #endif // Get the edit buffer and write that out to the file. GetWindowText (hwndEdit, pstrBuffer, iLength + 1) ; WriteFile (hFile, pstrBuffer, iLength * sizeof (TCHAR), &dwBytesWritten, NULL) ; if ((iLength * sizeof (TCHAR)) != (int) dwBytesWritten) { CloseHandle (hFile) ; free (pstrBuffer) ; return FALSE ; } CloseHandle (hFile) ; free (pstrBuffer) ; return TRUE ; }
POPFIND.C /*-------------------------------------------------------------------------- POPFIND.C -- Popup Editor Search and Replace Functions ------------------------------------------------------------------------*/ #include <windows.h> #include <commdlg.h> #include <tchar.h> // for _tcsstr (strstr for Unicode & non-Unicode) #define MAX_STRING_LEN 256 static TCHAR szFindText [MAX_STRING_LEN] ; static TCHAR szReplText [MAX_STRING_LEN] ; HWND PopFindFindDlg (HWND hwnd) { static FINDREPLACE fr ; // must be static for modeless dialog!!! fr.lStructSize = sizeof (FINDREPLACE) ; fr.hwndOwner = hwnd ; fr.hInstance = NULL ; fr.Flags = FR_HIDEUPDOWN | FR_HIDEMATCHCASE | FR_HIDEWHOLEWORD ; fr.lpstrFindWhat = szFindText ; fr.lpstrReplaceWith = NULL ; fr.wFindWhatLen = MAX_STRING_LEN ; fr.wReplaceWithLen = 0 ; fr.lCustData = 0 ; fr.lpfnHook = NULL ; fr.lpTemplateName = NULL ; return FindText (&fr) ; } HWND PopFindReplaceDlg (HWND hwnd) { static FINDREPLACE fr ; // must be static for modeless dialog!!! fr.lStructSize = sizeof (FINDREPLACE) ; fr.hwndOwner = hwnd ; fr.hInstance = NULL ; fr.Flags = FR_HIDEUPDOWN | FR_HIDEMATCHCASE | FR_HIDEWHOLEWORD ; fr.lpstrFindWhat = szFindText ; fr.lpstrReplaceWith = szReplText ; fr.wFindWhatLen = MAX_STRING_LEN ; fr.wReplaceWithLen = MAX_STRING_LEN ; fr.lCustData = 0 ; fr.lpfnHook = NULL ; fr.lpTemplateName = NULL ; return ReplaceText (&fr) ; } BOOL PopFindFindText (HWND hwndEdit, int * piSearchOffset, LPFINDREPLACE pfr) { int iLength, iPos ; PTSTR pstrDoc, pstrPos ; // Read in the edit document iLength = GetWindowTextLength (hwndEdit) ; if (NULL == (pstrDoc = (PTSTR) malloc ((iLength + 1) * sizeof (TCHAR)))) return FALSE ; GetWindowText (hwndEdit, pstrDoc, iLength + 1) ; // Search the document for the find string pstrPos = _tcsstr (pstrDoc + * piSearchOffset, pfr->lpstrFindWhat) ; free (pstrDoc) ; // Return an error code if the string cannot be found if (pstrPos == NULL) return FALSE ; // Find the position in the document and the new start offset iPos = pstrPos - pstrDoc ; * piSearchOffset = iPos + lstrlen (pfr->lpstrFindWhat) ; // Select the found text SendMessage (hwndEdit, EM_SETSEL, iPos, * piSearchOffset) ; SendMessage (hwndEdit, EM_SCROLLCARET, 0, 0) ; return TRUE ; } BOOL PopFindNextText (HWND hwndEdit, int * piSearchOffset) { FINDREPLACE fr ; fr.lpstrFindWhat = szFindText ; return PopFindFindText (hwndEdit, piSearchOffset, &fr) ; } BOOL PopFindReplaceText (HWND hwndEdit, int * piSearchOffset, LPFIND,REPLACE pfr) { // Find the text if (!PopFindFindText (hwndEdit, piSearchOffset, pfr)) return FALSE ; // Replace it SendMessage ( hwndEdit, EM_REPLACESEL, 0, (LPARAM) pfr-> lpstrReplaceWith) ; return TRUE ; } BOOL PopFindValidFind (void) { return * szFindText != '\0' ; }
POPFONT.C /*---------------------------------------------------- POPFONT.C -- Popup Editor Font Functions ------------------------------------------------------*/ #include <windows.h> #include <commdlg.h> static LOGFONT logfont ; static HFONT hFont ; BOOL PopFontChooseFont (HWND hwnd) { CHOOSEFONT cf ; cf.lStructSize = sizeof (CHOOSEFONT) ; cf.hwndOwner = hwnd ; cf.hDC = NULL ; cf.lpLogFont = &logfont ; cf.iPointSize = 0 ; cf.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS | CF_EFFECTS ; cf.rgbColors = 0 ; cf.lCustData = 0 ; cf.lpfnHook = NULL ; cf.lpTemplateName = NULL ; cf.hInstance = NULL ; cf.lpszStyle = NULL ; cf.nFontType = 0 ; // Returned from ChooseFont cf.nSizeMin = 0 ; cf.nSizeMax = 0 ; return ChooseFont (&cf) ; } void PopFontInitialize (HWND hwndEdit) { GetObject (GetStockObject (SYSTEM_FONT), sizeof (LOGFONT), (PTSTR) &logfont) ; hFont = CreateFontIndirect (&logfont) ; SendMessage (hwndEdit, WM_SETFONT, (WPARAM) hFont, 0) ; } void PopFontSetFont (HWND hwndEdit) { HFONT hFontNew ; RECT rect ; hFontNew = CreateFontIndirect (&logfont) ; SendMessage (hwndEdit, WM_SETFONT, (WPARAM) hFontNew, 0) ; DeleteObject (hFont) ; hFont = hFontNew ; GetClientRect (hwndEdit, &rect) ; InvalidateRect (hwndEdit, &rect, TRUE) ; } void PopFontDeinitialize (void) { DeleteObject (hFont) ; }
POPPRNT0.C /*------------------------------------------------------------------------ POPPRNT0.C -- Popup Editor Printing Functions (dummy version) --------------------------------------------------------------------------*/ #include <windows.h> BOOL PopPrntPrintFile ( HINSTANCE hInst, HWND hwnd, HWND hwndEdit, PTSTR pstrTitleName) { return FALSE ; }
POPPAD.RC ��ժ¼�� //Microsoft Developer Studio generated resource script. #include "resource.h" #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// // Dialog ABOUTBOX DIALOG DISCARDABLE 32, 32, 180, 100 STYLE DS_MODALFRAME | WS_POPUP FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,66,80,50,14 ICON "POPPAD",IDC_STATIC,7,7,20,20 CTEXT "PopPad",IDC_STATIC,40,12,100,8 CTEXT "Popup Editor for Windows",IDC_STATIC,7,40,166,8 CTEXT "(c) Charles Petzold, 1998",IDC_STATIC,7,52,166,8 END PRINTDLGBOX DIALOG DISCARDABLE 32, 32, 186, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "PopPad" FONT 8, "MS Sans Serif" BEGIN PUSHBUTTON "Cancel",IDCANCEL,67,74,50,14 CTEXT "Sending",IDC_STATIC,8,8,172,8 CTEXT "",IDC_FILENAME,8,28,172,8 CTEXT "to print spooler.",IDC_STATIC,8,48,172,8 END ///////////////////////////////////////////////////////////////////////////// // Menu POPPAD MENU DISCARDABLE BEGIN POPUP "&File" BEGIN MENUITEM "&New\tCtrl+N", IDM_FILE_NEW MENUITEM "&Open...\tCtrl+O",IDM_FILE_OPEN MENUITEM "&Save\tCtrl+S", IDM_FILE_SAVE MENUITEM "Save &As...", IDM_FILE_SAVE_AS MENUITEM SEPARATOR MENUITEM "&Print\tCtrl+P", IDM_FILE_PRINT MENUITEM SEPARATOR MENUITEM "E&xit", IDM_APP_EXIT END POPUP "&Edit" BEGIN MENUITEM "&Undo\tCtrl+Z", IDM_EDIT_UNDO MENUITEM SEPARATOR MENUITEM "Cu&t\tCtrl+X", IDM_EDIT_CUT MENUITEM "&Copy\tCtrl+C", IDM_EDIT_COPY MENUITEM "&Paste\tCtrl+V", IDM_EDIT_PASTE MENUITEM "De&lete\tDel", IDM_EDIT_CLEAR MENUITEM SEPARATOR MENUITEM "&Select All", IDM_EDIT_SELECT_ALL END POPUP "&Search" BEGIN MENUITEM "&Find...\tCtrl+F",IDM_SEARCH_FIND MENUITEM "Find &Next\tF3", IDM_SEARCH_NEXT MENUITEM "&Replace...\tCtrl+R", IDM_SEARCH_REPLACE END POPUP "F&ormat" BEGIN MENUITEM "&Font...", END POPUP "&Help" BEGIN MENUITEM "&Help", IDM_HELP MENUITEM "&About PopPad...", IDM_APP_ABOUT END END ///////////////////////////////////////////////////////////////////////////// // Accelerator POPPAD ACCELERATORS DISCARDABLE BEGIN VK_BACK, IDM_EDIT_UNDO, VIRTKEY, ALT, NOINVERT VK_DELETE, IDM_EDIT_CLEAR, VIRTKEY, NOINVERT VK_DELETE, IDM_EDIT_CUT, VIRTKEY, SHIFT, NOINVERT VK_F1, IDM_HELP, VIRTKEY, NOINVERT VK_F3, IDM_SEARCH_NEXT, VIRTKEY, NOINVERT VK_INSERT, IDM_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT VK_INSERT, IDM_EDIT_PASTE, VIRTKEY, SHIFT, NOINVERT "^C", IDM_EDIT_COPY, ASCII, NOINVERT "^F", IDM_SEARCH_FIND, ASCII, NOINVERT "^N", IDM_FILE_NEW, ASCII, NOINVERT "^O", IDM_FILE_OPEN, ASCII, NOINVERT "^P", IDM_FILE_PRINT, ASCII, NOINVERT "^R", IDM_SEARCH_REPLACE, ASCII, NOINVERT "^S", IDM_FILE_SAVE, ASCII, NOINVERT "^V", IDM_EDIT_PASTE, ASCII, NOINVERT "^X", IDM_EDIT_CUT, ASCII, NOINVERT "^Z", IDM_EDIT_UNDO, ASCII, NOINVERT END ///////////////////////////////////////////////////////////////////////////// // Icon POPPAD ICON DISCARDABLE "poppad.ico"
RESOURCE.H ��ժ¼�� // Microsoft Developer Studio generated include file. // Used by poppad.rc #define IDC_FILENAME 1000 #define IDM_FILE_NEW 40001 #define IDM_FILE_OPEN 40002 #define IDM_FILE_SAVE 40003 #define IDM_FILE_SAVE_AS 40004 #define IDM_FILE_PRINT 40005 #define IDM_APP_EXIT 40006 #define IDM_EDIT_UNDO 40007 #define IDM_EDIT_CUT 40008 #define IDM_EDIT_COPY 40009 #define IDM_EDIT_PASTE 40010 #define IDM_EDIT_CLEAR 40011 #define IDM_EDIT_SELECT_ALL 40012 #define IDM_SEARCH_FIND 40013 #define IDM_SEARCH_NEXT 40014 #define IDM_SEARCH_REPLACE 40015 #define IDM_FORMAT_FONT 40016 #define IDM_HELP 40017 #define IDM_APP_ABOUT 40018
POPPAD.ICO |
��
|
��
|
Ϊ�˱����ڵ�ʮ�������ظ�Ôʼ�룬����POPPAD.RC�Ĺ��ܱ��м�������ӡר����һЩ������֧Ԯ��
POPPAD.C�����˳�ʽ�����еĻ���Ôʼ�롣POPFILE.C��������File Open��File Save�Ի�����ij�ʽ�룬������������I/O��ʽ��POPFIND.C�а�������Ѱ���滻���ֹ��ܡ�POPFONT.C����������ѡ���ܡ�POPPRNT0.C�����ʲô�������ڵ�ʮ�����н�ʹ��POPPRNT.C�滻POPPRNT0.C�Խ������յ�POPPAD��ʽ��
������������һ��POPPAD.C��POPPAD.C���������������ִ�����һ����������WndProc������ΪszFileName��������ϸ�����������ơ�·�����ƺ͵������ƣ��ڶ���������ΪszTitleName���dz�ʽ�����ĵ������ơ�������POPPAD3��DoCaption��ʽ�У��Ա㽫����������ʾ���Ӵ��ı������ϣ�Ҳ����OKMessage��ʽ��AskAboutSave��ʽ�У��Ա���ʹ������ʾѶϢ���顣
POPFILE.C�����˼�����ʾ��File Open���͡�File Save���Ի������Լ�ʵ��ִ�е���I/O�ĺ�ʽ���Ի�������ʹ�ú�ʽGetOpenFileName��GetSaveFileName����ʾ�ġ���������ʽ��ʹ��һ����̬ΪOPENFILENAME�Ľṹ������ṹ��COMMDLG.H�ж��塣��POPFILE.C�У�ʹ����һ���ýṹ��̬�����������ȡ��Ϊofn��ofn�Ĵ������λ��PopFileInitialize��ʽ�б���ʼ����POPPAD.C��WndProc�д���WM_CREATEѶϢʱ���иú�ʽ��
��ofn��Ϊ��̬����ṹ������ȽϷ��㣬��ΪGetOpenFileName��GetSaveFileName���ýṹ���ص�һЩ��Ѷ�����������������Щ��ʽʱ�õ���
����ͨ�öԻ������������ѡ�î£ï¿½ï¿½ï¿½ï¿½ï¿½è¶¨ï¿½Ô¼ï¿½ï¿½Ä¶Ô»ï¿½ï¿½ï¿½ï¿½ï¿½Ä£ï¿½å£¬ï¿½Ô¼ï¿½Îªï¿½Ô»ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ó¡ï¿½ï¿½Ò¹ï¿½ï¿½ï¿½hook������POPFILE.C��ʹ�õġ�File Open���͡�File Save���Ի�������������ġ�OPENFILENAME�ṹ�б��趨����λֻ��lStructSize���ṹ�ij��ȣ���hwndOwner���Ի�����ӵ���ߣ���lpstrFilter�����潫��Ҫ���ۣ���lpstrFile��nMaxFile��ָ����������������ƵĻ�����ָ��͸û������Ĵ�С����lpstrFileTitle��nMaxFileTitle���������ƻ����������С����Flags���趨�Ի������ѡ���lpstrDefExt�����ʹ�����ڶԻ����������뵵����ʱ��ָ����������������ô�������ڶ��ĵ�������������
��ʹ�����ڡ�File�����ܱ���ѡ��Open��ʱ��POPPAD3����POPFILE��PopFileOpenDlg��ʽ�����Ӵ����š�һ��ָ�򵵰����ƻ�������ָ���һ��ָ�򵵰����⻺������ָ�괫������PopFileOpenDlgǡ�����趨OPENFILENAME�ṹ��hwndOwner��lpstrFile��lpstrFileTitle��λ����Flags�趨ΪOFN_ CREATEPROMPT��Ȼ�����GetOpenFileName����ʾ��ͼ11-6��ʾ����ͨ�Ի����顣
��
ͼ11-6 ��File Open���Ի����� |
��ʹ���߽�������Ի�����ʱ��GetOpenFileName��ʽ���ء�OFN_CREATEPROMPT���ָʾGetOpenFileName��ʾһ��ѶϢ���飬ѯ��ʹ���������ѡ���������ڣ��Ƿ�Ҫ�����õ�����
���½ǵ�����ʽ�嵥�����г��˽�Ҫ��ʾ�ڵ����б��еĵ�����̬�����嵥���鱻��Ϊ��ɸѡ�嵥����ʹ���߿���ͨ��������ʽ�嵥�����б���ѡ����һ�ֵ�����̬�����ı�ɸѡ��������POPFILE.C��PopFileInitialize��ʽ�У����ڱ���szFilter��һ���ִ����У���Ϊ������̬�ĵ���������һ��ɸ���嵥������.TXT�����������ֵ���������.ASC��������ASCII���������е�����OPENFILENAME�ṹ��lpstrFilter��λ����ָ������е�һ���ִ���ָ�ꡣ
���ʹ�����ڶԻ����鴦춻״̬ʱ�ı���ɸѡ��������ôOPENFILENAME��nFilterIndex��λ��ӳ��ʹ���ߵ�ѡ����춸ýṹ�Ǿ�̬�������´������Ի�����ʱ��ɸѡ���������趨Ϊѡ�еĵ�����̬��
POPFILE.C�е�PopFileSaveDlg��ʽ������ƣ�����Flags�����趨ΪOFN_OVERWRITEPROMPT��������GetSaveFileName������File Save���Ի����顣OFN_OVERWRITEPROMPT��굼����ʾһ��ѶϢ���飬�����ѡ�����Ѿ����ڣ���ô��ѯ��ʹ�����Ƿ񸲸Ǹõ�����
Unicode����I/O
��
��춱����еĴ������ʽ����������ע��Unicode�ͷ�Unicode����������磬��POPPAD3��Unicode���à¼ï¿½ï¿½ï¿½ï¿½ï¿½î½«ï¿½ï¿½ï¿½ï¿½Unicode���ֺ�ʹ��Unicode�ִ�������ͨ�öԻ����顣���磬����ʽ��Ҫ�������滻ʱ�����еIJ������ᴦ��Unicode�ִ���������Ҫת����
������POPPAD3������I/O��Ҳ����˵����ʽ���ܱ����쳵�����Unicode���POPPAD3����˱à¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ý²ï¿½ï¿½ï¿½ï¿½ï¿½Ð´ï¿½ï¿½ï¿½Æ¬ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ê¹ï¿½ï¿½Unicode��ŵġ������Unicode���POPPAD3��ȡ�˸õ�����������д��à¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ò»ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Unicode���ȡ�ɷ�Unicode�洢��ĵ���ʱҲ��������
����İ취��춱���ת�������ȣ���POPFILE.C��PopFileWrite��ʽ�У���������Unicode��ij�ʽ���ڵ����Ŀ�ʼλ��д��0xFEFF���ⶨ��ΪλԪ��˳���ǣ��Ա�ʾ���ֵ�������Unicode���֡�
�����PopFileRead��ʽ�У���ʽ��IsTextUnicode��ʽ�����������Ƿ���λԪ��˳���ǡ��˺�ʽ�������λԪ��˳�����Ƿ����ˣ��༴Unicode���ֵ�����Macintosh��������ʹ����Intel�������෴��λԪ��˳��Ļ����Ͻ����ġ���ʱ��λԪ���˳�ò¶¼¾ï¿½ï¿½ï¿½ï¿½ï¿½×ªï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Unicode�棬���DZ���Unicode���POPPAD3��ȡ����ʱ�����ֽ���WideCharToMultiCharת����WideCharToMultiCharʵ������һ������ԪANSI��ʽ��������ִ��Զ�����Windows����ֻ����ʱ���ֲ��ܷ���à¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
ͬ���أ���������Ƿ�Unicode���ֵ�������ִ�е���Unicode��ij�ʽ����ô���ֱ�����MultiCharToWideCharת����
�ı�����
��
���ǽ��ڵ�ʮ������ϸ�������壬����Щ�����ܴ���ͨ�öԻ����麯ʽ��ѡ�����塣
��WM_CREATEѶϢ�����ڼ䣬POPFONT.C�е�POPPAD����PopFontInitialize�������ʽȡ��һ������ϵͳ���彨����LOGFONT�ṹ���ɴ˽���һ�����壬����à¼ï¿½ï¿½ï¿½ï¿½ï¿½î·¢ï¿½ï¿½Ò»ï¿½ï¿½WM_SETFONTѶϢ���趨һ���µ����壨�ڶ��à¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ÏµÍ³ï¿½ï¿½ï¿½å£¬ï¿½ï¿½PopFontInitializeΪ�à¼ï¿½ï¿½ï¿½ï¿½ï¿½î½¨ï¿½ï¿½Ò»ï¿½ï¿½ï¿½Âµï¿½ï¿½ï¿½ï¿½å£¬ï¿½ï¿½Îªï¿½ï¿½ï¿½Õ¸ï¿½ï¿½ï¿½ï¿½å½«ï¿½ï¿½É¾ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½É¾ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ÏµÍ³ï¿½ï¿½ï¿½ï¿½ï¿½Ç²ï¿½ï¿½ï¿½ï¿½ÇµÄ£ï¿½ï¿½ï¿½
��POPPAD�յ����Գ�ʽ������ѡ���WM_COMMANDѶϢʱ��������PopFontChooseFont�������ʽ��ʼ��һ��CHOOSEFONT�ṹ��Ȼ�����ChooseFont��ʾ����ѡ��Ի����顣���ʹ���߰��¡�OK����ť����ôChooseFont������TRUE�����ᣬPOPPAD����PopFontSetFont���趨�à¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ðµï¿½ï¿½ï¿½ï¿½ï¿½ï¿½å£¬ï¿½ï¿½ï¿½ï¿½ï¿½å½«ï¿½ï¿½É¾ï¿½ï¿½ï¿½ï¿½
���ᣬ��WM_DESTROYѶϢ�����ڼ䣬POPPAD����PopFontDeinitialize��ɾ�����һ����PopFontSetFont���������塣
��Ѱ���滻
��
ͨ�öԻ������ʽ��Ҳ�ṩ�������������Ѱ���滻��ʽ�ĶԻ����飬��������ʽ��FindText��ReplaceText��ʹ��һ����̬ΪFINDREPLACE�Ľṹ��ͼ10-11����ʾ��POPFIND.C������������ʽ��PopFindFindDlg��PopFindReplaceDlg��������Щ��ʽ������������ʽ�ڱà¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ñ°ï¿½ï¿½ï¿½æ»»ï¿½ï¿½ï¿½Ö¡ï¿½
ʹ����Ѱ���滻��ʽ��һЩ���ǡ����ȣ����������ĶԻ������Ƿ�ģ̬�Ի����飬����ζ�������дѶϢ��Ȧ���Ա��ڶԻ�����ʱ����IsDialogMessage���ڶ������͸�FindText��ReplaceText��FINDREPLACE�ṹ������һ����̬��������Ϊ�Ի�������ģ̬�ģ���ʽ�ڶԻ�������ʾ֮�ᴫ�أ��������ڶԻ��������֮�ᴫ�أ����Ի�������������Ȼ�ܹ���ȡ�ýṹ��
����������ʾFindText��ReplaceText�Ի�����ʱ������ͨ��һ������ѶϢ��ӵ�����Ӵ����磬ѶϢ��ſ���ͨ����FINDMSGSTRINGΪ��������RegisterWindowMessage��ʽ����á�������WndProc�д���WM_CREATEѶϢʱ��ɵģ�ѶϢ�Ŵ���ھ�̬�����С�
�ڴ����ڶ�ѶϢʱ��WndProc��ѶϢ������RegisterWindowMessage���ص�ֵ��Ƚϡ�lParamѶϢ������һ��ָ��FINDREPLACE�ṹ��ָ�꣬Flags��λָʾʹ����ʹ�öԻ�������Ϊ����Ѱ���ֻ����滻���֣��Լ��Ƿ�Ҫ��ֹ�Ի����顣POPPAD3�Ǻ���POPFIND.C�е�PopFindFindText��PopFindReplaceText��ʽ��ִ����Ѱ���滻���ܵġ�
ֻ����һ����ʽ��Windows��ʽ
��
������Ϊֹ�������Ѿ�˵����������ʽ���������ѡ����ɫ����������ʽ�ֱ��ǵھ����е�COLORS1�ͱ����е�COLORS2�������ǽ���COLORS3��ʱ���ˣ������ʽֻ��һ��Windows��ʽ���С�COLORS3��Ôʼ�����ʽ11-7��ʾ��
COLORS3�����е�ΨһWindows��ʽ��ChooseColor����Ҳ��ͨ�öԻ������ʽ���еĺ�ʽ������ʾ��ͼ11-7��ʾ�ĶԻ����顣��ɫѡ�������COLORS1��COLORS2����������ʹ���߽�̸����������ǿ��
��ʽ11-7 COLORS3 COLORS3.C /*------------------------------------------------------------------------- COLORS3.C -- Version using Common Dialog Box (c) Charles Petzold, 1998 --------------------------------------------------------------------------*/ #include <windows.h> #include <commdlg.h> int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static CHOOSECOLOR cc ; static COLORREF crCustColors[16] ; cc.lStructSize = sizeof (CHOOSECOLOR) ; cc.hwndOwner = NULL ; cc.hInstance = NULL ; cc.rgbResult = RGB (0x80, 0x80, 0x80) ; cc.lpCustColors = crCustColors ; cc.Flags = CC_RGBINIT | CC_FULLOPEN ; cc.lCustData = 0 ; cc.lpfnHook = NULL ; cc.lpTemplateName = NULL ; return ChooseColor (&cc) ; }
��
ͼ11-7 COLORS3��өĻ��ʾ |
ChooseColor��ʽʹ��һ��CHOOSECOLOR��̬�Ľṹ�ͺ���16��DWORD����������ų�����ɫ��ʹ���߽��ӶԻ�������ѡ����Щ��ɫ֮һ��rgbResult��λ���Գ�ʼ��Ϊһ����ɫֵ�����Flags��λ��CC_RGBINIT��걻����������ʾ����ɫ��ͨ����ʹ�������ʽʱ��rgbResult�����趨Ϊʹ����ѡ�����ɫ��
��ע�⣬Color�Ի������hwndOwner��λ���趨ΪNULL����ChooseColor��ʽ����DialogBox����ʾ�Ի�����ʱ��DialogBox�ĵ���������Ҳ���趨ΪNULL��������ȫ�Ϸ��ģ��京���ǶԻ����鲻Ϊ��һ���Ӵ���ӵ�С��Ի�����ı��⽫��ʾ�ڹ������У����Ի��������һ����ͨ���Ӵ�����ִ�С�
��Ҳ�������Լ���ʽ�ĶԻ�������ʹ�����ּ��ɡ�ʹWindows��ʽֻ�����Ի����飬�������鶼�ڶԻ������������ɣ����ǿ��ܵġ�