为状态栏添加显示辅助信息功能.doc

上传人:doc321 文档编号:15009802 上传时间:2022-03-03 格式:DOC 页数:6 大小:157KB
返回 下载 相关 举报
为状态栏添加显示辅助信息功能.doc_第1页
第1页 / 共6页
为状态栏添加显示辅助信息功能.doc_第2页
第2页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《为状态栏添加显示辅助信息功能.doc》由会员分享,可在线阅读,更多相关《为状态栏添加显示辅助信息功能.doc(6页珍藏版)》请在三一文库上搜索。

1、为状态栏添加像素位置,度量单位,图像大小以及图像位数四个信息一、在主框架中定义状态栏各个分栏位置。1、在CMainFrame.h中,添加:#define PANE_CURSOR_POSITION1#define PANE_LENGTH_UNIT2#define PANE_IMAGE_SIZE3#define PANE_BIT_COUNT42、在CMainFrame.cpp中,indicators数组处改为:static UINT indicators =ID_SEPARATOR, / status line indicator/ cursor position ID_SEPARATOR,/ l

2、ength unitID_SEPARATOR,/ image sizeID_SEPARATOR,/ bit countID_SEPARATOR,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;3、在OnCreate函数中,添加如下代码:int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)if (!m_wndStatusBar.Create(this) |!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/siz

3、eof(UINT)TRACE0(Failed to create status barn);return -1; / fail to create/ add panesm_wndStatusBar.SetPaneInfo( PANE_CURSOR_POSITION, ID_SEPARATOR, SBPS_NORMAL, 72); m_wndStatusBar.SetPaneInfo( PANE_LENGTH_UNIT, ID_SEPARATOR, SBPS_NORMAL, 25); m_wndStatusBar.SetPaneInfo( PANE_IMAGE_SIZE, ID_SEPARATO

4、R, SBPS_NORMAL, 72);m_wndStatusBar.SetPaneInfo( PANE_BIT_COUNT, ID_SEPARATOR, SBPS_NORMAL, 28);二、添加各状态栏分栏的控制函数1、在String Table中,添加以下几个字串:2、在View类中,添加成员变量:int m_nLengthUnit,并在View类的构造函数中,添加初始化代码:m_nLengthUnit = MM_TEXT;3、在View类中,添加以下几个成员函数:voidSetStatusBarLengthUnit(int nUnit);voidSetStatusBarCursorPo

5、sition(CPoint point);voidSetStatusBarImageSize(CSize size);voidSetLengthUnit(int nUnit);voidSetStatusBarBitCount(WORD wBitcount);4、分别为它们添加函数代码:void CImageBoardView:SetStatusBarBitCount(WORD wBitcount)CString str;switch (wBitcount)case 1:str.LoadString(IDS_BITCOUNT_1);break;case 4:str.LoadString(IDS_

6、BITCOUNT_4);break;case 8:str.LoadString(IDS_BITCOUNT_8);break;case 24:default:str.LoadString(IDS_BITCOUNT_24);break;CMainFrame* pMainFrame= (CMainFrame*)( AfxGetApp()-m_pMainWnd);ASSERT_KINDOF(CMainFrame, pMainFrame); pMainFrame-m_wndStatusBar.SetPaneText(PANE_BIT_COUNT, str);void CImageBoardView:Se

7、tStatusBarLengthUnit(int nUnit)CString str;switch (m_nLengthUnit)case MM_HIENGLISH:str.LoadString(IDS_LENGTH_UNIT_INCH);break;case MM_HIMETRIC:str.LoadString(IDS_LENGTH_UNIT_MM);break;case MM_TEXT:default:str.LoadString(IDS_LENGTH_UNIT_PIXEL);break;CMainFrame* pMainFrame= (CMainFrame*)( AfxGetApp()-

8、m_pMainWnd);ASSERT_KINDOF(CMainFrame, pMainFrame); pMainFrame-m_wndStatusBar.SetPaneText(PANE_LENGTH_UNIT, str);void CImageBoardView:SetStatusBarCursorPosition(CPoint point)CWindowDC dc(this);dc.LPtoDP(&point);int nOldUnit = dc.SetMapMode(m_nLengthUnit);dc.DPtoLP(&point);dc.SetMapMode(nOldUnit);CStr

9、ing msg;double fCX = abs(point.x), fCY = abs(point.y);switch (m_nLengthUnit)case MM_TEXT:msg.Format(%d,%d, (int)fCX, (int)fCY);break;case MM_HIENGLISH:fCX /= 1000.0;fCY /= 1000.0;msg.Format(%.2f,%.2f, fCX, fCY);break;case MM_HIMETRIC:fCX /= 100.0;fCY /= 100.0;msg.Format(%.1f,%.1f, fCX, fCY);break;CM

10、ainFrame* pMainFrame= (CMainFrame*)( AfxGetApp()-m_pMainWnd);ASSERT_KINDOF(CMainFrame, pMainFrame); pMainFrame-m_wndStatusBar.SetPaneText(PANE_CURSOR_POSITION, msg);void CImageBoardView:SetStatusBarImageSize(CSize size)CWindowDC dc(this);dc.LPtoDP(&size);int nOldUnit = dc.SetMapMode(m_nLengthUnit);d

11、c.DPtoLP(&size);dc.SetMapMode(nOldUnit);CString msg;double fCX = abs(size.cx), fCY = abs(size.cy);switch (m_nLengthUnit)case MM_TEXT:msg.Format(%d,%d, (int)fCX, (int)fCY);break;case MM_HIENGLISH:fCX /= 1000.0;fCY /= 1000.0;msg.Format(%.2f,%.2f, fCX, fCY);break;case MM_HIMETRIC:fCX /= 100.0;fCY /= 10

12、0.0;msg.Format(%.1f,%.1f, fCX, fCY);break;CMainFrame* pMainFrame= (CMainFrame*)( AfxGetApp()-m_pMainWnd);ASSERT_KINDOF(CMainFrame, pMainFrame); pMainFrame-m_wndStatusBar.SetPaneText(PANE_IMAGE_SIZE, msg);void CImageBoardView:SetLengthUnit(int nUnit) m_nLengthUnit = nUnit;SetStatusBarLengthUnit(nUnit

13、);CSize sizeTotal(m_pDib-GetWidth(), m_pDib-GetHeight();SetStatusBarImageSize(sizeTotal);CMenu *pMenu = AfxGetApp()-m_pMainWnd-GetMenu();switch (m_nLengthUnit)case MM_HIENGLISH:pMenu-CheckMenuRadioItem(IDM_PIXEL, IDM_MM, IDM_INCH, MF_BYCOMMAND);break;case MM_HIMETRIC:pMenu-CheckMenuRadioItem(IDM_PIX

14、EL, IDM_MM, IDM_MM, MF_BYCOMMAND);break;case MM_TEXT:default:pMenu-CheckMenuRadioItem(IDM_PIXEL, IDM_MM, IDM_PIXEL, MF_BYCOMMAND);break;5、为View类添加OnActivateView虚函数,在函数中添加如下代码:void CImageBoardView:OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) if (bActivate)SetLengthUnit(m

15、_nLengthUnit);SetStatusBarBitCount(m_pDib-GetBitCount();CScrollView:OnActivateView(bActivate, pActivateView, pDeactiveView);6、为View类添加OnMouseMove函数:void CImageBoardView:OnMouseMove(UINT nFlags, CPoint point) SetStatusBarCursorPosition(point);CScrollView:OnMouseMove(nFlags, point);7、将m_wndStatusBar的属

16、性改为public。三、实现测量单位切换1、在菜单中,添加“长度单位”菜单:相应菜单项的ID为:像素IDM_PIXEL使用象素作为长度单位英寸IDM_INCH使用英寸作为长度单位毫米IDM_MM使用毫米作为长度单位2、为菜单项添加消息响应函数如下:void CImageBoardView:OnInch() SetLengthUnit(MM_HIENGLISH);void CImageBoardView:OnMm() SetLengthUnit(MM_HIMETRIC);void CImageBoardView:OnPixel() SetLengthUnit(MM_TEXT);这样,就添加了自定义的状态信息。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1