MOOC清华《VC++面向对象与可视化程序设计》第5章:对话框资源例程(非模态对话框样例)

来源:互联网 发布:单片机点亮led灯程序 编辑:程序博客网 时间:2024/06/07 14:12
#include <windows.h>                      #include "001.h"HWND hdlg; //对话框句柄HINSTANCE hInst;LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow){HWND hwnd ;MSG Msg ;HACCEL hAccel;WNDCLASS wndclass ;char lpszMenuName[]="Menu";char lpszClassName[] = "非模态对话框"; char lpszTitle[]= "非模态对话框演示程序";wndclass.style = 0;                   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 = (HBRUSH)GetStockObject( WHITE_BRUSH) ;       wndclass.lpszMenuName =  lpszMenuName ;                           wndclass.lpszClassName = lpszClassName ;                   if( !RegisterClass( &wndclass))       {  MessageBeep(0) ;  return FALSE ;}hwnd = CreateWindow(lpszClassName,     lpszTitle,     WS_OVERLAPPEDWINDOW,   CW_USEDEFAULT,                    CW_USEDEFAULT,                CW_USEDEFAULT,                CW_USEDEFAULT,    NULL,       NULL,      hInstance,    NULL) ;      ShowWindow( hwnd, nCmdShow) ;UpdateWindow(hwnd); hInst=hInstance;hAccel=LoadAccelerators(hInst,lpszMenuName);      while( GetMessage(&Msg, NULL, 0, 0)){      //截获非模态对话框消息并发往处理函数if(!IsDialogMessage(hdlg,&Msg)) { if(!TranslateAccelerator(hwnd,hAccel,&Msg))   {TranslateMessage( &Msg) ;DispatchMessage( &Msg) ;   } }   }   return Msg.wParam;      }    LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM  wParam,LPARAM  lParam){ switch(message) {   case WM_COMMAND:switch(LOWORD(wParam))  {case IDM_NEW:MessageBox(hwnd,"文件创建成功!","文件创建",MB_OK);   break;  case IDM_OPEN:MessageBox(hwnd,"文件打开成功!","文件打开",MB_OK);   break;case IDM_SAVE:MessageBox(hwnd,"文件保存成功!","文件保存",MB_OK);   break;case IDM_EXIT:SendMessage(hwnd,WM_DESTROY,0,0);   break;    case IDM_ABOUT://调用函数CreateDialog创建非模态对话框hdlg=CreateDialog(hInst,"About",hwnd,(DLGPROC)DlgProc);    break;     } break;  case WM_DESTROY:             PostQuitMessage(0);        break;     default:                       return  DefWindowProc(hwnd,message,wParam,lParam);  }  return 0;}//对话框窗口处理函数BOOL CALLBACK DlgProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam){ switch(message) {  case WM_INITDIALOG://初始化消息框 return 1;  case WM_COMMAND://处理消息框消息switch (LOWORD(wParam)){ case IDOK:   DestroyWindow( hdlg) ;    }    break;  case WM_CLOSE:DestroyWindow( hdlg) ;    break;  }  return 0;     }


#define IDM_NEW 10#define IDM_OPEN 11#define IDM_SAVE 13#define IDM_EXIT 15#define IDM_ABOUT 20

#include <windows.h>#include "001.h"Menu MENU DISCARDABLE {  POPUP "文件(&F)"{     MENUITEM "新建(&N)\t Ctrl+N",           IDM_NEW  MENUITEM "打开(&O)\t Ctrl+O",           IDM_OPEN      MENUITEM SEPARATOR                                 MENUITEM "保存(&S)\t Ctrl+S",            IDM_SAVE      MENUITEM SEPARATOR                                 MENUITEM "退出(&X)",                    IDM_EXIT    }   POPUP "帮助(&H)"  {  MENUITEM "关于(&A)...",                 IDM_ABOUT  }}Menu ACCELERATORS  {"^N",             IDM_NEW                  "^O",             IDM_OPEN                  "^S",             IDM_SAVE                 }About DIALOG  50, 50, 100, 50STYLE DS_MODALFRAME|WS_POPUP | WS_CAPTION | WS_SYSMENU|WS_VISIBLE//非模态对话框                                            //的风格中应包含WS_VISIBLECAPTION "关于"FONT 12, "楷体"{CTEXT           "Windows对话框示例",-1,13,10,80,10DEFPUSHBUTTON   "确定",IDOK,35,30,30,12}


阅读全文
0 0
原创粉丝点击