【C++/Win32】Win32 を極める極意

この記事は約3分で読めます。

C++/Win32 でテキストエディタを作成する際に得た気付きやポイントをまとめたものです。

ダイアログに独自クラスを適用することはできるのか?

下記で可能です。これでダイアログでも通常ウィンドウで発生するメッセージ(例:WM_NCCALCSIZEなど)も処理できるようになります。

  • 独自クラス作成時の WNDCLASSEXW の cbWndExtra に DLGWINDOWEXTRA を設定する
  • リソースエディタでダイアログのクラス名に独自クラス名を設定する
  • ダイアログのデフォルトプロシージャは DefDlgProc に渡す

スタティック(静的)コントロールのスクロールバーを利用するには?

スタティックコントロールにスクロールバーを表示しても、サム(つまみ)をドラッグすることができません。ドラッグできるようにするには、いくつかのウィンドウメッセージを DefSubclassProc ではなく、DefWindowProc に渡す必要があります。下記はその例です。これでスクロールバーが有効になります。

LRESULT StaticClass::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
    switch(message) {
        case WM_NCHITTEST:              return ::DefWindowProc(hWnd, message, wParam, lParam);
        case WM_NCLBUTTONDOWN:          return ::DefWindowProc(hWnd, message, wParam, lParam);
        case WM_NCLBUTTONUP:            return ::DefWindowProc(hWnd, message, wParam, lParam);
    }
    return ::DefSubclassProc(hWnd, message, wParam, lParam);
}

参考

詳細は下記を参照してください。

スクロールバーコントロールの設定値の制限は?

SetScrollInfo で各値を設定する際の制限です。

nPage

nPage に設定可能な値です。

0 から nMaxnMin + 1

nPos

nPos に設定可能な値です。nMax が最大ではない点に注意。

nMin から nMax – max(nPage – 1, 0)

参考

詳細は下記を参照してください。

コメント

タイトルとURLをコピーしました