
win32、VC++2005で開発しております。
resource.h内の#defineで切ってあるIDの番号が重なっていたため
各コントロールの色を変更しようとすると同時に他のコントロールの色も変化してしまいました。
かなりのコントロール量だったのでExcelで開いて一気にインクリメントして再ロードするとコントロールの色が散らばってしまいました・・・
この方法はまずかったでしょうか?
色の変更は
case WM_CTLCOLORSTATIC :
i = GetWindowLong( (HWND)lParam, GWL_ID );
hdc = BeginPaint(hDlg, &ps);
if ( i == IDC_ICHI_S ) { //位置出し
SetTextColor( (HDC)wParam, RGB( 255, 255, 255 ) );
SetBkColor( (HDC)wParam, RGB( 0, 0, 255 ) );
return (LRESULT)CreateSolidBrush( RGB( 0, 0, 255 ));
}
if ( i == IDC_NIN_S ) { //任意(未知)の器械点セット
SetTextColor( (HDC)wParam, RGB( 255, 255, 255 ) );
SetBkColor( (HDC)wParam, RGB( 0, 128, 0 ) );
return (LRESULT)CreateSolidBrush( RGB( 0, 128, 0 ));
}
EndPaint(hDlg, &ps);
こんな感じでやってます。
resource.hのID名は変更してませんのでダイアログはちゃんと開きます。
resource.hの#defineの値は自動で割り振られたと思いますが、ダイアログ画面を複数書いて値が重複するのは変だと思いますがどうなんですか?
また、見やすいように各画面ごとにIDを束ねようとしてるのですが普通なことでしょうか?
プログラムコーディングの基準?常識?がよくわからないのでお願いします。
コントロールも膨大になってきて見ずらいです。
通常はどのように見やすくするのでしょうか?
プログラム初心者なので分かり易い指摘でお願いします。
No.1ベストアンサー
- 回答日時:
★アドバイス
・致命的な間違いを指摘します。
WM_CTLCOLORSTATIC 内で BeginPaint、EndPaint は使ってはいけません。
その代わりに wParam を HDC にキャストすればデバイスコンテキストの
ハンドルがもらえます。分かっていますよね。
それなのに BeginPaint、EndPaint を記述しているのはおかしいです。
>ダイアログ画面を複数書いて値が重複するのは変だと思いますがどうなんですか?
↑
思いません。
ダイアログAでボタン1があった場合 IDC_BUTTON1 を使います。
ダイアログBでもボタン1があった場合 IDC_BUTTON1 を使います。
IDC_BUTTON1 がダイアログで重複していても問題ないですし、変とも思いません。
ただし、タブコントロールなどに使うダイアログをコントロールとした場合は
各画面ごとに ID を束ねるようにしたり、重複しないようにします。
これはタブコントロールやプロパティシートのダイアログ・プロシージャを
1つに共通化したいために重複をしないためです。
(あまりにもコントロールの数が多い場合はダイアログ毎にプロシージャを用意します)
・リソースIDの値を変更した場合はリビルドしないといけません。
上手くリビルドできない場合は *.obj、*.exe などのファイルを削除してから
ビルド(コンパイル)を行います。ファイルを複数に分割している場合はこのようにします。
回答ありがとうございます。
ほとんどが何処かのサイトから参考にして書いたのですが、
確かにHDCにキャストしてあるのにおかしいですね。
リビルドすればうまく行きました。
> (あまりにもコントロールの数が多い場合はダイアログ毎にプロシージャを用意します)
プロシージャを分ける場合はファイルも別にするのが普通なんですか?
別にしないと結局コードが長くて見ずらいですよね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) ダブルクリックでセルの色を変える 1 2022/12/24 15:52
- その他(ソフトウェア) IndesignのGPUは色?CMYKなの?RGBなの? 1 2022/05/09 19:13
- Web・クリエイティブ CMYKロゴをガイドラインにないRGBで使用する際の色はどうするべき?? デザイナーです。 連携会社 1 2022/05/25 16:21
- Visual Basic(VBA) エクセル VBA 条件付き書式 簡略化したい 2 2022/06/02 17:46
- プリンタ・スキャナー 液タブを使っておられる方に質問です。 RGBカラーとCMYKカラーというのを最近知ったのですが、アイ 1 2022/09/04 21:48
- Visual Basic(VBA) セルの値を比較してセルの値の色を変更するには 4 2022/05/22 20:28
- CPU・メモリ・マザーボード パソコンに詳しい方、ご教授戴けましたなら 非常に助かります。 アドレサブルRGB(ARGB)端子の無 1 2022/10/13 18:03
- Illustrator(イラストレーター) Illustratorでオブジェクトの色が勝手に変わって困っています。 4 2022/09/04 18:47
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
フォームでPDFを表示させた...
-
DateTimePickerでに年月までし...
-
リストコントロール(MFC or API...
-
VBAでリストボックス内で↑↓の操...
-
スピンボタンを右クリックして...
-
regsvr32でActiveX登録を行ったocx
-
アイコンをピクチャーボックス...
-
VCのコントロール最大配置数は?
-
ActiveXコントロールを.NETにイ...
-
VB.Net Tabコントロール中のす...
-
コモンダイアログコントロール...
-
CEdit の内容が変わった時にメ...
-
エクセル2003オプションの...
-
警告表示を非表示にしたい
-
ラジオボタンのグループ化の方法
-
VB タブページの自動切り替え...
-
スクロールバーを点滅させない方法
-
ActiveXコントロールの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
スピンボタンを右クリックして...
-
DateTimePickerでに年月までし...
-
ActiveXコントロールを.NETにイ...
-
フォームでPDFを表示させた...
-
コモンダイアログコントロール...
-
連続で印刷すると画像が更新さ...
-
VScrollBarの点滅を何とかしたい。
-
エクセル - リストボックスのマ...
-
CEdit の内容が変わった時にメ...
-
空のリストビューで1行おきに...
-
リストコントロール(MFC or API...
-
TabControlとToolBarの背景色変更
-
タブコントロール上のリストコ...
-
アイテムを点滅させる
-
EXCELVBA リストボックスで選択...
-
regsvr32でActiveX登録を行ったocx
-
Accessのタブコントロールを2...
-
VB6.0のデザイン時 コントロー...
おすすめ情報