MFC 界面编程

来源:互联网 发布:ubuntu 10 虚拟机镜像 编辑:程序博客网 时间:2024/05/01 11:44

在状态兰上的左侧加上向左滚动的文字
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);
}

原创粉丝点击