📄 kbuttonproppage.h
字号:
// kButtonPropPage.h : Declaration of the _kButtonPropPage
#ifndef __KBUTTONPROPPAGE_H_
#define __KBUTTONPROPPAGE_H_
#include "resource.h" // main symbols
namespace
{
static TCHAR* AppearanceText [] =
{
_T("0 - flat"), _T("1 - border"), _T("2 - 3d border raised"), _T("3 - 3d border sunken"),
_T("4 - 3d low"), _T("5 - 3d high"), _T("6 - 3d low with border"), _T("7 - 3d high with border")
};
static TCHAR* FocusText[] =
{
_T("0 - None"), _T("1 - DrawRect"), _T("2 - SetHover"), _T("3 - Both")
};
static TCHAR* AlignText[] =
{
_T("0 - Left"), _T("1 - Center"), _T("2 - Right"), _T("3 - Top"), _T("4 - Bottom")
};
}
EXTERN_C const CLSID CLSID_kButtonPropPage;
/////////////////////////////////////////////////////////////////////////////
// _kButtonPropPage
class ATL_NO_VTABLE _kButtonPropPage :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<_kButtonPropPage, &CLSID_kButtonPropPage>,
public IPropertyPageImpl<_kButtonPropPage>,
public CDialogImpl<_kButtonPropPage>
{
bool bInitIsProceed;
public:
_kButtonPropPage() : bInitIsProceed(true)
{
m_dwTitleID = IDS_TITLEkButtonPropPage;
m_dwHelpFileID = IDS_HELPFILEkButtonPropPage;
m_dwDocStringID = IDS_DOCSTRINGkButtonPropPage;
}
enum {IDD = IDD_KBUTTONPROPPAGE};
DECLARE_REGISTRY_RESOURCEID(IDR_KBUTTONPROPPAGE)
DECLARE_NOT_AGGREGATABLE(_kButtonPropPage)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(_kButtonPropPage)
COM_INTERFACE_ENTRY(IPropertyPage)
END_COM_MAP()
BEGIN_MSG_MAP(_kButtonPopPage)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_HANDLER(IDC_CHECK_HOVER, BN_CLICKED, OnPropertyChanged)
COMMAND_HANDLER(IDC_CHECK_ALTER, BN_CLICKED, OnPropertyChanged)
COMMAND_HANDLER(IDC_COMBO_ALIGN, CBN_SELCHANGE, OnPropertyChanged)
COMMAND_HANDLER(IDC_COMBO_FOCUS, CBN_SELCHANGE, OnPropertyChanged)
COMMAND_HANDLER(IDC_COMBO_HOVER, CBN_SELCHANGE, OnPropertyChanged)
COMMAND_HANDLER(IDC_COMBO_PUSH, CBN_SELCHANGE, OnPropertyChanged)
COMMAND_HANDLER(IDC_COMBO_STATIC, CBN_SELCHANGE, OnPropertyChanged)
COMMAND_HANDLER(IDC_HoverText, EN_CHANGE, OnPropertyChanged)
COMMAND_HANDLER(IDC_PushText, EN_CHANGE, OnPropertyChanged)
COMMAND_HANDLER(IDC_SPACING, EN_CHANGE, OnPropertyChanged)
COMMAND_HANDLER(IDC_StaticText, EN_CHANGE, OnPropertyChanged)
CHAIN_MSG_MAP(IPropertyPageImpl<_kButtonPropPage>)
END_MSG_MAP()
// Handler prototypes:
// LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
// LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
// LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
STDMETHOD(Show)(UINT nCmdShow)
{
if ((nCmdShow == SW_SHOW) || (nCmdShow == SW_SHOWNORMAL))
{
LoadData();
}
return IPropertyPageImpl<_kButtonPropPage>::Show(nCmdShow);
}
STDMETHOD(Apply)(void)
{
TCHAR* txtStatic, *txtPush, *txtHover;
int len = SendMessage(GetDlgItem(IDC_StaticText), WM_GETTEXTLENGTH, 0, 0);
txtStatic = (TCHAR*)_alloca((len + 1) * sizeof TCHAR);
memset(txtStatic, 0, (len + 1) * sizeof TCHAR);
GetDlgItemText(IDC_StaticText, txtStatic, len + 1);
len = SendMessage(GetDlgItem(IDC_HoverText), WM_GETTEXTLENGTH, 0, 0);
txtHover = (TCHAR*)_alloca((len + 1) * sizeof TCHAR);
memset(txtHover, 0, (len + 1) * sizeof TCHAR);
GetDlgItemText(IDC_HoverText, txtHover, len + 1);
len = SendMessage(GetDlgItem(IDC_PushText), WM_GETTEXTLENGTH, 0, 0);
txtPush = (TCHAR*)_alloca((len + 1) * sizeof TCHAR);
memset(txtPush, 0, (len + 1) * sizeof TCHAR);
GetDlgItemText(IDC_PushText, txtPush, len + 1);
CComBSTR bstrStatic(txtStatic), bstrPush(txtPush), bstrHover(txtHover);
kAppearanceEnum appearStatic = kAppearanceEnum(SendDlgItemMessage(IDC_COMBO_STATIC, CB_GETCURSEL, 0, 0));
kAppearanceEnum appearHover = kAppearanceEnum(SendDlgItemMessage(IDC_COMBO_HOVER, CB_GETCURSEL, 0, 0));
kAppearanceEnum appearPush = kAppearanceEnum(SendDlgItemMessage(IDC_COMBO_PUSH, CB_GETCURSEL, 0, 0));
kFocusEnum focus = kFocusEnum(SendDlgItemMessage(IDC_COMBO_FOCUS, CB_GETCURSEL, 0, 0));
kAlignmentEnum align = kAlignmentEnum (SendDlgItemMessage(IDC_COMBO_ALIGN, CB_GETCURSEL, 0, 0));
BOOL isOkSpacing = FALSE;
UINT uiSpacing = GetDlgItemInt(IDC_SPACING, &isOkSpacing, 0);
UINT resHoverEnabled = SendDlgItemMessage(IDC_CHECK_HOVER, BM_GETCHECK, 0, 0);
UINT resAlter = SendDlgItemMessage(IDC_CHECK_ALTER, BM_GETCHECK, 0, 0);
ATLTRACE(_T("_kButtonPropPage::Apply\n"));
for (UINT i = 0; i < m_nObjects; i++)
{
{
CComQIPtr<IkButton, &IID_IkButton> p(m_ppUnk[i]);
if (p)
{
p->put_TextStatic(bstrStatic);
p->put_TextHover (bstrHover);
p->put_TextPush (bstrPush);
p->put_AppearanceStatic(appearStatic);
p->put_AppearanceHover(appearHover);
p->put_AppearancePush(appearPush);
p->put_ShowFocus(focus);
p->put_PictureAlignment(align);
if (isOkSpacing)
p->put_PictureSpacing(uiSpacing);
p->put_HoverEnabled (resHoverEnabled == BST_CHECKED);
p->put_ShowStateAsFlat (resAlter == BST_CHECKED);
}
}
}
return S_OK;
}
LRESULT OnInitDialog(UINT, WPARAM, LPARAM, BOOL&)
{
SendDlgItemMessage(IDC_COMBO_STATIC, CB_ADDSTRING, kFlat, (long)AppearanceText[kFlat]);
SendDlgItemMessage(IDC_COMBO_STATIC, CB_ADDSTRING, kBorder, (long)AppearanceText[kBorder]);
SendDlgItemMessage(IDC_COMBO_STATIC, CB_ADDSTRING, k3dBorderRaised, (long)AppearanceText[k3dBorderRaised]);
SendDlgItemMessage(IDC_COMBO_STATIC, CB_ADDSTRING, k3dBorderSunken, (long)AppearanceText[k3dBorderSunken]);
SendDlgItemMessage(IDC_COMBO_STATIC, CB_ADDSTRING, k3dLow, (long)AppearanceText[k3dLow]);
SendDlgItemMessage(IDC_COMBO_STATIC, CB_ADDSTRING, k3dHigh, (long)AppearanceText[k3dHigh]);
SendDlgItemMessage(IDC_COMBO_STATIC, CB_ADDSTRING, k3dLowWithBorder, (long)AppearanceText[k3dLowWithBorder]);
SendDlgItemMessage(IDC_COMBO_STATIC, CB_ADDSTRING, k3dHighWithBorder,(long)AppearanceText[k3dHighWithBorder]);
SendDlgItemMessage(IDC_COMBO_HOVER, CB_ADDSTRING, kFlat, (long)AppearanceText[kFlat]);
SendDlgItemMessage(IDC_COMBO_HOVER, CB_ADDSTRING, kBorder, (long)AppearanceText[kBorder]);
SendDlgItemMessage(IDC_COMBO_HOVER, CB_ADDSTRING, k3dBorderRaised, (long)AppearanceText[k3dBorderRaised]);
SendDlgItemMessage(IDC_COMBO_HOVER, CB_ADDSTRING, k3dBorderSunken, (long)AppearanceText[k3dBorderSunken]);
SendDlgItemMessage(IDC_COMBO_HOVER, CB_ADDSTRING, k3dLow, (long)AppearanceText[k3dLow]);
SendDlgItemMessage(IDC_COMBO_HOVER, CB_ADDSTRING, k3dHigh, (long)AppearanceText[k3dHigh]);
SendDlgItemMessage(IDC_COMBO_HOVER, CB_ADDSTRING, k3dLowWithBorder, (long)AppearanceText[k3dLowWithBorder]);
SendDlgItemMessage(IDC_COMBO_HOVER, CB_ADDSTRING, k3dHighWithBorder,(long)AppearanceText[k3dHighWithBorder]);
SendDlgItemMessage(IDC_COMBO_PUSH, CB_ADDSTRING, kFlat, (long)AppearanceText[kFlat]);
SendDlgItemMessage(IDC_COMBO_PUSH, CB_ADDSTRING, kBorder, (long)AppearanceText[kBorder]);
SendDlgItemMessage(IDC_COMBO_PUSH, CB_ADDSTRING, k3dBorderRaised, (long)AppearanceText[k3dBorderRaised]);
SendDlgItemMessage(IDC_COMBO_PUSH, CB_ADDSTRING, k3dBorderSunken, (long)AppearanceText[k3dBorderSunken]);
SendDlgItemMessage(IDC_COMBO_PUSH, CB_ADDSTRING, k3dLow, (long)AppearanceText[k3dLow]);
SendDlgItemMessage(IDC_COMBO_PUSH, CB_ADDSTRING, k3dHigh, (long)AppearanceText[k3dHigh]);
SendDlgItemMessage(IDC_COMBO_PUSH, CB_ADDSTRING, k3dLowWithBorder, (long)AppearanceText[k3dLowWithBorder]);
SendDlgItemMessage(IDC_COMBO_PUSH, CB_ADDSTRING, k3dHighWithBorder,(long)AppearanceText[k3dHighWithBorder]);
SendDlgItemMessage(IDC_COMBO_FOCUS, CB_ADDSTRING, kNone, (long)FocusText[kNone]);
SendDlgItemMessage(IDC_COMBO_FOCUS, CB_ADDSTRING, kDrawRect, (long)FocusText[kDrawRect]);
SendDlgItemMessage(IDC_COMBO_FOCUS, CB_ADDSTRING, kSetHover, (long)FocusText[kSetHover]);
SendDlgItemMessage(IDC_COMBO_FOCUS, CB_ADDSTRING, kBoth, (long)FocusText[kBoth]);
SendDlgItemMessage(IDC_COMBO_ALIGN, CB_ADDSTRING, kLeft, (long)AlignText[kLeft]);
SendDlgItemMessage(IDC_COMBO_ALIGN, CB_ADDSTRING, kCenter, (long)AlignText[kCenter]);
SendDlgItemMessage(IDC_COMBO_ALIGN, CB_ADDSTRING, kRight, (long)AlignText[kRight]);
SendDlgItemMessage(IDC_COMBO_ALIGN, CB_ADDSTRING, kTop, (long)AlignText[kTop]);
SendDlgItemMessage(IDC_COMBO_ALIGN, CB_ADDSTRING, kBottom, (long)AlignText[kBottom]);
bInitIsProceed = false;
return 0;
}
LRESULT OnPropertyChanged(WORD, WORD, HWND, BOOL&)
{
if (!bInitIsProceed)
{
SetDirty(TRUE);
m_pPageSite->OnStatusChange (PROPPAGESTATUS_DIRTY | PROPPAGESTATUS_VALIDATE);
}
return 0;
}
private:
void LoadData()
{
USES_CONVERSION;
CComQIPtr<IkButton, &IID_IkButton> p(m_ppUnk[0]);
if (p)
{
BSTR txt = 0;
if (SUCCEEDED(p->get_TextStatic(&txt)))
SetDlgItemText(IDC_StaticText, W2T(txt));
SysFreeString(txt);
if (SUCCEEDED(p->get_TextHover(&txt)))
SetDlgItemText(IDC_HoverText, W2T(txt));
SysFreeString(txt);
if (SUCCEEDED(p->get_TextPush(&txt)))
SetDlgItemText(IDC_PushText, W2T(txt));
SysFreeString(txt);
kAppearanceEnum appear;
if (SUCCEEDED(p->get_AppearanceStatic(&appear)))
SendDlgItemMessage(IDC_COMBO_STATIC, CB_SETCURSEL, (long)appear, 0);
if (SUCCEEDED(p->get_AppearanceHover(&appear)))
SendDlgItemMessage(IDC_COMBO_HOVER, CB_SETCURSEL, (long)appear, 0);
if (SUCCEEDED(p->get_AppearancePush(&appear)))
SendDlgItemMessage(IDC_COMBO_PUSH, CB_SETCURSEL, (long)appear, 0);
kFocusEnum focus;
if (SUCCEEDED(p->get_ShowFocus(&focus)))
SendDlgItemMessage(IDC_COMBO_FOCUS, CB_SETCURSEL, (long)focus, 0);
kAlignmentEnum align;
if (SUCCEEDED(p->get_PictureAlignment(&align)))
SendDlgItemMessage(IDC_COMBO_ALIGN, CB_SETCURSEL, (long)align, 0);
short sSpacing = 0;
if (SUCCEEDED(p->get_PictureSpacing(&sSpacing)))
{
TCHAR buffer[20] = {_T('\0')};
_itot(sSpacing, buffer, 10);
SetDlgItemText(IDC_SPACING, buffer);
}
VARIANT_BOOL bln = VARIANT_FALSE;
if (SUCCEEDED(p->get_HoverEnabled(&bln)))
{
if (bln != VARIANT_FALSE)
SendDlgItemMessage(IDC_CHECK_HOVER, BM_SETCHECK, BST_CHECKED, 0);
else
SendDlgItemMessage(IDC_CHECK_HOVER, BM_SETCHECK, BST_UNCHECKED, 0);
}
bln = VARIANT_FALSE;
if (SUCCEEDED(p->get_ShowStateAsFlat(&bln)))
{
if (bln != VARIANT_FALSE)
SendDlgItemMessage(IDC_CHECK_ALTER, BM_SETCHECK, BST_CHECKED, 0);
else
SendDlgItemMessage(IDC_CHECK_ALTER, BM_SETCHECK, BST_UNCHECKED, 0);
}
}
}
};
#endif //__KBUTTONPROPPAGE_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -