4
static HWND btn;
HCURSOR cursor = LoadCursor(0, IDC_CROSS);

case WM_CREATE:
    btn = CreateWindow(TEXT("BUTTON"), TEXT("Press Me"),
                       WS_CHILD|WS_VISIBLE, 50, 50, 80, 30,
                       hwnd, (HMENU) 111, NULL, NULL);

今、WM_COMMAND私は使用しようとしています:

SendMessage(btn, WM_SETCURSOR, 0, (LPARAM) cursor);

これは機能していません。

では、ボタンをクリックした後にマウスのカーソルを変更するにはどうすればよいですか? また、ボタンの上にカーソルを置いているときにマウスのカーソルを変更するにはどうすればよいですか (Web ブラウザのリンクの上にカーソルを置いたときに手の形に変わるように)。

4

4 に答える 4

4

次のコードを使用して、単一のコントロールのカーソルを変更します。

SetClassLong(btn, GCL_HCURSOR, (LONG)cursor);

64 ビットとの互換性のために推奨される方法は次のとおりです。

SetClassLongPtr(btn, GCL_HCURSOR, (LONG_PTR)cursor);

これは指定されたbtnウィンドウだけのアイコンを変更するわけではありませんが、同じクラスを持つすべてのウィンドウについては、最初にカスタムクラス名を登録してから、作成時に構造体RegisterClass()で使用する必要があることに注意してください。WNDCLASS.lpszClassNamebtn

繰り返しますが、これはその (カスタム) クラスを持つすべての Windows に適用されます。単一の特定のウィンドウのカーソルを変更するには、それをサブクラス化する必要があり、WM_SETCURSORメッセージを管理し、(たとえば) (ポインターlParamHTCLIENTウィンドウ クライアント領域に入った場合) を呼び出して、必要なカーソルを設定します (これSetCursor()で戻ることを忘れないでください)。TRUE場合)。もちろん、これは一時的なものかもしれません ( で呼び出しますSetWindowLongPtr()) GWLP_WNDPROC

于 2012-04-23T10:16:57.960 に答える
3

メッセージハンドラで使用する必要SetCursor()がありWM_SETCURSORます。

于 2012-04-23T11:32:29.467 に答える
2
LRESULT CALLBACK DlgProc (HWND hWndDlg, UINT message, WPARAM wParam, LPARAM lParam) {
   static RECT rcButton;
   static HWND hButton;
   static HCURSOR hCursor;
   // ...
  switch (message) {
    case WM_INITDIALOG:
      hButton = GetDlgItem (hWndDlg, IDC_BUTTON);
      GetClientRect (hButton, &rcButton);
      MapWindowPoints (hButton, hWndDlg, (LPPOINT) &rcButton, 2);
      break;
    case WM_MOUSEMOVE:
      if ((LOWORD (lParam) >= rcButton.left - 1 && LOWORD (lParam) <= rcButton.right) && (HIWORD (lParam) >= rcButton.Top - 1 && (HIWORD (lParam) <= rcButton.bottom))
          SetClassLong (hButton, GCL_HCURSOR, (LONG) LoadCursor (NULL, IDC_CROSS));
      else
         SetClassLong (hButton, GCL_HCURSOR, (LONG) LoadCursor (NULL, IDC_ARROW));
      break;
   // ...

それは確かにあなたの仕事をします!

于 2013-03-11T12:36:28.667 に答える
1

また、ボタンの上にカーソルを置いているときにマウスのカーソルを変更するにはどうすればよいですか (Web ブラウザのリンクの上にカーソルを置いたときに手の形に変わるように)。

ボタンをスーパークラス化し、手のアイコンを持つボタンの新しいクラスを作成できます。

BUTTON クラスで GetClassInfoEx を使用し、カーソルを変更し、新しいクラス名を付けて登録し、新しいクラス名を使用して CreateWindowEx でボタンを作成します。

于 2012-04-24T00:39:11.890 に答える