MOOC清華《VC++面向對象與可視化程序設計》第5章:對話框資源例程(模態對話框樣例)

#include <windows.h>                      
#include "001.h"
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 (!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_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:		   //創建對話框
					DialogBox(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:              //關閉對話框  
              EndDialog(hdlg,0) ;
		}
		break ;
    case WM_CLOSE:
        EndDialog(hdlg, 0) ;
	    break ;
    }
    return 0;
}
  


#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 "打開(&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  
     {
       "^O",             IDM_OPEN                  
       "^S",             IDM_SAVE                 
     }

    About DIALOG  10, 10, 100, 50
    STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU
     CAPTION "關於"
     FONT 18, "楷體"  //定義對話框中的文本字體類型及大小
        {
         CTEXT           "Windows模態對話框",-1,13,10,80,10
         DEFPUSHBUTTON   "確定",IDOK,35,30,30,12
        }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章