トグルスイッチ

[戻る]
カリン 2002/01/19(土) 12:21:40
トグルスイッチの基本形とBOOLについて教えてください。

BOOL flg;
if(クリックしたら)
if(flg==TRUT){
TextOut(hWnd,0,0,"A",1);
flg=FALSE
}else}
TextOut(hWnd,0,0,"B",1);
flg=TRUE
}

これではだめでした。

カリン 2002/01/19(土) 12:22:38
hWndはhdcでした。
でもできません。

sugar 2002/01/19(土) 12:43:55
どうだめなのですか?
かなり部分的なソースコードなので、良くも悪くも判断つきにくいですね。
もしかしたら、flgの制御はできているけどTextOut()が失敗しているだけかもしれませんし...

カリン 2002/01/19(土) 13:07:43
#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への代入はこれでいいんですか?

NGA 2002/01/19(土) 13:33:41
flg がグローバル変数なら

if(flg)
{
    flg = FALSE;
}
else
{
    flg = TRUE;
}

でいいと思います。

カリン 2002/01/19(土) 13:51:25
できてるはずなのに、ソースのミスが見つけられません。

#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);
}

NGA 2002/01/19(土) 14:00:14
>できてるはずなのに、ソースのミスが見つけられません。
何を根拠にしているのでしょう?

>flg==FALSE;
>flg==TRUE;
そもそも == は等値演算子であって、代入演算子ではありません。
あなたの環境ではコンパイルをすれば警告等でないのですか?

カリン 2002/01/19(土) 15:19:55
[[解決]]
== でした。
ありがとうございます。

古いスレッドには追加発言できません。