起動するとウィンドウの背景にビットマップを表示(ウィンドウの背景)し、普通のボタンをその上に作りたいのですがうまくいきません。
サンプルを見て試してみたのですが、根本的に理解しきれていないようで結局自分では解決できませんでした。
このソースだとボタンの表示されるべき場所をクリックすると一瞬だけボタンが現れてそのまま消えてしまいます。
ビットマップを無しにすると、ボタンのあるべき場所をクリックしたらボタンが出現するのですが、起動しただけではただウィンドウがあるだけの状態になります。
「こんなこともできないならプログラム組もうとするなよ」と思われるかもしれませんが、よろしくお願いします。
環境:VC++6(SP5)、SDK、Windows2000、サンプル(恐らくこのHPで貰っていったものです)
LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
static HWND hChdWnd;
switch (uMsg)
{
case WM_CREATE:
//背景
hBitmap = (HBITMAP)LoadImage((HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),ファイル名,IMAGE_BITMAP,Width,Height,LR_LOADFROMFILE);
//ボタン
hChdWnd = CreateControlWindow(hwnd,20,10,100,100,WS_EX_WINDOWEDGE,BS_PUSHBUTTON,"終了","BUTTON",(HMENU)ID_END,(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE));
break;
case WM_PAINT:
BITMAP BMPINFO;
HDC hMem, hDC;
if (hBitmap!=NULL)
{
hDC=GetDC(hwnd);
GetObject(hBitmap, sizeof(BITMAP), &BMPINFO);
hMem = CreateCompatibleDC(hDC);
SelectObject(hMem, hBitmap);
BitBlt(hDC, 0, 0, BMPINFO.bmWidth, BMPINFO.bmHeight, hMem, 0, 0, SRCCOPY);
DeleteDC(hMem);
ReleaseDC(hwnd, hDC);
}
break;
親ウィンドウを生成するときに,WS_CLIPCHILDRENを付けていないのでは?
早速の回答ありがとうございます。
確かに付いていませんでした。
WS_CLIPCHILDRENをつけたところ、ボタンが一瞬だけ現れて消えるという減少はなくなりました。
しかし、今度は起動時にちょうどボタンのあるはずのところがウィンドウの下にあるものが透けて見えている状態になってしまいました。
表題のことは解決したので「解決」付けときます。
新たなことはちゃんと別記事で質問します。
ツイート | ![]() |