友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

C语言实例教程(PDF格式)-第42章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!





…………………………………………………………Page 189……………………………………………………………

在WM_SYSMAND消息中,参数nID的低4位由Windows内部使用,当应 

用程序测试nID的值时,必须使用按位与(bitwise…AND)操作符组合值 

0xFFF0和nID来得到正确的结果。  



应用程序可以在任何时候通过传递一个WM_SYSMAND消息给成员函 

数OnSysmand来执行任何系统命令。  



已被定义为用来选择控制菜单项的加速键 (快捷键)消息将解释为 

OnSysmand的调用,其它快捷键将翻译为WM_MAND消息。  



  l 注意:  



  l 控制菜单项可以通过成员函数GetSystemMenu、AppendMenu、 

   InsertMenu以及ModifyMenu来进行修改。修改了控制菜单的应用 

   程序必须处理WM_SYSMAND消息,所有未被应用程序处理的消息 

   必须传递给成员函数OnSysmand。由应用程序添加的命令值必 

   须由应用程序处理,而不能传递给函数OnSysmand。  



  l 该成员函数由框架所调用,以允许应用程序处理Windows消息。传 

   递给函数的消息代表了当获得消息时由框架获得的参数。如果你 

   调用了基类的实现,该实现将使用消息最初传递的参数,而不是 

   由函数提供的参数。  



成员函数OnPaint是消息WM_PAINT的处理函数,它当窗口客户区需要 

重绘时被调用。  



成员函数OnQueryDragIcon对应于消息WM_QUERYDRAGICON,它也是由 

框架在最小化窗口而没有为类定义一个图标时调用。系统通过对该函 

数的调用来获得当用户拖动被最小化的窗口时用来显示的光标。  



如果应用程序返回了一个图标名光标的句柄,系统将其转换了黑白 

的。该句柄必须标识一个与显示驱动程序分辨率相兼容的单色光标或 

图标。应用程序可以调用CWinApp::LoadCursor或CWinApp::LoadIcon 

成员函数来从它的可执行文件中的资源内加载一个光标或图标并获得 

其句柄。  



下面给出类CDialogDemoDlg的实现文件DialogDemoDlg。cpp的清单:  



// DialogDemoDlg。cpp : 实现文件  



//  



#include 〃stdafx。h〃  


…………………………………………………………Page 190……………………………………………………………

#include 〃DialogDemo。h〃  



#include 〃DialogDemoDlg。h〃  



#ifdef _DEBUG  



#define new DEBUG_NEW  



#undef THIS_FILE  



static char THIS_FILE'' = __FILE__;  



#endif  



/////////////////////////////////////////////////////////////////////////////  



// CAboutDlg 用于 App About 的对话框  



class CAboutDlg : public CDialog  



{  



public:  



CAboutDlg();  



// Dialog Data  



//{{AFX_DATA(CAboutDlg)  



enum { IDD = IDD_ABOUTBOX };  



//}}AFX_DATA  



// 由 ClassWizard 生成的虚函数重载  



//{{AFX_VIRTUAL(CAboutDlg)  



protected:  



virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持  



//}}AFX_VIRTUAL  



// 实现  



protected:  



//{{AFX_MSG(CAboutDlg)  



//}}AFX_MSG  


…………………………………………………………Page 191……………………………………………………………

DECLARE_MESSAGE_MAP()  



};  



CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)  



{  



//{{AFX_DATA_INIT(CAboutDlg)  



//}}AFX_DATA_INIT  



}  



void CAboutDlg::DoDataExchange(CDataExchange* pDX)  



{  



CDialog::DoDataExchange(pDX);  



//{{AFX_DATA_MAP(CAboutDlg)  



//}}AFX_DATA_MAP  



}  



BEGIN_MESSAGE_MAP(CAboutDlg; CDialog)  



//{{AFX_MSG_MAP(CAboutDlg)  



// 没有消息处理函数  



