ボタンと背景の表示について

解決


鈴木  2003-01-23 02:06:10  No: 50947  IP: [192.*.*.*]

起動するとウィンドウの背景にビットマップを表示(ウィンドウの背景)し、普通のボタンをその上に作りたいのですがうまくいきません。
サンプルを見て試してみたのですが、根本的に理解しきれていないようで結局自分では解決できませんでした。
このソースだとボタンの表示されるべき場所をクリックすると一瞬だけボタンが現れてそのまま消えてしまいます。
ビットマップを無しにすると、ボタンのあるべき場所をクリックしたらボタンが出現するのですが、起動しただけではただウィンドウがあるだけの状態になります。
「こんなこともできないならプログラム組もうとするなよ」と思われるかもしれませんが、よろしくお願いします。
環境: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;

編集 削除
YuO  2003-01-23 04:49:40  No: 50948  IP: [192.*.*.*]

親ウィンドウを生成するときに,WS_CLIPCHILDRENを付けていないのでは?

編集 削除
鈴木  2003-01-23 19:12:06  No: 50949  IP: [192.*.*.*]

早速の回答ありがとうございます。
確かに付いていませんでした。
WS_CLIPCHILDRENをつけたところ、ボタンが一瞬だけ現れて消えるという減少はなくなりました。
しかし、今度は起動時にちょうどボタンのあるはずのところがウィンドウの下にあるものが透けて見えている状態になってしまいました。

編集 削除
鈴木  2003-01-31 00:53:13  No: 50950  IP: [192.*.*.*]

表題のことは解決したので「解決」付けときます。
新たなことはちゃんと別記事で質問します。

編集 削除