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

#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, 50
STYLE DS_MODALFRAME|WS_POPUP | WS_CAPTION | WS_SYSMENU|WS_VISIBLE//非模态对话框
                                            //的风格中应包含WS_VISIBLE
CAPTION "关于"
FONT 12, "楷体"
{
	CTEXT           "Windows对话框示例",-1,13,10,80,10
	DEFPUSHBUTTON   "确定",IDOK,35,30,30,12
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值