//}}AFX_MSG_MAP  



END_MESSAGE_MAP()  



/////////////////////////////////////////////////////////////////////////////  



// CDialogDemoDlg 对话框  



CDialogDemoDlg::CDialogDemoDlg(CWnd* pParent /*=NULL*/)  



: CDialog(CDialogDemoDlg::IDD; pParent)  



{  



//{{AFX_DATA_INIT(CDialogDemoDlg)  



// 注意:ClassWizard 将在此添加成员初始化  



//}}AFX_DATA_INIT  


…………………………………………………………Page 192……………………………………………………………

// 注意在 Win32 中 LoadIcon 不需要一个相应的 DestroyIcon  



m_hIcon = AfxGetApp()…》LoadIcon(IDR_MAINFRAME);  



}  



void CDialogDemoDlg::DoDataExchange(CDataExchange* pDX)  



{  



CDialog::DoDataExchange(pDX);  



//{{AFX_DATA_MAP(CDialogDemoDlg)  



// 注意:ClassWizard 将在此添加 DDX 和 DDV 调用  



//}}AFX_DATA_MAP  



}  



BEGIN_MESSAGE_MAP(CDialogDemoDlg; CDialog)  



//{{AFX_MSG_MAP(CDialogDemoDlg)  



ON_WM_SYSMAND()  



ON_WM_PAINT()  



ON_WM_QUERYDRAGICON()  



//}}AFX_MSG_MAP  



END_MESSAGE_MAP()  



/////////////////////////////////////////////////////////////////////////////  



// CDialogDemoDlg 消息处理函数  



BOOL CDialogDemoDlg::OnInitDialog()  



{  



CDialog::OnInitDialog();  



// 添加 〃About。。。〃 菜单项到系统菜单  



// IDM_ABOUTBOX 必须在系统命令范围之内  



ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);  



ASSERT(IDM_ABOUTBOX 《 0xF000);  


…………………………………………………………Page 193……………………………………………………………

CMenu* pSysMenu = GetSystemMenu(FALSE);  



if (pSysMenu != NULL)  



{  



CString strAboutMenu;  



strAboutMenu。LoadString(IDS_ABOUTBOX);  



if (!strAboutMenu。IsEmpty())  



{  



pSysMenu…》AppendMenu(MF_SEPARATOR);  



pSysMenu…》AppendMenu(MF_STRING; IDM_ABOUTBOX; strAboutMenu);  



}  



}  



// 该当前对话框设置图标。当应用程序主窗口不为对话框时由框架自动完成该任务  



SetIcon(m_hIcon; TRUE); // 设置大图标  



SetIcon(m_hIcon; FALSE); // 设置小图标  



// TODO: 在此添加额外初始化  



return TRUE; // 除非将焦点设置为某一控件,否则返回 TRUE  



}  



void CDialogDemoDlg::OnSysmand(UINT nID; LPARAM lParam)  



{  



if ((nID & 0xFFF0) == IDM_ABOUTBOX)  



{  



CAboutDlg dlgAbout;  



dlgAbout。DoModal();  



}  



else  



{  


…………………………………………………………Page 194……………………………………………………………

CDialog::OnSysmand(nID; lParam);  



}  



}  



// 如果你向对话框添加了一个最小化按钮,你将需要下面的代码来绘制图标。  



// 对于使用文件/视模型的 MFC 应用程序,这一步由框架自动完成。  



void CDialogDemoDlg::OnPaint()   



{  



if (IsIconic())  



{  



CPaintDC dc(this); // 重绘设备上下文  



SendMessage(WM_ICONERASEBKGND; (WPARAM) dc。GetSafeHdc(); 0);  



// 在窗户区矩形中居中图标  



int cxIcon = GetSystemMetrics(SM_CXICON);  



int cyIcon = GetSystemMetrics(SM_CYICON);  



CRect rect;  



GetClientRect(&rect);  



int x = (rect。Wid
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!