ページ

2008年8月29日金曜日

WTLでスライダーバーを使いたい

今日はWTLにチャレンジ
スライダーバーを使おうとしてMSG_WM_HSCROLLマクロを埋め込んだところ、なにやら未解決のメソッドが出てきた。
そこでよくatlcrack.hを見ると以下のコメントが、

// Note about message maps with cracked handlers:
// For ATL 3.0, a message map using cracked handlers MUST use BEGIN_MSG_MAP_EX.
// For ATL 7.0 or higher, you can use BEGIN_MSG_MAP for CWindowImpl/CDialogImpl derived classes,
// but must use BEGIN_MSG_MAP_EX for classes that don't derive from CWindowImpl/CDialogImpl.

BEGIN_MSG_MAPをBEGIN_MSG_MAP_EXに置き換えたら見事ビルドが通りました。
使い方は以下みたいな感じ。

class CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,
        public CMessageFilter, public CIdleHandler
{
private:
    CTrackBarCtrl    track_bar;    // トラックバー

…中略…

    BEGIN_MSG_MAP_EX(CMainDlg)
        MSG_WM_HSCROLL(OnHScroll)
        MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
        MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
    END_MSG_MAP()

    void OnHScroll(int nCode, short nPos, HWND hWnd)
    {
        CTrackBarCtrl trackbar = hWnd;
        ATLTRACE("%d\n", trackbar.GetPos());
    }

    LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
    {


…中略…


        // コントロール設定
        track_bar = GetDlgItem(IDC_SLIDER_MAIN);

        // スライダーバーの初期化
        track_bar.SetRange(0, 32767);    // 値の範囲(32767が最大値)
        track_bar.SetTicFreq(3276);        // 解像度
        track_bar.SetPageSize(3276);    // PageUp/PageDown での移動量
        track_bar.SetLineSize(328);        // カーソルキーでの移動量

        return TRUE;
    }


…中略…




}