好文档 - 专业文书写作范文服务资料分享网站

Visual - C++MFC入门教程(免费版)

天下 分享 时间: 加入收藏 我要投稿 点赞

木有页眉

\\n前的字符串将显示在状态条中作为命令解释,\\n后的部分将作为具有相同ID的工具条按钮的提示显示在ToolTip窗口中。

修改Dialog Bar:在Dialog Bar中添加一个输入框和按钮,按钮的ID为IDM_SHOW_TXT与一个菜单项具有相同的ID,这样可以利用映射菜单消息来处理按钮消息(当然使用不同ID值也可以利用ON_COMMAND来映射Dialog Bar上的按钮消息,但是ClassWizard没有提供为Dialog Bar上按钮进行映射的途径,只能手工添加消息映射代码)。图例

修改工具条:在工具条中添加两个按钮,ID值为IDM_CHECK和IDM_DISABLE和其中两个菜单项具有相同的ID值。图例

利用ClassWizard为三个菜单项添加消息映射和更新命令。图例

46

木有页眉

修改MainFrm.h文件

//添加一个成员变量来记录工具条上Check按钮的检查状态。 protected: BOOL m_fCheck;

//手工添加状态条第二部分用于显示时间的更新命令,和用于禁止/允许输入框的更新命令 //{{AFX_MSG(CMainFrame) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnCheck(); afx_msg void OnUpdateCheck(CCmdUI* pCmdUI); afx_msg void OnDisable(); afx_msg void OnUpdateDisable(CCmdUI* pCmdUI); afx_msg void OnShowTxt(); afx_msg void OnUpdateShowTxt(CCmdUI* pCmdUI); //}}AFX_MSG //上面的部分为ClassWizard自动产生的代码 afx_msg void OnUpdateTime(CCmdUI* pCmdUI); //显示时间 afx_msg void OnUpdateInput(CCmdUI* pCmdUI); //禁止/允许输入框 修改MainFrm.cpp文件

//修改状态条上各部分ID #define ID_TIME 0x705 //作为状态条上第二部分ID static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_SEPARATOR,

//先设置为ID_SEPARATOR,在状态条创建后再进行修改 };

//修改消息映射 //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_COMMAND(IDM_CHECK, OnCheck) ON_UPDATE_COMMAND_UI(IDM_CHECK, OnUpdateCheck) ON_COMMAND(IDM_DISABLE, OnDisable) ON_UPDATE_COMMAND_UI(IDM_DISABLE, OnUpdateDisable) ON_COMMAND(IDM_SHOW_TXT, OnShowTxt) ON_UPDATE_COMMAND_UI(IDM_SHOW_TXT, OnUpdateShowTxt) //}}AFX_MSG_MAP //以上部分为ClassWizard自动生成代码 ON_UPDATE_COMMAND_UI(ID_TIME, OnUpdateTime) ////显示时间 ON_UPDATE_COMMAND_UI(IDC_INPUT_TEST, OnUpdateInput) //禁止/允许输入框 //修改OnCreate函数,重新设置状态条第二部分ID值

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { .... // by wenyy 修改状态条上第二部分信息

47

木有页眉

m_wndStatusBar.SetPaneInfo(1,ID_TIME,SBPS_NORMAL,60);//set the width return 0; }

//修改经过映射的消息处理函数代码 void CMainFrame::OnCheck() { //在Check按钮被按下时改变并保存状态 m_fCheck=!m_fCheck; }

void CMainFrame::OnUpdateCheck(CCmdUI* pCmdUI) { //Check按钮是否设置为检查状态 pCmdUI->SetCheck(m_fCheck); }

void CMainFrame::OnDisable() { //Disable按钮被按下 AfxMessageBox(\ }

void CMainFrame::OnUpdateDisable(CCmdUI* pCmdUI) { //根据Check状态决定自身禁止/允许状态 pCmdUI->Enable(m_fCheck); }

void CMainFrame::OnShowTxt() { //得到Dialog Bar上输入框中文字并显示 CEdit* pE=(CEdit*)m_wndDlgBar.GetDlgItem(IDC_INPUT_TEST); CString szO; pE->GetWindowText(szO); AfxMessageBox(szO); }

void CMainFrame::OnUpdateShowTxt(CCmdUI* pCmdUI) { //Dialog Bar上按钮根据Check状态决定自身禁止/允许状态 pCmdUI->Enable(m_fCheck); }

void CMainFrame::OnUpdateInput(CCmdUI* pCmdUI) { //Dialog Bar上输入框根据Check状态决定自身禁止/允许状态

48

木有页眉

pCmdUI->Enable(m_fCheck); }

void CMainFrame::OnUpdateTime(CCmdUI* pCmdUI) { //根据当前时间设置状态条上第二部分文字 CTime timeCur=CTime::GetCurrentTime(); char szOut[20]; sprintf( szOut, \ timeCur.GetMinute(),timeCur.GetSecond()); pCmdUI->SetText(szOut); }

4.E General Window

从VC提供的MFC类派生图中我们可以看出窗口的派生关系,派生图,

所有的窗口类都是由CWnd派生。所有CWnd的成员函数在其派生类中都可以使用。本节介绍一些常用的功能给大家。

49

木有页眉

改变窗口状态:

BOOL EnableWindow( BOOL bEnable = TRUE );可以设置窗口的禁止/允许状态。BOOL IsWindowEnabled( );可以查询窗口的禁止/允许状态。

BOOL ModifyStyle( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 )/BOOL ModifyStyleEx( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 );可以修改窗口的风格,而不需要调用SetWindowLong BOOL IsWindowVisible( ) 可以检查窗口是否被显示。

BOOL ShowWindow( int nCmdShow );将改变窗口的显示状态,nCmdShow可取如下值:

? ? ? ? ?

SW_HIDE 隐藏窗口

SW_MINIMIZE SW_SHOWMAXIMIZED 最小化窗口 SW_RESTORE 恢复窗口 SW_SHOW 显示窗口

SW_SHOWMINIMIZED 最大化窗口

改变窗口位置:

void MoveWindow( LPCRECT lpRect, BOOL bRepaint = TRUE );可以移动窗口。 void GetWindowRect( LPRECT lpRect ) ;可以得到窗口的矩形位置。 BOOL IsIconic( ) ;可以检测窗口是否已经缩为图标。

BOOL SetWindowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags );可以改变窗口的Z次序,此外还可以移动窗口位置。

使窗口失效,印发重绘:

void Invalidate( BOOL bErase = TRUE );使整个窗口失效,bErase将决定窗口是否产生重绘。

void InvalidateRect( LPCRECT lpRect, BOOL bErase = TRUE )/void InvalidateRgn( CRgn* pRgn, BOOL bErase = TRUE );将使指定的矩形/多边形区域失效。

窗口查找:

static CWnd* PASCAL FindWindow( LPCTSTR lpszClassName, LPCTSTR lpszWindowName );可以以窗口的类名和窗口名查找窗口。任一参数设置为NULL表对该参数代表的数据进行任意匹配。如FindWindow(\表明查找类名为MyWnd的所有窗口。 BOOL IsChild( const CWnd* pWnd ) 检测窗口是否为子窗口。 CWnd* GetParent( ) 得到父窗口指针。

CWnd* GetDlgItem( int nID ) 通过子窗口ID得到窗口指针。 int GetDlgCtrlID( ) 得到窗口ID值。

static CWnd* PASCAL WindowFromPoint( POINT point );将从屏幕上某点坐标得到包含该点的窗口指针。 static CWnd* PASCAL FromHandle( HWND hWnd );通过HWND构造一个CWnd*指针,但该指针在空闲时会被删除,所以不能保存供以后使用。

时钟:

UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );可以创建一个时钟,如果lpfnTimer回调函数为NULL,窗口将会收到WM_TIMER消息,并可以在afx_msg void OnTimer( UINT nIDEvent );中安排处理代码 BOOL KillTimer( int nIDEvent );删除一个指定时钟。

可以利用重载来添加消息处理的虚函数:

afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct );窗口被创建时被调用 afx_msg void OnDestroy( );窗口被销毁时被调用

50

Visual - C++MFC入门教程(免费版)

木有页眉\\n前的字符串将显示在状态条中作为命令解释,\\n后的部分将作为具有相同ID的工具条按钮的提示显示在ToolTip窗口中。修改DialogBar:在DialogBar中添加一个输入框和按钮,按钮的ID为IDM_SHOW_TXT与一个菜单项具有相同的ID,这样可以利用映射菜单消息来处理按钮消息(当然使用不同ID值也可以利用ON_COMMAND来映
推荐度:
点击下载文档文档为doc格式
5sv4n9qpyw5s23r4ajle
领取福利

微信扫码领取福利

微信扫码分享