// ZDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Step.h"
#include "ZDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// ZDlg dialog
ZDlg::ZDlg(CWnd* pParent /*=NULL*/)
: CDialog(ZDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(ZDlg)
i_AtImageStyle = 0;
b_ChkUseObmCheck = 1;
//}}AFX_DATA_INIT
}
void ZDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(ZDlg)
DDX_Radio(pDX, AT_STYLE0, i_AtImageStyle);
DDX_Check(pDX, CHK_USEOBMCHECK, b_ChkUseObmCheck);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(ZDlg, CDialog)
//{{AFX_MSG_MAP(ZDlg)
ON_BN_CLICKED(IDOK, On_IDOK)
ON_WM_DRAWITEM()
ON_WM_MEASUREITEM()
ON_WM_LBUTTONDBLCLK()
ON_WM_RBUTTONDOWN()
ON_WM_PAINT()
ON_BN_CLICKED(AT_STYLE0, On_ImageStyle)
ON_BN_CLICKED(AT_STYLE1, On_ImageStyle)
ON_BN_CLICKED(AT_STYLE2, On_ImageStyle)
ON_BN_CLICKED(AT_STYLE3, On_ImageStyle)
ON_BN_CLICKED(AT_STYLE4, On_ImageStyle)
ON_BN_CLICKED(AT_STYLE5, On_ImageStyle)
ON_BN_CLICKED(AT_STYLE6, On_ImageStyle)
ON_BN_CLICKED(CHK_USEOBMCHECK, On_ChkUseObmCheck)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
void ZDlg::On_IDOK()
{
}
void ZDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CFont*pFt=dc.SelectObject(CFont::FromHandle((HFONT)::GetStockObject(ANSI_FIXED_FONT)));
int iBkMode=dc.SetBkMode(TRANSPARENT);
CRect rc;
GetClientRect(&rc);
rc.DeflateRect(40,80,0,0);
//==================================================
CString cs= "Right click and double click to show 2 popup menus.\n"
"Visit Help for help-contents.\n\n"
"Don't forget:\n"
"First pixel of tool bar stands for transparent color.\n\n";
dc.DrawText(cs,&rc,0);
//==================================================
dc.SetBkMode(iBkMode);
dc.SelectObject(pFt);
}
BOOL ZDlg::OnInitDialog()
{
CDialog::OnInitDialog();
On_ImageStyle();
return 1;
}
void ZDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
md_Popup.OnDrawItem(nIDCtl,lpDrawItemStruct);
md_Main.OnDrawItem(nIDCtl,lpDrawItemStruct);
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
void ZDlg::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
md_Popup.OnMeasureItem(nIDCtl,lpMeasureItemStruct);
md_Main.OnMeasureItem(nIDCtl,lpMeasureItemStruct);
CDialog::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}
void ZDlg::OnLButtonDblClk(UINT nFlags, CPoint pt)
{
CDialog::OnLButtonDblClk(nFlags, pt);
P_ShowPopupMenu(MU_EDIT,pt);
}
void ZDlg::OnRButtonDown(UINT nFlags, CPoint pt)
{
CDialog::OnRButtonDown(nFlags, pt);
P_ShowPopupMenu(MU_FILE,pt);
}
void ZDlg::P_ShowPopupMenu(UINT uMenuID, CPoint pt)
{
CMenu mu;
if(mu.LoadMenu(uMenuID)==0) return;
const UINT uBarID=(uMenuID==MU_EDIT)?BAR_EDIT:BAR_MAIN;
COLORREF clrVert=(uMenuID==MU_EDIT)?RGB(192,192,0):RGB(0,192,192);
CToolBar bar;
BOOL b=bar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD);
if(b) b=bar.LoadToolBar(uBarID);
if(b==0) return;
int iStyle=P_GetImageStyle();
md_Popup.SetOwnerDraw(&mu,1,&bar,iStyle,0,&clrVert);
// md_Popup.SetOwnerDraw(&mu,1,0,iStyle,0,&clrVert);
md_Popup.SetChechedItemStyle(b_ChkUseObmCheck);
CMenu*pMu=mu.GetSubMenu(0);
if(pMu==0) return;
::MapWindowPoints(m_hWnd,0,&pt,1);
UINT uCmd=pMu->TrackPopupMenu(TPM_RETURNCMD,pt.x,pt.y,this);
if(uCmd==0) return;
CString cs;
cs.Format("ID of the clicked menu item is 0x%X",uCmd);
MessageBox(cs);
}
void ZDlg::On_ChkUseObmCheck()
{
On_ImageStyle();
}
void ZDlg::On_ImageStyle()
{
int iStyle=P_GetImageStyle();
CToolBar bar;
bar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
bar.LoadToolBar(BAR_MAIN);
CMenu*pMenu=GetMenu();
md_Main.SetOwnerDraw(pMenu,1,&bar,iStyle);
md_Main.SetChechedItemStyle(b_ChkUseObmCheck);
}
int ZDlg::P_GetImageStyle()
{
UpdateData(1);
int iStyle=CMenuModifier::FLAT;
switch(i_AtImageStyle)
{
case 0: iStyle=CMenuModifier::FLAT; break;
case 1: iStyle=CMenuModifier::SUNKEN_WHITE; break;
case 2: iStyle=CMenuModifier::SUNKEN_BLACK; break;
case 3: iStyle=CMenuModifier::SUNKEN_BOTH; break;
case 4: iStyle=CMenuModifier::RAISED_WHITE; break;
case 5: iStyle=CMenuModifier::RAISED_BLACK; break;
case 6: iStyle=CMenuModifier::RAISED_BOTH; break;
}
return iStyle;
}