2012-04-23 12 views
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ブラウザのリンク上をホバーすると手の形に変わります)。単一のコントロールのカーソル変更する

答えて

3

使用このコードを:

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

好ましい方法は、64ビット互換性のために、次のとおりです。

SetWindowLongPtr(btn, GCL_HCURSOR, (LONG_PTR)cursor); 
+2

ありがとうございました。しかし、MSDNによれば、代わりに 'SetClassLongPtr'を使う方が良いのではないですか? – ApprenticeHacker

+0

@IntermediateHackerはい、64ビットとの互換性が容易です。 –

+1

Erm、[グローバルな範囲を使用してローカルの問題を解決していない](http://blogs.msdn.com/b/oldnewthing/archive/2008/12/11/9193695.aspx)に何が起こったのか? 'SetClassLong'は、同じクラスから作成されたEVERYコントロールのカーソルを変更します(私が思うのと同じプロセスで)。 – Deanna

3

あなたはSetCursor() in the WM_SETCURSOR message handlerを使用する必要があります。 ( ウェブブラウザのリンクの上にマウスを移動するとき、それが手に変わるように)それは 上のボタンをホバリングされるよう

1

はまた、どのように私は、マウスのカーソルを変更できますか?

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

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

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; 
    // ... 

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

関連する問題