C言語関係掲示板

過去ログ

No.395.マウスのカーソルが来たら「指」のカーソルにしたい

[戻る] [ホームページ]
No.2710

ボタンの上にマウスのカーソルが来たら、「指」のカーソルにしたい
投稿者---Ras(2002/09/16 00:57:11)


ホームページでリンクにカーソルを移動させると「矢印」から「指」に変わるように、
VisualCのコモンコントロールで作成したボタンの上に移動させたら、
カーソルを「指」に変更させたいです。
自前で用意した画像とかではなく、システムにあるカーソルでいいんですが、どうやればこのように出来るのでしょうか?

あ、あと、コモンコントロールでダイアログボックスに貼り付けたピクチャーの「可視」をON,OFFにする関数を知りたいです!!
よろしくお願いします!!

No.2724

Re:ボタンの上にマウスのカーソルが来たら、「指」のカーソルにしたい
投稿者---かずま(2002/09/17 18:59:24)


> ホームページでリンクにカーソルを移動させると「矢印」から「指」に変わるように、
> VisualCのコモンコントロールで作成したボタンの上に移動させたら、
> カーソルを「指」に変更させたいです。
> 自前で用意した画像とかではなく、システムにあるカーソルでいいんですが、
> どうやればこのように出来るのでしょうか?

CButton から派生させた CButton1 クラスを作り、そこに次のような
WM_SETCURSOR のハンドラーを追加します。
BOOL CButton1::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
    if (nHitTest != HTCLIENT)
        return CButton::OnSetCursor(pWnd, nHitTest, message);
    ::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
    return TRUE;
}
このボタンを持っているダイアログかフォームビューウィンドウのクラスに
    CButton1 m_button1;
を追加すれば、ボタンの上にカーソルを持ってくると、
砂時計になるでしょう。自分で「指カーソル」 IDC_CURSOR1 を作ったら、
    ::SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1));

> あ、あと、コモンコントロールでダイアログボックスに貼り付けたピクチャーの
> 「可視」をON,OFFにする関数を知りたいです!!

ModifyStyle() です。次のようにすれば、ボタンを押すたびに出たり消えたりします。
void CHogeDlg::OnButton1() 
{
    if (m_picture1.GetStyle() & WS_VISIBLE)
        m_picture1.ModifyStyle(WS_VISIBLE, 0, 0);
    else
        m_picture1.ModifyStyle(0, WS_VISIBLE, 0);
    Invalidate();
}

この掲示板は、C の入門者のためのものですから、C++ や MFC の質問には回答が
つきにくいと思います。

No.2725

Re:ボタンの上にマウスのカーソルが来たら、「指」のカーソルにしたい
投稿者---かずま(2002/09/17 19:15:05)


> ModifyStyle() です。次のようにすれば、ボタンを押すたびに出たり消えたりします。
> void CHogeDlg::OnButton1() 
> {
>     if (m_picture1.GetStyle() & WS_VISIBLE)
>        m_picture1.ModifyStyle(WS_VISIBLE, 0, 0);
>    else
>        m_picture1.ModifyStyle(0, WS_VISIBLE, 0);
>    Invalidate();
> }
言い忘れましたが、これは、CStatic m_picture1 が CHogeDlg クラスにあって
CHogeDlg::DoDataExchange() に DDX_Control(pDX, IDC_PICTURE1, m_picture1);
が追加されている事を前提にしています。こんなものを追加したくなければ、
void CCursDlg::OnButton1() 
{
    CWnd *p = GetDlgItem(IDC_PICTURE1);
    if (p->GetStyle() & WS_VISIBLE)
        p->ModifyStyle(WS_VISIBLE, 0, 0);
    else
        p->ModifyStyle(0, WS_VISIBLE, 0);
    Invalidate();
}