본문 바로가기
Programming/Tips(C++,C#)

CreateWindow로 버튼을 만들었을 때, Bitmap 이미지를 씌우면..

by 곰네Zip 2014. 2. 28.

MFC에서는 LoadBitmaps로 하면 될 것 같은데 (해보진 않아서 모름)

 

API에서는 몇가지 방법이 있다.

첫번째 방법은 SendMessage

 

해당 버튼 윈도우로핸들로

SendMessage( hWnd, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hbmp); //hbmp = HBITMAP

 

를 하면 되는데, 문제는 이 경우...

EnableButtons을 하면 이미지가 요상하게 변한다.

 

이런 경우 WM_DRAWITEM에서 draw를 처리해주면 된다.

 

LRESULT CALLBACK wndproc( params)

{

     switch(msg)

      {

                 ...

        case WM_DRAWITEM:

              DrawBtn(hWnd, wParam, lParam);

              ...

}

 

void DrawBtn(HWND hwnd, WPARAM wParam, LPARAM lParam)

{

    /* hwnd = 버튼의 핸들

    wParam = 버튼의 ID

    lParam = LPDRAWITEMSTRUCT */

    LPDRAWITEMSTRUCT lpdis = (LPDRAWITEMSTRUCT)lParam;

    hMemDC = CreateCompatibleDC( lpdis->hDC);

  

    lpdis->itemState : 여기에 상태값이 있다. 나의 경우... DISABLE시에 다른 버튼을 올려야 하므로,

   if( wParam == IDOK)

   {

      if( (lpdis->itemState & ODS_DISABLED) == ODS_DISABLED)

     {

             SelectObject( memDC, hDisableBmp); //이 HBITMAP들은 미리 로딩해 두었다.

     }

      else

       {

              SelectObject(memDC, hEnableBmp);

        }

   }

   BitBlt(lpdis->hDC, ... );

   //DC들 정리

}

반응형

댓글