アプリ版:「スタンプのみでお礼する」機能のリリースについて

チェックボックスがチェックされてないなら
intのiに0以外を入れたいのですが、
i = !SendMessage(hchk, BM_GETCHECK, 0, 0);
のように書けばいいですよね?
Win32のC++ですがCのタイプの平凡なキャストを使うとして
i = (int)!((BOOL)SendMessage(hchk, BM_GETCHECK, 0, 0));
こうすればよいソースになったつもりですが、どうですか?

A 回答 (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 は、例として、書かれてると、思いますが・・・(^^;;
    • good
    • 0

私的には、いくらtypedefだとはいえint型にBOOL型を代入するのはあまり気分がよいものとは感じません。

なので私ならこの場合は三項演算を用いて

i = ((SendMessage(hchk, BM_GETCHECK, 0, 0) == BST_CHECKED) ? 0 : 1);

と書きたいところです。
『チェックされていないときは0以外』
と曖昧にするよりも、
『チェックされていたら0、チェックされてなければ1』
と明示してしまったほうが、そしてそれが明示されていることがわかるコードを書いて置く方が、あとで読み直したときにどういう値を入れているのか理解しやすいと思います。

もっとも、一般的に三項演算を推奨しているかどうかは微妙なところなので、そこのあたりは自分の信念などと考察してみてください。
    • good
    • 0

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とみなされます。
    • good
    • 0

> 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;
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!