トグルスイッチの基本形とBOOLについて教えてください。
BOOL flg;
if(クリックしたら)
if(flg==TRUT){
TextOut(hWnd,0,0,A,1);
flg=FALSE
}else}
TextOut(hWnd,0,0,B,1);
flg=TRUE
}
これではだめでした。
hWndはhdcでした。
でもできません。
どうだめなのですか?
かなり部分的なソースコードなので、良くも悪くも判断つきにくいですね。
もしかしたら、flgの制御はできているけどTextOut()が失敗しているだけかもしれませんし...
#include <windows.h>
BOOL flg = TRUE;
省略
case WM_RBUTTONDOWN:
if(flg==TRUE){
hdc = GetDC(hWnd);
TextOut(hdc,0,0,A,1);
flg==FALSE;
ReleaseDC(hWnd,hdc);
}else{
hdc = GetDC(hWnd);
TextOut(hdc,0,0,B,1);
flg==TRUE;
ReleaseDC(hWnd,hdc);
}
flgは常にTRUEです。
flg==FALSE;
の書き方が悪いという気もします。
#include <windows.h>
BOOL flg = FALSE;
とすれば常にFALSEです。
BOOLへの代入はこれでいいんですか?
flg がグローバル変数なら
if(flg)
{
flg = FALSE;
}
else
{
flg = TRUE;
}
でいいと思います。
できてるはずなのに、ソースのミスが見つけられません。
#include <windows.h>
BOOL flg;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
HWND hWnd;
WNDCLASSEX wc;
MSG msg;
wc.cbSize =sizeof(WNDCLASSEX);
wc.style =0;
wc.lpfnWndProc =(WNDPROC)WndProc;
wc.cbClsExtra =0;
wc.cbWndExtra =0;
wc.hInstance =hInstance;
wc.lpszMenuName =NULL;
wc.lpszClassName =Z;
wc.hIcon =LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm =LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor =LoadCursor(NULL,IDI_APPLICATION);
wc.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
RegisterClassEx(&wc);
hWnd = CreateWindowEx(0,Z,",WS_OVERLAPPEDWINDOW,
0,0,100,100,(HWND)NULL,(HMENU)NULL,hInstance,(LPSTR)NULL);
ShowWindow(hWnd,SW_SHOWNORMAL);
UpdateWindow(hWnd);
while(GetMessage( &msg, NULL, 0, 0)){
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return 0;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
HDC hdc;
PAINTSTRUCT ps;
switch(uMsg){
case WM_RBUTTONDOWN:
if(flg==TRUE){
hdc = GetDC(hWnd);
TextOut(hdc,0,0,A,1);
flg==FALSE;
ReleaseDC(hWnd,hdc);
}else{
hdc = GetDC(hWnd);
TextOut(hdc,0,0,B,1);
flg==TRUE;
ReleaseDC(hWnd,hdc);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
>できてるはずなのに、ソースのミスが見つけられません。
何を根拠にしているのでしょう?
>flg==FALSE;
>flg==TRUE;
そもそも == は等値演算子であって、代入演算子ではありません。
あなたの環境ではコンパイルをすれば警告等でないのですか?
== でした。
ありがとうございます。