// MyDlg.cpp : インプリメンテーション ファイル
//
#include "stdafx.h"
#include "test02.h"
#include "MyDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMyDlg ダイアログ
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
m_sText = _T("");
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
DDX_Text(pDX, IDC_EDIT1, m_sText);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_WM_CONTEXTMENU()
ON_WM_INITMENUPOPUP()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_KICKIDLE, OnKickIdle)
ON_UPDATE_COMMAND_UI(IDOK, OnUpdateCommandOK)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyDlg メッセージ ハンドラ
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
// ツールチップを使う準備
if (m_ToolTip.Create(this, TTS_ALWAYSTIP))
{
m_ToolTip.SetMaxTipWidth(SHRT_MAX);
m_ToolTip.SetDelayTime(TTDT_AUTOPOP, SHRT_MAX);
m_ToolTip.SetDelayTime(TTDT_INITIAL, 200);
m_ToolTip.SetDelayTime(TTDT_RESHOW, 200);
}
// ツールチップを使うコントロールを登録
m_ToolTip.AddTool(GetDlgItem(IDC_BUTTON1));
return TRUE;
}
void CMyDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this);
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CMyDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
// ON_UPDATE_COMMAND_UI を使えるようにする
LRESULT CMyDlg::OnKickIdle(WPARAM wp, LPARAM lCount)
{
UpdateDialogControls(this, TRUE);
return 0;
}
void CMyDlg::OnUpdateCommandOK(CCmdUI* pCmdUI)
{
pCmdUI->Enable(!m_sText.IsEmpty());
}
void CMyDlg::OnChangeEdit1()
{
UpdateData(TRUE);
CWnd* pWnd = GetDlgItem(IDC_BUTTON1);
if (!m_sText.IsEmpty())
m_ToolTip.UpdateTipText(_T("OK を押せる"), pWnd);
else
m_ToolTip.UpdateTipText(_T("OK は押せない"), pWnd);
}
// CDialog でのフォーカスの移動
void CMyDlg::OnButton1()
{
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
GotoDlgCtrl(pEdit);
}
// 右クリックメニュー
void CMyDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
if (point.x == -1 && point.y == -1)
point = (CPoint)GetMessagePos();
CMenu menu;
VERIFY(menu.LoadMenu(IDR_POPUP_MENU));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x, point.y, this);
}
// メニューの状態の変更
void CMyDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
CDialog::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
if (m_sText.IsEmpty())
pPopupMenu->EnableMenuItem(IDOK, MF_BYCOMMAND | MF_GRAYED);
else
pPopupMenu->EnableMenuItem(IDOK, MF_BYCOMMAND | MF_ENABLED);
}
// ツールチップ用
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
if (::IsWindow(m_ToolTip.m_hWnd))
{
switch(pMsg->message)
{
case WM_LBUTTONDOWN:
case WM_MOUSEMOVE:
case WM_LBUTTONUP:
case WM_RBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_RBUTTONUP:
case WM_MBUTTONUP:
m_ToolTip.RelayEvent(pMsg);
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}