// MainDlg.h
#pragma once
class CMainDlg : public CDialogImpl<CMainDlg>
{
public:
enum { IDD = IDD_MAINDLG };
CUpDownCtrl m_updown_r; // [R]用
CUpDownCtrl m_updown_g; // [G]用
CUpDownCtrl m_updown_b; // [B]用
CRect m_rect; // 色表示用矩形
BEGIN_MSG_MAP(CMainDlg)
MSG_WM_PAINT(OnPaint)
MSG_WM_INITDIALOG(OnInitDialog)
COMMAND_HANDLER_EX(IDC_EDIT_R, EN_CHANGE, OnEditChangeR)
COMMAND_HANDLER_EX(IDC_EDIT_G, EN_CHANGE, OnEditChangeG)
COMMAND_HANDLER_EX(IDC_EDIT_B, EN_CHANGE, OnEditChangeB)
COMMAND_ID_HANDLER_EX(IDOK, OnOK)
COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)
END_MSG_MAP()
BOOL OnInitDialog(CWindow wndFocus, LPARAM lInitParam){
// スクリーンの中央に配置
CenterWindow();
// 大きいアイコン設定
HICON hIcon = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,
::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON));
SetIcon(hIcon, TRUE);
// 小さいアイコン設定
HICON hIconSmall = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,
::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON));
SetIcon(hIconSmall, FALSE);
// コントロール設定
m_updown_r = GetDlgItem(IDC_SPIN_R);
m_updown_g = GetDlgItem(IDC_SPIN_G);
m_updown_b = GetDlgItem(IDC_SPIN_B);
m_updown_r.SetRange(0, 255);
m_updown_g.SetRange(0, 255);
m_updown_b.SetRange(0, 255);
// 色表示用矩形を取得
CStatic view = GetDlgItem(IDC_STATIC_VIEW);
view.GetWindowRect(m_rect);
ScreenToClient(m_rect);
return TRUE;
}
void OnPaint(CDCHandle /*dc*/){
CPaintDC dc(m_hWnd);
CBrush brush;
brush.CreateSolidBrush(RGB(m_updown_r.GetPos(),
m_updown_g.GetPos(), m_updown_b.GetPos()));
dc.FillRect(m_rect, brush);
}
void CheckAndUpdate(CUpDownCtrl& updown){
if(updown.m_hWnd != NULL){
// 範囲チェック
BOOL bError;
updown.GetPos(&bError);
if(bError)
updown.SetPos(255);
}
InvalidateRect(m_rect);
}
void OnEditChangeR(UINT uNotifyCode, int nID, CWindow wndCtl){
CheckAndUpdate(m_updown_r);
}
void OnEditChangeG(UINT uNotifyCode, int nID, CWindow wndCtl){
CheckAndUpdate(m_updown_g);
}
void OnEditChangeB(UINT uNotifyCode, int nID, CWindow wndCtl){
CheckAndUpdate(m_updown_b);
}
void OnOK(UINT uNotifyCode, int nID, CWindow wndCtl){
EndDialog(nID);
}
void OnCancel(UINT uNotifyCode, int nID, CWindow wndCtl){
EndDialog(nID);
}
};
|