MFC 界面编程
2011-09-16 18:32
323 查看
在状态兰上的左侧加上向左滚动的文字
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
static int strID = 0; //字符索引
//达到滚动字幕的末尾
if (strID >= (m_text.GetLength() - 1))
{
strID = 0;
}
m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(ID_SEPARATOR), ((LPCSTR) m_text) + strID);
//后移显示的字幕,由于汉字占两位,所以+2
strID = strID + 1;
CFrameWnd::OnTimer(nIDEvent);
}
修改菜单上的文字为位图
m_bitmap.LoadBitmap(IDB_BITMAP1);
CMenu * pMenu=GetMenu();
pMenu->GetSubMenu(4)->ModifyMenu(ID_MENU_BMP, MF_BYCOMMAND, ID_MENU_BMP, &m_bitmap);
修改菜单为复选菜单
void CMainFrame::OnMenu1()
{
m_selected = !m_selected;//更改菜单的选择状态
}
void CMainFrame::OnUpdateMenu1(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_selected);//设置显示菜单的选择状态
}
鼠标点击显示弹出菜单
//单击鼠标右键时的响应函数
void CContextMenuView::OnRButtonDown(UINT nFlags, CPoint point)
{
CMenu contextMenu;
contextMenu.LoadMenu(IDR_CONTEXTMENU);//加载菜单
CMenu *pPopupMenu=contextMenu.GetSubMenu(0);//获得弹出菜单指针
ClientToScreen(&point);//转换鼠标坐标
//弹出菜单
pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd());
CView::OnRButtonDown(nFlags, point);
}
禁用菜单选项
EnableMenu
/////////////////////////////////////////////////////////////////////////////
// CEnableMenuJQView message handlers
void CEnableMenuJQView::OnJQstep1()
{
// TODO: Add your command handler code here
MessageBox("step1 finished!","infor",MB_OKCANCEL);
m_selected=!m_selected;
}
void CEnableMenuJQView::OnJQstep2()
{
// TODO: Add your command handler code here
}
void CEnableMenuJQView::OnUpdateJQstep2(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(m_selected);
}
全屏显示
void CMainFrame::FullScreen()
{
GetWindowPlacement(&m_oldWinPos);
// 得到当前窗口的位置
CRect winRect;
// 窗口区域
GetWindowRect(&winRect);
// 得到窗口区域
CRect rectClient;
RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &rectClient); // 全屏时隐藏所有的控制条
ClientToScreen(&rectClient);
// 将客户坐标映射成屏幕坐标
//获取屏幕分辨率
int fullWidth = GetSystemMetrics(SM_CXSCREEN);
int fullHeight = GetSystemMetrics(SM_CYSCREEN);
//得到全屏显示的窗口位置
m_fullScreenRect.left = winRect.left - rectClient.left;
m_fullScreenRect.top = winRect.top - rectClient.top;
m_fullScreenRect.right = winRect.right - rectClient.right + fullWidth;
m_fullScreenRect.bottom= winRect.bottom - rectClient.bottom + fullHeight;
// 进入全屏显示状态
m_fullScreenFlag = TRUE;
// 设置全屏标志
WINDOWPLACEMENT tmp;
tmp.length = sizeof(WINDOWPLACEMENT);
tmp.flags = 0;
tmp.showCmd = SW_SHOWNORMAL;
tmp.rcNormalPosition = m_fullScreenRect;
SetWindowPlacement(&tmp);
// 将窗口设置到m_fullScreenRect位置上
}
//This member function is called by the framework to allow your //application to handle a Windows message.
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
if(m_fullScreenFlag)
{
lpMMI->ptMaxTrackSize.x = m_fullScreenRect.Width();
//设置最大跟踪宽度
lpMMI->ptMaxTrackSize.y = m_fullScreenRect.Height();
//设置最大跟踪高度
}
CMDIFrameWnd::OnGetMinMaxInfo(lpMMI);
}
// 结束程序窗口全屏显示,恢复窗口原来大小
void CMainFrame::EndFullScreen()
{
if(m_fullScreenFlag)
{
m_fullScreenFlag = FALSE;
// 设置全屏状态为FALSE
SetWindowPlacement(&m_oldWinPos);
// 退出全屏显示, 恢复原窗口显示
}
}
// 得到当前窗口的现实状态
BOOL CMainFrame::GetScreenState()
{
return m_fullScreenFlag;
}
//对按键进行处理
void CFullScreenMDIView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar == VK_F11)
{
// 获取主框架窗口的指针
CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
if(pFrame->GetScreenState()) // 如果现在是全屏状态
{
// 调用主窗口类的自定义函数 EndFullScreen,退出全屏显示状态
pFrame->EndFullScreen();
}
else // 不是全屏状态
{
// 调用主窗口类的自定义函数 FullScreen ,进入全屏显示状态
pFrame->FullScreen();
}
}
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
static int strID = 0; //字符索引
//达到滚动字幕的末尾
if (strID >= (m_text.GetLength() - 1))
{
strID = 0;
}
m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(ID_SEPARATOR), ((LPCSTR) m_text) + strID);
//后移显示的字幕,由于汉字占两位,所以+2
strID = strID + 1;
CFrameWnd::OnTimer(nIDEvent);
}
修改菜单上的文字为位图
m_bitmap.LoadBitmap(IDB_BITMAP1);
CMenu * pMenu=GetMenu();
pMenu->GetSubMenu(4)->ModifyMenu(ID_MENU_BMP, MF_BYCOMMAND, ID_MENU_BMP, &m_bitmap);
修改菜单为复选菜单
void CMainFrame::OnMenu1()
{
m_selected = !m_selected;//更改菜单的选择状态
}
void CMainFrame::OnUpdateMenu1(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_selected);//设置显示菜单的选择状态
}
鼠标点击显示弹出菜单
//单击鼠标右键时的响应函数
void CContextMenuView::OnRButtonDown(UINT nFlags, CPoint point)
{
CMenu contextMenu;
contextMenu.LoadMenu(IDR_CONTEXTMENU);//加载菜单
CMenu *pPopupMenu=contextMenu.GetSubMenu(0);//获得弹出菜单指针
ClientToScreen(&point);//转换鼠标坐标
//弹出菜单
pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd());
CView::OnRButtonDown(nFlags, point);
}
禁用菜单选项
EnableMenu
/////////////////////////////////////////////////////////////////////////////
// CEnableMenuJQView message handlers
void CEnableMenuJQView::OnJQstep1()
{
// TODO: Add your command handler code here
MessageBox("step1 finished!","infor",MB_OKCANCEL);
m_selected=!m_selected;
}
void CEnableMenuJQView::OnJQstep2()
{
// TODO: Add your command handler code here
}
void CEnableMenuJQView::OnUpdateJQstep2(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(m_selected);
}
全屏显示
void CMainFrame::FullScreen()
{
GetWindowPlacement(&m_oldWinPos);
// 得到当前窗口的位置
CRect winRect;
// 窗口区域
GetWindowRect(&winRect);
// 得到窗口区域
CRect rectClient;
RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &rectClient); // 全屏时隐藏所有的控制条
ClientToScreen(&rectClient);
// 将客户坐标映射成屏幕坐标
//获取屏幕分辨率
int fullWidth = GetSystemMetrics(SM_CXSCREEN);
int fullHeight = GetSystemMetrics(SM_CYSCREEN);
//得到全屏显示的窗口位置
m_fullScreenRect.left = winRect.left - rectClient.left;
m_fullScreenRect.top = winRect.top - rectClient.top;
m_fullScreenRect.right = winRect.right - rectClient.right + fullWidth;
m_fullScreenRect.bottom= winRect.bottom - rectClient.bottom + fullHeight;
// 进入全屏显示状态
m_fullScreenFlag = TRUE;
// 设置全屏标志
WINDOWPLACEMENT tmp;
tmp.length = sizeof(WINDOWPLACEMENT);
tmp.flags = 0;
tmp.showCmd = SW_SHOWNORMAL;
tmp.rcNormalPosition = m_fullScreenRect;
SetWindowPlacement(&tmp);
// 将窗口设置到m_fullScreenRect位置上
}
//This member function is called by the framework to allow your //application to handle a Windows message.
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
if(m_fullScreenFlag)
{
lpMMI->ptMaxTrackSize.x = m_fullScreenRect.Width();
//设置最大跟踪宽度
lpMMI->ptMaxTrackSize.y = m_fullScreenRect.Height();
//设置最大跟踪高度
}
CMDIFrameWnd::OnGetMinMaxInfo(lpMMI);
}
// 结束程序窗口全屏显示,恢复窗口原来大小
void CMainFrame::EndFullScreen()
{
if(m_fullScreenFlag)
{
m_fullScreenFlag = FALSE;
// 设置全屏状态为FALSE
SetWindowPlacement(&m_oldWinPos);
// 退出全屏显示, 恢复原窗口显示
}
}
// 得到当前窗口的现实状态
BOOL CMainFrame::GetScreenState()
{
return m_fullScreenFlag;
}
//对按键进行处理
void CFullScreenMDIView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar == VK_F11)
{
// 获取主框架窗口的指针
CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
if(pFrame->GetScreenState()) // 如果现在是全屏状态
{
// 调用主窗口类的自定义函数 EndFullScreen,退出全屏显示状态
pFrame->EndFullScreen();
}
else // 不是全屏状态
{
// 调用主窗口类的自定义函数 FullScreen ,进入全屏显示状态
pFrame->FullScreen();
}
}
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
相关文章推荐
- VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)
- VS2008中MFC界面编程Caption中文全是乱码的解决办法
- VS2010/MFC编程入门之一(Ribbon界面开发:创建Ribbon样式的应用程序框架)
- MFC 界面设计/编程 相关Tips
- MFC 界面编程 可参考资料
- 非MFC的界面编程 - 复选框CHECKBOX
- MFC之Ribbon界面编程
- (转载)VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)
- MFC界面编程2011年9月22日
- VS2010/MFC编程入门之二(Ribbon界面开发:为Ribbon Bar添加控件)
- MFC界面编程1:GDI+实现不规则窗体
- MFC界面编程之 关于如何换肤、子类化的解决方案
- MFC+opencv+win32界面编程
- (转载)VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)
- VS2010/MFC编程入门之三(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)
- VS2010中MFC界面编程Caption中文全是乱码的解决办法
- VS2008中MFC界面编程Caption中文全是乱码的解决办法 -转载
- MFC界面编程 之 全面解读WM_NOTIFY
- VS2008中MFC界面编程Caption中文全是乱码的解决办法
- MFC界面编程 之 基础概念