<windows编程>中如何更换窗口背景

C/C++ code

LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    HINSTANCE hInstance ;
    static HBITMAP hBitmap ;
    static cxSource,cySource,cxClient,cyClient;
    BITMAP bitmap ;//bitmap是一个类
    HDC hdc,hdcMem ;
    PAINTSTRUCT ps ;
    switch(message)
    {
    case WM_CREATE:
        hInstance = ((LPCREATESTRUCT)lParam)->hInstance ;
        hBitmap = LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BG));
        GetObject(hBitmap,sizeof(BITMAP),&bitmap) ;
        cxSource = bitmap.bmWidth ;
        cySource = bitmap.bmHeight ;
        return 0;
    case WM_SIZE:
        cxClient = LOWORD(lParam) ;
        cyClient = HIWORD(lParam) ;
        return 0;
    case WM_PAINT:
        hdc = BeginPaint(hwnd,&ps) ;//BeginPaint将和绘图有关的信息填充到一个paintstruct结构体中
        hdcMem = CreateCompatibleDC(hdc) ;
        SelectObject(hdcMem,hBitmap) ;
        StretchBlt(hdc,0,0,cxClient,cyClient,hdcMem,0,0,cxSource,cySource,MERGECOPY) ;
        EndPaint(hwnd,&ps) ;
        return 0;





以上为部分代码,作用不言而喻:就是要把一张位图画到窗口上作为背景,效果如下:




但遗憾的是,我只要稍微更改一下窗口的大小,窗口背景立刻变成原来的颜色,
即默认色:wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH)


这显然不是我要的,呵呵,各位大侠怎么办啊?

作者: zjh171   发布时间: 2011-06-16

怎么样才可以拉伸或者压缩窗口大小的时候窗口的背景仍然是我的那个位图呢?

作者: zjh171   发布时间: 2011-06-16

触发了其它的函数,onpaint(),redraw(),onsize等函数。

作者: W170532934   发布时间: 2011-06-16

你只要在WM_ERASEBKGND消息里返回TRUE,禁止系统自动重绘就行了。

作者: Bokutake   发布时间: 2011-06-16

引用 2 楼 w170532934 的回复:

触发了其它的函数,onpaint(),redraw(),onsize等函数。


StretchBlt()函数

作者: agoago_2009   发布时间: 2011-06-16