2。答:对话框属性中style的border属性不设为resizing

解决方案 »

  1.   

    感觉24bit的位图也行。
    先读入图片,再blt
      

  2.   

    HBITMAP CDandelionDlg::BufferToBITMAP(LPSTR path)
    {
    LPSTR p;
    DWORD size;
    CFile pf; pf.Open(path,CFile::modeRead);
    size=pf.GetLength();
    p=new char[size];
    pf.ReadHuge(p,size);
    pf.Close();
    HBITMAP hBmp;
    LPSTR hDIB,lpBuffer=p;
    LPVOID lpDIBBits;
    BITMAPFILEHEADER bmfHeader;
    DWORD bmfHeaderLen; bmfHeaderLen=sizeof(bmfHeader);
    strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);
    if(bmfHeader.bfType!=((WORD)('M'<<8)|'B'))return NULL; hDIB=lpBuffer+bmfHeaderLen; BITMAPINFOHEADER &bmiHeader=*(LPBITMAPINFOHEADER)hDIB;
    BITMAPINFO &bmInfo=*(LPBITMAPINFO)hDIB;
    int nColors=bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1<<bmiHeader.biBitCount; //Specail process for more than 256 color bitmap.
    if(bmInfo.bmiHeader.biBitCount>8)
    lpDIBBits=(LPVOID)((LPDWORD)(bmInfo.bmiColors+bmInfo.bmiHeader.biClrUsed)+
    ((bmInfo.bmiHeader.biCompression==BI_BITFIELDS) ? 3 : 0));
    else
    lpDIBBits=(LPVOID)(bmInfo.bmiColors+nColors);
    CClientDC dc(this);
    hBmp=CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS); delete[] p;
    return hBmp;
    }
      

  3.   

    第一个问题:
    先在对话框类的头文件中定义:
    CBrush  mybrush;
    在你的对话框中重载OnInitDialog()函数并加入以下代码:
    CBitmap  *lsbitmap=new CBitmap;
    lsbitmap->LoadBitmap(IDB_BITMAP1);//IDB_BITMAP1为位图的资源符号;
    mybrush.CreatePatternBrush(lsbitmap);
    第二个问题如 freeleo(粑粑) 所说:)
    第三个问题:
    你可以灵活一点嘛,如果对话框大小已经固定,那就用图象处理软件把图象处理一下嘛!或对话框的大小依据图象而定:)
    第四个问题:
    Visual C++ 5.0以前的版本不能用,可现在的已可以把8位以上位图作为资源加入应用程序中了呀!这方面的用法有很多介绍的,很好找的:))
      

  4.   

    可以啊,用bitmap资源中的import导入图片生成资源,在用bitblt或stretchblt即可
      

  5.   

    加入背景图,可自动平铺
    #ifndef _BACKGROUNDUTIL_H_
    #define _BACKGROUNDUTIL_H_#if _MSC_VER >= 1000
    #pragma once
    #endif // _MSC_VER >= 1000class CBackgroundUtil  
    {
    public:
    BOOL SetBitmap(UINT uResourceID = 0);
    CBackgroundUtil();
    virtual ~CBackgroundUtil();protected:
    BOOL TileBitmap(CDC* pDC, CRect rc);
    BOOL GetBitmapAndPalette(UINT nIDResource, CBitmap& bitmap, CPalette& pal);
    // For background bitmap
    CBitmap m_BmpPattern;
    CPalette m_BmpPalette;
    int m_nBmpWidth;
    int m_nBmpHeight;
    };#endif#include "stdafx.h"
    #include "BackgroundUtil.h"#ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endif//////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////CBackgroundUtil::CBackgroundUtil()
    {
    }
    CBackgroundUtil::~CBackgroundUtil()
    {
    m_BmpPattern.Detach();
    m_BmpPalette.Detach();
    }
    BOOL CBackgroundUtil::SetBitmap(UINT uResourceID)
    {
    BITMAP bm;
    BOOL bRet; // Detach previous resources
    m_BmpPattern.Detach();  
    m_BmpPalette.Detach();   // Default return value
    bRet = TRUE; // Load new bitmap
    if (uResourceID != 0)
    {
    bRet = GetBitmapAndPalette(uResourceID, m_BmpPattern, m_BmpPalette);
    // If all ok
    if (bRet == TRUE)
    {
    // Get dimension
    m_BmpPattern.GetBitmap(&bm);
    // Width of the bitmap
    m_nBmpWidth = bm.bmWidth;
    // Height of the bitmap
    m_nBmpHeight = bm.bmHeight;
    }
    } return bRet;
    } // End of SetBitmap
    BOOL CBackgroundUtil::GetBitmapAndPalette(UINT nIDResource, CBitmap & bitmap, CPalette & pal)
    {
    LPCTSTR lpszResourceName = (LPCTSTR)nIDResource; HBITMAP hBmp = (HBITMAP)::LoadImage( AfxGetInstanceHandle(), 
    lpszResourceName, IMAGE_BITMAP, 0,0, LR_CREATEDIBSECTION); if (hBmp == NULL) return FALSE; bitmap.Attach(hBmp); // Create a logical palette for the bitmap
    DIBSECTION ds;
    BITMAPINFOHEADER &bmInfo = ds.dsBmih;
    bitmap.GetObject(sizeof(ds), &ds); int nColors = bmInfo.biClrUsed ? bmInfo.biClrUsed : 1 << bmInfo.biBitCount; // Create a halftone palette if colors > 256. 
    CClientDC dc(NULL); // Desktop DC if(nColors > 256)
    pal.CreateHalftonePalette(&dc);
    else
    {
    // Create the palette
    RGBQUAD *pRGB = new RGBQUAD[nColors];
    CDC memDC;
    memDC.CreateCompatibleDC(&dc);
    memDC.SelectObject( &bitmap );
    ::GetDIBColorTable( memDC, 0, nColors, pRGB );
    UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * nColors);
    LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize];
    pLP->palVersion = 0x300;
    pLP->palNumEntries = nColors;
    for (int i=0; i < nColors; i++)
    {
    pLP->palPalEntry[i].peRed = pRGB[i].rgbRed;
    pLP->palPalEntry[i].peGreen = pRGB[i].rgbGreen;
    pLP->palPalEntry[i].peBlue = pRGB[i].rgbBlue;
    pLP->palPalEntry[i].peFlags = 0;
    }
    pal.CreatePalette( pLP );
    delete[] pLP;
    delete[] pRGB;
    }
    return TRUE;
    } // End of GetBitmapAndPalette
    BOOL CBackgroundUtil::TileBitmap(CDC* pDC, CRect rc)
    {
    CDC MemDC; int x = 0, y = 0; // If there is a bitmap loaded
    if (m_BmpPattern.m_hObject != NULL)
    {
    MemDC.CreateCompatibleDC(pDC);
    CBitmap* pOldBitmap = MemDC.SelectObject(&m_BmpPattern); // Tile the bitmap
    while (y < rc.Height()) 
    {
    while(x < rc.Width()) 
    {
    pDC->BitBlt(x, y, m_nBmpWidth, m_nBmpHeight, &MemDC, 0, 0, SRCCOPY);
    x += m_nBmpWidth;
    }
    x = 0;
    y += m_nBmpHeight;
    } MemDC.SelectObject(pOldBitmap); return TRUE;
    } return FALSE; // Normal behaviour
    } // End of TileBitmap使用,在你的对话框类上加入基类
    如class CMyDlg : public CDialog,public CBackgroundUtil加入消息函数 ON_WM_ERASEBKGND()
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);BOOL CCurPriceDlg::OnEraseBkgnd(CDC* pDC) 
    {
    CRect rc; GetClientRect(rc); if (TileBitmap(pDC, rc) == TRUE)
    return TRUE;
    else
    return CDialog::OnEraseBkgnd(pDC);
    } // End of OnEraseBkgnd在OnInitDialog()中加入
    SetBitmap(IDB_BMPBACK);

    SetBitmap("c:\wwww.bmp");//位图文件
      

  6.   

    一、在对话类声明一个CBrush m_brush的全局刷子.二、重载OnCtlColor();
    HBRUSH CMyTmpLateDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    if(pWnd == this)
    return m_brush;
    else
    return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    }三、在OnInitDialog取得背景刷BOOL CMyTmpLateDlg::OnInitDialog() 
    {
    CDialog::OnInitDialog();
             CBitmap m_bitmap;
             MakeMyBkBrush(m_bitmap,"e:\\1.bmp");
             m_brush.CreatePatternBrush(&m_bitmap);
    return TRUE;  
    }四、背景图象函数。
    BOOL CMyTmpLateDlg::MakeBitmapFromFile(CBitmap & DesBitmap,LPCTSTR FileName)
    {
    CFile m_file;
    HGLOBAL m_hGlobal; 
    int filelen;
    LPVOID pvData;
    IStream *pStm; 
    IPicture *pPic;
    CDC *pDC,SrcDC; OLE_XSIZE_HIMETRIC hmWidth; 
    OLE_YSIZE_HIMETRIC hmHeight;  if (!m_file.Open(FileName,CFile::modeRead|CFile::shareDenyWrite))
    {
    MessageBox("无法打开图片文件!");
    return FALSE;
    } filelen = m_file.GetLength();
    m_hGlobal = GlobalAlloc(GMEM_MOVEABLE, filelen);  if(!m_hGlobal){
    MessageBox("获取内存出错!");
    return FALSE;
    }

    pvData = GlobalLock(m_hGlobal);  if(!pvData){
    MessageBox("取内存指针出错!");
    GlobalUnlock(m_hGlobal); 
    GlobalFree(m_hGlobal);
    return FALSE;
    } m_file.Read(pvData, filelen); 
    m_file.Close();
    GlobalUnlock(m_hGlobal); 

    if(CreateStreamOnHGlobal(m_hGlobal, TRUE, &pStm)!=S_OK)
    {
    MessageBox("无法创建流!");
    GlobalFree(m_hGlobal);
    return FALSE; 
    } if(!(SUCCEEDED(OleLoadPicture(pStm,filelen,TRUE,IID_IPicture,(LPVOID*)&pPic))))
    {
    MessageBox("无法从流中装载图片!");
    pStm->Release();
    GlobalFree(m_hGlobal);
    return FALSE;
    } GlobalFree(m_hGlobal); pPic->get_Width(&hmWidth); 
    pPic->get_Height(&hmHeight);  if(DesBitmap.GetSafeHandle())
    DesBitmap.DeleteObject(); pDC = GetDC();
    DesBitmap.CreateCompatibleBitmap(pDC,m_size.cx,m_size.cy);
    SrcDC.CreateCompatibleDC(pDC);
    ReleaseDC(pDC);
    SrcDC.SelectObject(&DesBitmap);         CRect rect;
             GetClientRect(&rect);
             CSize m_size(rect.Width(),rect.Height());
    if(FAILED(pPic->Render(SrcDC,0,0,m_size.cx,m_size.cy,0,
    hmHeight,hmWidth,-hmHeight,NULL)))
    {
    MessageBox("无法显示图片!"); 
    pPic->Release();
    pStm->Release();
    return FALSE;
    } pPic->Release();
    pStm->Release(); return TRUE;
    }