// 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);
}