消息对话框
//一。应用程序类
CDlogApp theApp;
//唯一的应用程序类CDlogApp的实例对象
BOOL CDlog::InitInstance() //应用程序初始化 {
AfxEnableControcontainer(); //标准初始化
CDlog dlg; //主对话框类实例对象
m_pMainWnd = &dlg; //赋给应用程序类成员
int nResponse = dlg.DoModal(); //显示主对话框窗口
return FALSE;
}
//二。主对话框窗口类
//包含构造
CDlogDlg,数据交换函数DoDataExchange,初始化对话框函数OnInitDialog,绘制函数OnPaint 等。
CDlogDlg::CDlogDlg(CWnd* pParent/*=NULL*/) //构造函数
:CDialog(CDlogDlg::IDD,pParent) {
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
//载入对话框窗口图标
}
//动态数据交换
Void CDlogDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX); }
//初始化对话框
BOOL CDlogDlg::OnInitDialog() {
CDialog::OnInitDialog();
//将About菜单项添加到系统菜单
//设置对话框图标
//在此添加初始化代码
return TRUE;
}
//系统命令消息响应函数
BOOL CDlogDlg::OnSysCommand(UINT nID,LPARAM IParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID,IParam);
}
}
//窗口绘制
void CDlogDlg::OnPaint()
{
If(IsIconic()) //包含图标
{
CPaintDC dc(this); //CPaintDC实例
SendMessage(WM_ICONERASEBKGND,
(WPARAM)dc.GetSafeHdc(),0); //发送消息
//将图标放置在客户区中间
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width()-cxIcon+1)/2;
int y = (rect.Height()-cyIcon+1)/2;
dc.DrawIcon(x,y,m_hIcon); //绘制图标
}
else //未包含图标
{
CDialog::OnPaint();
}
}
HCURSOR CDlogDlg::OnQueryDragIcon()
{
return (HCURSOR)m_hIcon; }
三。消息对话框
Int MessageBox
(
LPCTSTR lpszText, //提示信息内容
LPCTSTR lpszCaption, //消息对话框标
UINT nType //消息对话框的样式 );
//消息对话框样式
MB_ICONHAND、MB_ICONSTOP、MB_ICONERROR MB_ICONEXCLAMATION、MB_ICONWARNING MB_ICONQUESTION
MB_ICONASTERISK、MB_ICONINFORMATION
//消息对话框按钮类型
MB_OK
MB_OKCANCEL
MB_YESNO
MB_YESNOCANCEL
MB_RETRYCANCEL
MB_ABORTRETRYINGNORE
//消息对话框返回值及其含义
返回值 含义 IDABORT 单击Abort(放弃)按钮 IDCANCEL 单击Cancel(取消)按钮 IDIGNORE 单击Ignore(忽略)按钮 IDNO 单击No(否)按钮 IDOK 单击Ok(确定)按钮 IDRETRY 单击Retry(重试)按钮 IDYES 单击Yes(确定)按钮
//消息对话框的其他样式
样式参数 样式说明 MB_DEFBUTTONx 设置第x个按钮为默认按钮,其中x=1~4
MB_HELP 添加“希望”按钮
MB_RIGHT 提示信息内容右对齐 MB_SETFORGROUND 消息对话框显示在桌面的最前面 MB_TOPMOST 消息对话框总显示在桌面的最前面 四(公用对话框
由CCommonDialog派生而来
1(文件对话框
文件对话框(CFileDialog)可以实现Windows标准的Open(打开),Save As(保存)对话框。CFileDialog类对象构造如下: CFileDialog(
BOOL bOpenFileDialog, //文件对话框类型 LPCTSTR lpszDefExt = NULL, //默认文件扩展名 LPCTSTR lpszFileName = NULL, //文件名
DWORD dwFlags =
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, //文件造作标记
LPCTSTR lpszFilter = NULL, //过滤器
CWnd* pParentWnd = NULL //父窗口指针
);
CfileDialog提供了以下若干成员函数,用于获取文件信息 CString GetPathName:返回所选文件的完整路径。 CString GetFileName:返回所选文件的完整名称。 CString GetFileExt:返回所选文件的扩展名。
CString GetFileTitle:返回所选文件的标题名。 2(“字体”对话框
CFontDialog(
LPLOGFONT lplfInitial = NULL, //初始化字符字体 DWORD dwFlags = CF_EFFECTS|CF_SCREENFONTS,
//字体选择标记 CDC* pdcPrinter = NULL, //打印设备 CWnd* pParentWnd = NULL //父窗口指针 )
CFontDialog提供了以下若干成员函数,用于获取字体信息 void GetCurrentFont:返回当前所选的字体
CString GetFaceName:返回所选字体的字体名称 CString GetStyleName:返回所选字体的样式名称 Int GetSize:返回所选字体的大小
COLORREF GetColor:返回所选字体的颜色 int GetWeight:返回所选字体的磅数
BOOL IsStrikeOut:确定字体是否带有删除线 BOOL IsUnderLine:确定字体是否带有下划线 BOOL IsBold:确定字体是否为粗体
BOOL IsItalic:确定字体是否为斜体
3(“颜色”对话框
CColorDialog(
COLORREF cleInit =0, //默认选择的颜色 DWORD dwFlags = 0, //颜色选择标记 CWnd* pParentWnd = NULL //父窗口指针 );
COLORREF GetColor:返回当前选择的颜色 COLORREF* GetSavedCustomColors:返回所选的颜色 Void SetCurrentColor:设置当前的颜色
BOOL OnColorOK:验证输入到对话框中的颜色 4(“页面设置”对话框
CpageSetupDialog(
//定制页面,设置对话框标记
DWORD dwFlags =
PSD_MARGINS|PSD_INWINININTLMEASURE,
//父窗口指针
CWnd* pParentWnd = NULL )
CString GetDeviceName:返回所选打印机的设备名称 LPDEVMODE GetDevMode:返回所选打印机的设备模式 CString GetDriverName:返回所选打印机的设备驱动 CString GetPortName:返回所选打印机的输出端口名称 CSize GetPaperSize:返回所选打印机的页面大小 Void GetMargins:返回所选打印机的边距
5(“打印”对话框
CPrintDialog(
BOOL bPrintSetupOnly, //是否带设置对话框 DWORD dwFlags =
PD_ALLPAGES|PD_USEDEVMODECOPIES|PD_NOPAGENUMS
PD_HIDEPRINTTOFILE|PD_NOSELECTION
CWnd* pParentWnd = NULL //父窗口指针 );
Int GetCopies:返回请求的副本数
BOOL GetDefaults:返回默认的设备
Int GetFromPage:返回打印范围的开始页
Int GetToPage:返回打印范围的结束页
HDC GetPrinterDC: 返回打印设备句柄
BOOL PrintAll: 确定是否打印全部文档
BOOL PrintCollate: 确定是否自动分页
BOOL PrintRange:确定是否仅打印页面的制定范围 BOOL PrintSelection:确定是否进打印当前选择的项目 6(“查找替换”对话框
CFindReplaceDialog( BOOL Create(
BOOL bFindDialogOnly, //显示“查找”或“查找替换”对话框
LPCTSTR lpszFindWhat, //指定搜索的字符串
LPCTSTR lpszReplaceWith = NULL, //指定替换字符串 DWORD dwFlags = FR_DOWN, //定制查找替换标记 CWnd* pParentWnd = NULL //父窗口指针
)
);
BOOL FindNext:搜索下一个匹配的字符串
CFindReplaceDialog* PASCAL GetNotifier:返回当前对话框的指针 CString GetFindString:返回搜索的默认字符串
CString GetReplaceString: 返回替换字符串
BOOL IsTerminating: 确定是否终止了对话框
BOOL MathCase: 确定字符串是否大小写完全匹配
BOOL MathWholeWord: 确定字符串是否整字匹配
BOOL ReplaceAll: 确定是否全部替换所有搜索到的字符串 BOOL ReplaceCurrent:确定是否替换当前字符串
BOOL SearchDown: 确定是否向下搜索
五(标准消息
1(Windows消息
消息类型,从功能上大致可分为以下3种:
A(标准消息:以WM_为前缀的消息。除了(WM_COMMAND)。 B(命令消息:以WM_COMMAND为消息名称,在消息中包含有命令的标识符和ID,用以区分菜单栏,工具栏,快捷键。 C(通知消息:以WM_COMMAND为消息名称,是Windows窗口中
的控件或子窗口发送给父窗口的通知消息。 2(消息处理
A(消息响应
Windows将每个事件都封装成一个称为消息的结构体MSG中,并将
其传递给应用程序。定义如下:
Typedef struct tagMSG{ //MSG结构体 HWND hwnd; //接收消息的窗口句柄 UINT message; //消息标记号 WPARAM wParam; //消息的WPARAM参数 LPARAM lParam; //消息的LPARAM参数 DWORD time; //制定消息发送的时间 POINT pt; //指定光标位置 }MSG;
B(消息映射
B(1在类的定义中添加一行宏调用
Class CDlogApp::public CwinApp
{
DECLARE_MESSAGE_MAP() //宏调用 }
B(2在类的实现中添加消息映射
BEGIN_MESSAGE_MAP(CDlogApp,CWinApp)
//消息映射表开始
ON_COMMAND(ID_APP_ABOUT,OnAppAbout) //消息映射入口
END_MESSAGE_MAP()
C(消息响应函数
C(1在类的定义中添加该消息函数的函数声明 Afx_msg void OnAppAbout() {}
3(键盘消息
WM_CHAR:放下并放开一个键,输入了一个字符 WM_KEYDOWN:按下一个键
WM_KEYUP:释放一个键
WM_CHAR的消息响应函数为OnChar,声明如下: Afx_msg void OnChar( UINT nChar, //按键的字符代码
UINT nRepCnt, //按键的重复次数
UINT nFlag //扫描码、先前建状态、键转换状态等 )
4(鼠标消息
WM_LBUTTONDOWN:按下鼠标左键
WM_LBUTTONUP:释放鼠标左键
WM_LBUTTONDBLCLK:双击鼠标左键
WM_RBUTTONDOWN:按下鼠标右键
WM_RBUTTONUP:释放鼠标右键
WM_RBUTTONDBLCLK:双击鼠标右键
WM_MOUSEMOVE:移动鼠标
Afx_msg void OnLButtonDown(
UINT nFlags, //虚拟键是否被按下
CPoint point //光标的位置(基于设备坐标系) )
5(窗口消息
WM_CHREATE:创建窗口,可加入初始化代码 WM_CLOSE:关闭窗口之前
WM_DESTROY:销毁窗口之前
WM_PAINT:重绘窗口
WM_SIZE:改变窗口大小
WM_MOVE:移动窗口
Afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct
);
Afx_msx void OnPaint(); Afx_msg void OnSize( UINT nType //改变大小的类型
Int cx, //新窗口客户去的宽度
Int cy //新窗口客户去的高度
);
Afx_msg void OnMove( Int cx, //窗口新位置的x坐标
Int cy //窗口新位置的y坐标
);
6(定时消息
WM_TIMER定时器消息函数声明
UINT SetTimer(
UINT nIDEvent, //非零的事件标识
UINT nElapse, //计时器间隔时间
Void(CALLBACK EXPORT* lpfnTimer)(HWND,UINT,UINT,DWORD)
);
Afx_msg void OnTimer( UINT nIDEvent //SetTimer函数制定的事件标识 );
7(命令消息
当用户选择一个菜单命令、单击一个工具栏按钮或按下一个快捷键
时,就会产生消息WM_COMMAND BEGIN_MESSAGE_MAP(CDlogApp,CWinApp)
//消息映射表开始
ON_COMMAND(ID_APP_ABOUT,OnAppAbout) //消息映射入口
ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen) ON_COMMAND(ID_FILE_PRINT_SETUP,CWinApp::OnFilePrintSetUp)
END_MESSAGE_MAP()
可以看到,命令消息影射的一半形式如下:
ON_COMMAND(ID_XXX,OnXXX)
其中ID_XXX为该命令消息响应函数对应的菜单、工具栏按钮或快
捷键标识的ID