画像を切り替えるプログラムで悩んでいます。
C言語で、ビットマップを『2枚』表示した後、メニューの選択により、どちらかの画像だけを表示したいのです、色々試して見たのですが、うまく行きません。ヒント、アドバイスをお願いします。
本当は『2枚』だけでなく、スキャンして、保存した画像を全て表示したいのですが、まだその方法が出来ません。
1、グローバルな変数として、
HDC hdc_mem1, hdc_mem2;//2種類のメモリデバイスコンテキストハ ンドルを格納
int show_no = 1;//画像選択のための変数1で初期化
2、/*ウィンドウプロシージャ*/
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
HDC hdc;
static DWORD dwRop;
PAINTSTRUCT ps;
HBITMAP hBmp;
HDC hdc_memx;
switch(msg){
case WM_CREATE:
hdc = GetDC(hWnd);
hdc_mem1, hdc_mem2;
dwRop = SRCCOPY;
hBmp = LoadBitmap(hInst, "MYBMP1");
if(hBmp == NULL){
MessageBox(hWnd, "画像1のロードに失敗しました", "エラー",
MB_OK | MB_ICONWARNING);
return 0;
}
hdc_mem1 = CreateCompatibleDC(hdc);
SelectObject(hdc_mem1, hBmp);
hBmp = LoadBitmap(hInst, "MYBMP2");
if(hBmp == NULL){
MessageBox(hWnd, "画像2のロードに失敗しました", "エラー",
MB_OK | MB_ICONWARNING);
return 0;
}
hdc_mem2 = CreateCompatibleDC(hdc);
SelectObject(hdc_mem2, hBmp);
ReleaseDC(hWnd, hdc);
break;
case WM_PAINT:
BeginPaint(hWnd, &ps);
hdc_memx = hdc_mem1, hdc_mem2;
if(show_no == 1)
hdc_memx = hdc_mem1; //変化なし
hdc_memx != hdc_mem2;//変化なし
if(show_no == 2)
hdc_memx = hdc_mem2; /変化なし
hdc_memx != hdc_mem1;/変化なし
BitBlt(ps.hdc, ps.rcPaint.left, ps.rcPaint.top,
ps.rcPaint.right - ps.rcPaint.left,
ps.rcPaint.bottom - ps.rcPaint.top,
hdc_mem1, ps.rcPaint.left, ps.rcPaint.top,
dwRop);
BitBlt(ps.hdc, 400,200,
ps.rcPaint.right - ps.rcPaint.left,
ps.rcPaint.bottom - ps.rcPaint.top,
hdc_mem2, ps.rcPaint.left, ps.rcPaint.top,
dwRop);
EndPaint(hWnd, &ps);
break;
case WM_COMMAND:
switch (LOWORD(wp)){
case IDM_PICT1:
show_no = 1;
InvalidateRect(hWnd, NULL, TRUE);
break;
case IDM_PICT2:
show_no = 2;
InvalidateRect(hWnd, NULL, TRUE);
break;
case IDM_SRCCOPY:
dwRop = SRCCOPY;
InvalidateRect(hWnd, NULL, TRUE);
break;
case IDM_NOTSRCCOPY:
dwRop = NOTSRCCOPY;
InvalidateRect(hWnd, NULL, TRUE);
break;
case IDM_SRCAND:
dwRop = SRCAND;
InvalidateRect(hWnd, NULL, TRUE);
break;
case IDM_SRCPAINT:
dwRop = SRCPAINT;
InvalidateRect(hWnd, NULL, TRUE);
break;
case IDM_END:
SendMessage(hWnd, WM_CLOSE, 0, 0);
break;
}
break;
case WM_DESTROY:
DeleteObject(hBmp);
DeleteObject(hBmp);
DeleteDC(hdc_mem1);
DeleteDC(hdc_mem2);
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, msg, wp, lp));
}
return 0;
}
3、if文のところを色々と変えたのですが、うまく切り替わってくれません。
if(show_no == 1)
hdc_memx = hdc_mem1;
hdc_memx != hdc_mem2;
if(show_no == 2)
hdc_memx = hdc_mem2;
hdc_memx != hdc_mem1;
お礼
そういえばそうでした。 これはポインタの宣言でした。 これはMYDATA型でlpmydataというポインタを宣言しているのでした。すっかりポインタの使い方を忘れていました。 ありがとうございました。