今日は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;
}
…中略…
}