
A 回答 (4件)
- 最新から表示
- 回答順に表示

No.4
- 回答日時:
こんばんわ
プログラミングは、三者三様色々な方法がありますね。だから面白いんですけど(^^
int を、ボタンの状態に、使用すること。良いソース(私の定義では、誰が見ても、分かり易く、メインテナンスがしやすいソースと、思ってます)と言うことであれば・・・
const int BTN_CHECKED=0
const int BTN_NOTCHECKED=-1
int iButton = BTN_CHECKED;
if( SendMessage(hchk, BM_GETCHECK, 0, 0) != BST_CHECKED )
{
iButton = BTN_NOTCHECKED;
}
です。まあ、i は、例として、書かれてると、思いますが・・・(^^;;
No.3
- 回答日時:
私的には、いくらtypedefだとはいえint型にBOOL型を代入するのはあまり気分がよいものとは感じません。
なので私ならこの場合は三項演算を用いてi = ((SendMessage(hchk, BM_GETCHECK, 0, 0) == BST_CHECKED) ? 0 : 1);
と書きたいところです。
『チェックされていないときは0以外』
と曖昧にするよりも、
『チェックされていたら0、チェックされてなければ1』
と明示してしまったほうが、そしてそれが明示されていることがわかるコードを書いて置く方が、あとで読み直したときにどういう値を入れているのか理解しやすいと思います。
もっとも、一般的に三項演算を推奨しているかどうかは微妙なところなので、そこのあたりは自分の信念などと考察してみてください。
No.2
- 回答日時:
i = SendMessage(hchk, BM_GETCHECK, 0, 0) == BST_CHECKED;
i = ( SendMessage(hchk, BM_GETCHECK, 0, 0) == BST_CHECKED );
とした方がわかりやすいかなぁと・・・
SendMessage(hchk, BM_GETCHECK, 0, 0)は
2を返すことがあります。
チェックボックスが灰色に表示されているときです。
そして、
int i = !2;
はfalseとみなされます。
No.1
- 回答日時:
> i = !SendMessage(hchk, BM_GETCHECK, 0, 0);
> のように書けばいいですよね?
訊くまでもない。やってみりゃわかる。
> Win32のC++ですがCのタイプの平凡なキャストを使うとして
> i = (int)!((BOOL)SendMessage(hchk, BM_GETCHECK, 0, 0));
> こうすればよいソースになったつもりですが、どうですか?
キャストで誤魔化すコードのどこがよいコード?
もっと素直に:
i = SendMessage(hchk, BM_GETCHECK, 0, 0) == BST_CHECKED;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
visualstudio C# テキストボッ...
-
DWORDの実際の型は何でしょうか
-
2重定義って??
-
typedef enumの使い方を教えて...
-
C++でboolにintの値を代入する...
-
構造体の宣言でエラーが出ます。
-
構造体の要素すべてに対する四...
-
LNK2019: 未解決の外部シンボル...
-
long型の定数の末尾にLを付ける...
-
構造体vectorの入れ子のfillの...
-
呼び出し時のパラメータが足りない
-
プログラムの中で別のmainを呼...
-
HINSTANCEの型
-
main.c:7:43: warning: implici...
-
構造体のvectorを引数として関...
-
外部シンボル未解決
-
C#でオセロを作っているのです...
-
C++builederでのエラー(atoiを...
-
C言語のコンパイルエラー
-
相互参照するクラス、俺こんな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
C++でboolにintの値を代入する...
-
2重定義って??
-
main.c:7:43: warning: implici...
-
typedef enumの使い方を教えて...
-
プログラムの中で別のmainを呼...
-
変数の型を定義しなかった場合...
-
関数の実体定義にヘッダファイ...
-
ハンドルされていない例外が発...
-
構造体の要素すべてに対する四...
-
C言語のコンパイルエラー
-
DLLでLIBファイルが作成されない
-
sshdログの意味
-
DLLのLPSTR 項目の戻り値の取得...
-
enumについて
-
VC6でlong longでエラー?
-
【#define】 defineで定義した...
おすすめ情報