丸いボタンの作成 – プログラミング – Home

通知
すべてクリア

丸いボタンの作成


OS
 OS
(@OS)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

質問をさせてください。

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

BOOL CXxxxxDlg::OnInitDialog()
{


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

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

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

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


引用解決済
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

ここのページが参考になるでしょうか?

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


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

GetDlgItem(ボタンのID)->SetWindowRgn(リージョン);


返信引用
OS
 OS
(@OS)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

お返事ありがとうございます。

現在、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
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

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


返信引用
ゆう
 ゆう
(@ゆう)
ゲスト
結合: 23年前
投稿: 114
 

>しかし、クラスを使用しないでできないものかと思っています。
なぜクラスを使用しない必然性があるのでしょうか。

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

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


返信引用
REE
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

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

rgn.Detach();

> return TRUE;
>}

これをいれてみるとか?


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました