创建对话框程序

本文展示了一个使用Windows API创建对话框的应用实例。通过代码详细介绍了如何初始化对话框、处理键盘输入及不同消息响应,包括WM_INITDIALOG、WM_KEYDOWN、WM_COMMAND等。此外还演示了如何居中显示对话框窗口。

 


// PeShell.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "resource.h"  


BOOL InitDialog(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);  
BOOL CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);  
 
int APIENTRY WinMain(HINSTANCE hInstance,  
    HINSTANCE hPrevInstance,  
    LPSTR     lpCmdLine,  
    int       nCmdShow)  
{  
 HWND hWndDlg = NULL;  
 MSG msg;  

 hWndDlg = CreateDialogParam(hInstance,
        MAKEINTRESOURCE(IDD_DIALOG_MAIN),
        NULL,
        DialogProc,
        NULL);  
 if(hWndDlg == NULL)  
 {  
  MessageBox(NULL, "创建对话框失败.", "", MB_OK);  
  return 0;  
 }  
 
 RECT rtDlg;  
 GetWindowRect(hWndDlg, &rtDlg);  

 int nScreenX = GetSystemMetrics(SM_CXSCREEN);  
 int nScreenY = GetSystemMetrics(SM_CYSCREEN);  
 
 SetWindowPos(hWndDlg,   
    HWND_TOP,   
    nScreenX / 2 - rtDlg.right / 2,  
    nScreenY / 2 - rtDlg.bottom / 2,  
    0,  
    0,  
    SWP_NOSIZE | SWP_SHOWWINDOW); //SWP_NOSIZE)  

 while(GetMessage(&msg, NULL, NULL, NULL))  
 {  
  if(msg.message == WM_KEYDOWN)  
  {  
   SendMessage(hWndDlg, msg.message, msg.wParam, msg.lParam);  
  }  
  else if(!IsDialogMessage(hWndDlg, &msg))// 如果消息没有被处理, 返回值为0  
  {  
   TranslateMessage(&msg);  
   DispatchMessage(&msg);  
  }  
 }  

 return msg.wParam;  
}  

 

BOOL InitDialog(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)  
{  
/* 
 响应WM_INITDIALOG消息时,如果函数调用SetFocus设置对话 
 框中控制中的一个焦点, 则对话框应用程序应该返回零值,否则对 
 话框应用程序应该返回非零值在,这种情况下系统对能够有焦点的 
 对话框中的第一个控制设置焦点。  
 */ 
 return TRUE;  
}  

 
BOOL CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)  
{  
 switch(uMsg)  
 {  
 case WM_INITDIALOG:  
  return InitDialog(hWnd, uMsg, wParam, lParam);  
     
 case WM_KEYDOWN:  
  break;                
 
 case WM_COMMAND:  
  if(LOWORD(wParam) == IDOK)  
  {  
   //  MessageBox(hWnd, "确定", "", MB_OK);  
  }  
  else if(LOWORD(wParam) == IDCANCEL)  
  {  
   DestroyWindow(hWnd);      
  }  
  return TRUE;  
 case WM_CLOSE:  
  DestroyWindow(hWnd);  
  return TRUE;  
   
 case WM_DESTROY:  
  PostQuitMessage(0);  
  return TRUE;  
 }  

 return FALSE;   // 如果函数不处理消息,则对话框应用程序应该返回零值。   
}


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值