丸いボタンの作成

[戻る]
OS 2005/04/11(月) 14:41:03
質問をさせてください。

タイトルにあるように、丸いボタンを作成しようとしています。
自分で調べた結果、ウィンドウ自体を丸くする方法は以下のようにすればいいとわかり
ました。


BOOL CXxxxxDlg::OnInitDialog()
{
・
・
・

    CRgn rgn;
    rgn.CreateEllipticRgn(0, 0, 200, 100);
    SetWindowRgn(rgn, TRUE);

    return TRUE;  // TRUE を返すとコントロールに設定したフォーカスは失われ
ません。
}



これを応用して、ハンドル(?)をウィンドウからボタンに変えればいいと思うのです
が、その方法がわかりません。どなたか教えていただけると助かります。

また、一般にハンドルとクラスの紐付けはどのようにするものなのでしょうか?

Blue 2005/04/11(月) 14:55:56
ここのページが参考になるでしょうか?

http://www.vcppclub.com/b_octbtn/octbtn.html
(VisualC++倶楽部-八角形ボタンクラス)

dairygoods 2005/04/11(月) 14:57:16
GetDlgItem(ボタンのID)->SetWindowRgn(リージョン);

OS 2005/04/12(火) 10:44:50
お返事ありがとうございます。

現在、Blueさんに教えていただいたHPにのっているクラスを使用するとできました。
しかし、クラスを使用しないでできないものかと思っています。

dairygoodsさんに教えていただいた方法でやってみましたが以下のコードでは何も起き
ませんでした。

何がおかしいのでしょうか?


BOOL CXxxxxDlg::OnInitDialog()
{
・
・
・
・

    /***メンバー変数************
    CRgn rgn;
    CButton *pBtn;
    ***************************/

    pBtn = (CButton*)GetDlgItem(IDC_BUTTON1);
    rgn.CreateEllipticRgn(0, 0, 200, 100);
    pBtn->SetWindowRgn(rgn, TRUE);

    return TRUE;
}


よろしくお願いします。

Blue 2005/04/12(火) 12:02:58
SDKですが
http://forums.belution.com/ja/vc/000/011/41s.shtml
(Visual C フォーラム-丸いボタンの作り方ですが…)
を参考にどうぞ。

ゆう 2005/04/15(金) 11:33:37
>しかし、クラスを使用しないでできないものかと思っています。
なぜクラスを使用しない必然性があるのでしょうか。

SetWindowRgnはウィンドウの形をRgnにするだけなので、
押しても押さなくてもただ丸いだけのボタンになってしまいます。
押さない時は凸んで、押した時には凹む様に見せるためには、
オーナードローで、自分で描画する必要があります。
必然的にCButtonの派生クラスを作らなくてはなりません。

オーナードローの実装の一例として、
>(VisualC++倶楽部-八角形ボタンクラス)
を紹介されているわけで、これを参考にしながら、丸いボタンの
凸凹の様子を自分で実装してみてくださいという事ではないでしょうか。
(八角形よりも少し複雑だと思いますが。)

REE 2005/04/15(金) 13:15:46
>    pBtn = (CButton*)GetDlgItem(IDC_BUTTON1);
>    rgn.CreateEllipticRgn(0, 0, 200, 100);
>    pBtn->SetWindowRgn(rgn, TRUE);

     rgn.Detach();

>    return TRUE;
>}

これをいれてみるとか?

古いスレッドには追加発言できません。