簡體   English   中英

C ++ Win32背景圖片

[英]C++ Win32 Background Image

我看過一些背景繪圖教程,但仍然無法繪制背景。 它總是白色的。 我的資源已經在項目中。 我嘗試通過使用繪畫來替代其他方法,但是它仍然不會繪制背景圖像。

#include <windows.h>
#include <commctrl.h>
#include "resource.h"
HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
HWND hProgress, hWndBottom;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    hInst = hInstance;
    MSG msg          = {0};
    WNDCLASS wc      = {0}; 
    wc.lpfnWndProc   = WndProc;
    wc.hInstance     = hInstance;
    wc.hbrBackground = CreatePatternBrush( LoadBitmap( hInstance, MAKEINTRESOURCE(IDB_BG) ));//(HBRUSH)(COLOR_BACKGROUND);
    wc.lpszClassName = "Test";
    if( !RegisterClass(&wc) )
        return 1;
    if( !CreateWindow(wc.lpszClassName,
               "Tests",
               WS_POPUPWINDOW|WS_VISIBLE, //WS_OVERLAPPEDWINDOW|WS_VISIBLE
               1,1,200,250,0,0,hInstance,NULL))
        return 2;
    while( GetMessage( &msg, NULL, 0, 0 ) > 0 )
        DispatchMessage( &msg );
    return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    //Make TopMost
    ::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
    INITCOMMONCONTROLSEX InitCtrlEx;
    InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX);
    InitCtrlEx.dwICC  = ICC_PROGRESS_CLASS;

    SendMessage(hProgress, PBM_SETRANGE, 0, MAKELPARAM(0, 100)); 
    switch(message)
    {
    case WM_CREATE:
        {
             hProgress = CreateWindowEx(0, PROGRESS_CLASS, NULL,
                   WS_CHILD | WS_VISIBLE | PBS_SMOOTH,
                   10, 190, 170, 10,
                   hWnd, NULL, hInst, NULL);
        }
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}  

如果要為背景繪制位圖,則不僅要將背景筆刷設置為位圖的手柄。

而是將背景畫筆設置為NULL,並處理WM_ERASEBKGND消息。 您可以通過繪制位圖來對其進行響應(例如,使用BitBltStretchBlt ),然后返回TRUE (或任何其他非零值)以告知DefWindowProc背景已被擦除,因此不應嘗試擦除它。

請注意,如果要在MDI程序中執行此操作,則需要在MDI客戶端窗口中執行此操作。 使用MDI,您將擁有一個父窗口,一個客戶窗口以及一些MDI子窗口。 MDI客戶端窗口實際上看起來像是主窗口的背景,因此您需要在其中繪制背景。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM