隐藏菜单栏
//单击处理函数
void CHideMenuBarView::OnLButtonDown(UINT nFlags, CPoint point)
{
//隐藏菜单栏
::SetMenu(AfxGetMainWnd()->m_hWnd, NULL);
CView::OnLButtonDown(nFlags, point);
}
//右击处理函数
void CHideMenuBarView::OnRButtonDown(UINT nFlags, CPoint point)
{
//显示菜单栏
CMenu menu;
menu.LoadMenu(IDR_MAINFRAME); //加载菜单
HMENU hMenu = (HMENU)menu; //类型转换
::SetMenu(AfxGetMainWnd()->m_hWnd, hMenu); //设置菜单
CView::OnRButtonDown(nFlags, point);
}
隐藏和显示状态栏
void CMainFrame::OnShow()
{
//判断是否状态栏可见
if(!m_wndStatusBar.IsWindowVisible())
{
//如果是不可见的,设置为可见
m_wndStatusBar.ModifyStyle(0, WS_VISIBLE);
}
//使状态栏状态生效
SendMessage(WM_SIZE);
}
void CMainFrame::OnHide()
{
//判断是否状态栏可见
if(m_wndStatusBar.IsWindowVisible())
{
//如果是可见,设置为隐藏
m_wndStatusBar.ModifyStyle(WS_VISIBLE, 0);
}
//使状态栏状态生效
SendMessage(WM_SIZE);
}
隐藏和显示标题栏
void CMainFrame::OnMenuShowtitlebar()
{
LONG style = GetWindowLong(m_hWnd, GWL_STYLE); //得到窗口类型
style |= WS_CAPTION; //修改窗口类型,显示标题栏
SetWindowLong(m_hWnd, GWL_STYLE, style); //设置窗口类型
//移动窗口使显示标题栏立即生效
RECT winRect;
GetWindowRect(&winRect);//得到窗口位置
winRect.top--; //窗口下移
MoveWindow(&winRect); //移动窗口
}
void CMainFrame::OnMenuHidetitlebar()
{
LONG style = GetWindowLong(m_hWnd, GWL_STYLE); //得到窗口类型
style &= ~(WS_CAPTION); //修改窗口类型,显示标题栏
SetWindowLong(m_hWnd, GWL_STYLE, style); //设置窗口类型
//移动窗口使隐藏标题栏立即生效
RECT winRect;
GetWindowRect(&winRect);//得到窗口位置
winRect.top++; //窗口上移
MoveWindow(&winRect); //移动窗口
}
给菜多文档单选项前面添加位图
BOOL CIconMenuMDIDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
m_bitmap.LoadBitmap(IDB_BITMAP1);
CMenu *pMenu;
pMenu = CMenu::FromHandle(((CMultiDocTemplate *)m_pDocTemplate)->m_hMenuShared); // 获得文档菜单
//给菜单 文件->新建 添加图标
pMenu->GetSubMenu(0)->SetMenuItemBitmaps(0, MF_BYPOSITION, &m_bitmap, &m_bitmap);
return TRUE;
}
给菜半单文档单选项前面添加位图
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
bitmap.LoadBitmap(IDB_BITMAP1);//加载位图
//给菜单 文件->新建 添加图标
GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0, MF_BYPOSITION, &bitmap, &bitmap);
return 0;
}
修改多文档界面的背景位图
#if !defined(AFX_BGWND_H__0776490A_FADF_442D_BBDD_EBAB2826EA1E__INCLUDED_)
#define AFX_BGWND_H__0776490A_FADF_442D_BBDD_EBAB2826EA1E__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// BgWnd.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CBgWnd window
class CBgWnd : public CWnd
{
// Construction
public:
CBgWnd();
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CBgWnd)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CBgWnd();
// Generated message map functions
protected:
//{{AFX_MSG(CBgWnd)
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnSize(UINT nType, int cx, int cy);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_BGWND_H__0776490A_FADF_442D_BBDD_EBAB2826EA1E__INCLUDED_)
BOOL CBgWnd::OnEraseBkgnd(CDC* pDC)
{
CRect rectClient; // 客户区
CDC dcMen; // 内存设备描述表
CBitmap bmp; // 位图对象
bmp.LoadBitmap(IDB_BITMAP1); // 从资源加载位图
BITMAP tmpBitmap;
bmp.GetObject(sizeof(BITMAP), &tmpBitmap);
CSize bmpSize(tmpBitmap.bmWidth, tmpBitmap.bmHeight); // 得到位图的大小
dcMen.CreateCompatibleDC(pDC); // 创建兼容的设备描述表
CBitmap *pOld=dcMen.SelectObject(&bmp); // 选入新的位图对象并保存旧的位图对象
GetClientRect(&rectClient); // 取得客户区的大小
// 从内存向屏幕复制位图对象
pDC->StretchBlt(rectClient.left, rectClient.top, rectClient.Width(), rectClient.Height(),
&dcMen, 0, 0, bmpSize.cx, bmpSize.cy, SRCCOPY);
dcMen.SelectObject(pOld); // 恢复旧的位图对象
dcMen.DeleteDC(); // 删除内存设备描述表
return true;
}
void CBgWnd::OnSize(UINT nType, int cx, int cy)
{
CWnd::OnSize(nType, cx, cy);
Invalidate();
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// 把m_wndBg子类化为主窗口的客户窗口
if(!m_wndBg.SubclassWindow(m_hWndMDIClient))
{
TRACE("Fail to subclass MDI client window\n");
return -1;
}
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
}