@Y0MMY

Как сменить картинку у кнопки?

Всем привет. Мне нужно было добавить картинку на кнопку, я нашел метод с использованием .bmp формата, но у него невозможно было убрать задний фон, поэтому я начал искать другой способ, нашел способ загрузки png формата, с ним все отлично работает. Но теперь мне надо менять картинку при наведении курсора мыши на кнопку, я пытался отображать через mLoadImg-displayImage, но тогда появляется картинка в картинке, а потом вообще не исчезает(по понятным причинам). Помогите,пожалуйста,сделать так, чтобы при наведении картинка заменялось другой,либо вообще другой метод добавления пикч в кнопку, спасибо
HBITMAP mLoadImg(const WCHAR* szFilename)
{
    HBITMAP result = NULL;
 
 
 
    Gdiplus::Bitmap* bitmap = new Gdiplus::Bitmap(szFilename, false);
    bitmap->GetHBITMAP(NULL, &result);
    delete bitmap;
    return result;
}
 
 
//void CStaticImg::displayImage(HBITMAP mBmp, HWND mHwnd)
void displayImage(HBITMAP mBmp, HWND mHwnd)
{
    RECT myRect;
    BITMAP bm;
    HDC screenDC, memDC;
    HBITMAP oldBmp;
    BLENDFUNCTION bf;
 
 
 
    GetObject(mBmp, sizeof(bm), &bm);
 
 
 
    bf.BlendOp = AC_SRC_OVER;
    bf.BlendFlags = 0;
    bf.SourceConstantAlpha = 0xff;
 
 
 
    bf.AlphaFormat = AC_SRC_ALPHA;
 
 
 
    screenDC = GetDC(mHwnd);
    GetClientRect(mHwnd, &myRect);
 
 
 
    if (mBmp == NULL)
        FillRect(screenDC, &myRect, WHITE_BRUSH);
 
 
 
    else
    {
        memDC = CreateCompatibleDC(screenDC);
        oldBmp = (HBITMAP)SelectObject(memDC, mBmp);
        AlphaBlend(screenDC, 0, 0, myRect.right, myRect.bottom, memDC, 0, 0, bm.bmWidth, bm.bmHeight, bf);
        SelectObject(memDC, oldBmp);
        DeleteDC(memDC);
        ReleaseDC(mHwnd, screenDC);
 
    }
}


case WM_PAINT: 
        {
        
            if (hWnd == btn)
            {
 
                /*PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hWnd, &ps);
                HDC hdc_x = CreateCompatibleDC(NULL);
                HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, L"play.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); //Load the bitmap
                SelectObject(hdc_x, hBitmap); //Put the bitmap into the hdc_x
                int a = 0, b = 0;
 
 
                if (!hBitmap)
                {
                    MessageBox(0, L"da", L"da", 0);
                    FillRect(ps.hdc, &ps.rcPaint, (HBRUSH(CreateSolidBrush(RGB(50, 151, 151)))));
                }
                BitBlt(hdc, 0, 0, 200,161, hdc_x, 0, 0, SRCCOPY); //Draw it.
                EndPaint(hWnd, &ps);*/
                
                displayImage(closeBtn, hWnd);
                
                ValidateRect(hWnd, NULL);
 
            }
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы