96编辑器旗下产品
找图
终身
ID:0
到期时间:永久
退出登录
您的位置:首页 > 百科管理 > 详情

c 窗体背景图片素材-c# form窗体添加背景图片,代码怎么写?

原创:找图网 2023-06-20 14:20:21
  • vc++如何给窗体添加背景图片?

  • VC是一个功能强大的可视化的开发工具,但是用VC做的标准界面与Windows一样色彩灰暗单调,例如多文档窗口应用程序中的主框架窗口的背景便是如此。那么能否给主框架窗口的背景改变一下色彩或是给主框架窗口加上一幅漂亮的图片做背景?其实也不难。但与单文档窗口应用程序中改变框架窗口的背景方法不同,对多文档窗口应用程序中的主框架窗口改变背景不能简单地用ClassWizard重载OnEraseBkgnd(CDC* pDC)函数的方法实现。因为多文档窗口应用程序中的主框架窗口的背景区是一个MDIClient类的窗口,因此改变背景与这个MDIClient类的窗口有关。MDIClient类的窗口的句柄是m_hWndMDIClient(在CMDIFrameWnd中)。以下是其实现的步骤:

    一、 使用MFC AppWizard向导创建一个多文档窗口应用程序

    1、在VC的“File”菜单中单击[New],弹出一“New”对话框。在“Projects”页中选择“MFC AppWizard [exe]”,在“Project name”编辑框中输入“DrawBackground”,按[OK]按钮,退出“New”对话框。

    2、在“MFC AppWizard step 1”对话框到“MFC AppWizard step 6”对话框中选择默认选项,按[Finish]按钮即完成多文档窗口应用程序的定制。

    注:MFC(Microsoft Foundation Class)是MS-Visual C++的类库。

    二、向应用程序添加位图

    在VC的“View”菜单中单击“Resource Includes...”, 在弹出对话框中选择“Bitmap”, 按[Import]按钮从文件中加载位图文件,单击“Workspace”的“Resource”便可见到刚才加载的位图文件,默认的资源标识符为IDB_BITMAP1。

    三、用ClassWiard生成一个 CWnd 类的派生类CclientWnd

    在CclientWnd类中重载OnEraseBkgnd(CDC* pDC),OnSize(UINT nType, int cx, int cy)函数,并用手工加入重载的虚函数WNDPROC* CClientWnd::GetSuperWndProcAddr()用来返回函数指针。

    类CclientWnd的头文件代码如下:

    class CClientWnd : public CWnd

    {

    // Construction

    public:

    CClient();

    // Attributes

    public:

    // Operations

    public:

    // Overrides

    // ClassWizard generated virtual function overrides

    file://{{AFX_VIRTUAL(CClientWnd)

    public:

    virtual WNDPROC* GetSuperWndProcAddr();

    file://}}AFX_VIRTUAL

    // Implementation

    public:

    virtual ~CClientWnd();

    // Generated message map functions

    protected:

    file://{{AFX_MSG(CClientWnd)

    afx_msg BOOL OnEraseBkgnd(CDC* pDC);

    afx_msg void OnSize(UINT nType, int cx, int cy);

    file://}}AFX_MSG

    DECLARE_MESSAGE_MAP()

    };

    类CclientWnd的实现文件代码如下:

    // CClientWnd message handlers

    BOOL CClientWnd::OnEraseBkgnd(CDC* pDC)

    {

    // TODO: Add your message handler code here and/or call default

    CRect rectbk; // 客户区的大小

    CDC dcMen; // 内存设备描述表

    CBitmap bmbk; // 位图对象

    (IDB_BITMAP1); // 从资源加载位图 bitmap

    // 得到位图bitmap的大小

    BITMAP stBitmap;

    (sizeof(BITMAP),&stBitmap);

    CSize bmsize(,);

    ////////

    (pDC); // 创建兼容的设备描述表

    // 选入新的位图对象并保存旧的位图对象

    CBitmap *pold=(&bmbk);

    GetClientRect(&rectbk);

    // 取得客户区的大小

    // 从内存向屏幕复制位图对象

    pDC->StretchBlt(,,(),

    (),&dcMen,0,0,,,SRCCOPY);

    (pold);

    // 恢复旧的位图对象 ();// 释放内存设备描述表 return true; }

    WNDPROC* CClientWnd::GetSuperWndProcAddr()

    {static WNDPROC NEAR pfnSuper = NULL; return &pfnSuper; // 返回函数指针 }

    void CClientWnd::OnSize(UINT nType, int cx, int cy)

    {CWnd::OnSize(nType, cx, cy);// TODO: Add your message handler code here file://重画窗口Invalidate(); }

    四、修改CMainFrame类

    在CMainFrame类中定义一个CClientWnd 类的成员变量m_wndClient,并在CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)函数中把m_wndClient子类化为主框架窗口的客户窗口。代码如下:

    在MainFrm.h 中加入:

    #include "ClientWnd1.h"

    class CMainFrame : public CMDIFrameWnd

    {private: CClientWnd m_wndClient;};

    中加入代码如下:

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

    {if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)

    return -1;

    file://把m_wndClient子类化为主框架窗口的客户窗口

    if(!m_(m_hWndMDIClient))

    {TRACE("Fail to subclass MDI client window\n");

    return -1;}}

    五、关键技术

    1、本程序并不复杂,关键是要知道多文档窗口应用程序中的主框架窗口的背景区是一个MDIClient类的窗口。

    2、选用函数要正确,如CClientWnd::OnEraseBkgnd(CDC* pDC)函数中选用GetClientRect(&rectbk) 函数来取得客户区的大小要比选用GetClipBox(&rectbk) 函数来得好。

    3、要在CclientWnd类中重载OnSize(UINT nType, int cx, int cy) 函数,并加入Invalidate() 函数重画窗口。

  • C#窗体背景如何美化?怎么让整个窗体都是背景?

  • = ("0.bmp");

    = ;

    然后把这些写在基类的load事件里边,让别的窗口继承

    这样就都一样了

  • c# form窗体添加背景图片,代码怎么写?

  • 有两种方法,方法一:

    1、 = (@"图片路径")

    2、 = [0]

    方法二:

    imageList设置图片像素只能是在1-256

    C# 窗体背景图片怎么跟随窗体变化而变化

    背景图单独存放在其它位置后,当窗口的OnResize事件发生时,

    对图片缩放后,作为背景。根据此原理,实现如下:

    这里借用了一个pictureBox.不改变它的其它属性,如改变Image属性后,编写如下代码

    private void Form2_SizeChanged(object sender, e){loadBackImage();}

    private void loadBackImage(){Bitmap bit = new Bitmap(,);

    Graphics g =  (bit);

    g.DrawImage(,newRectangle(0,0,,),0,0,,,);

    = bit;

    g.Dispose();}private void Form2_Load(object sender, e)loadBackImage();}

    最新文章 更多
    最新素材 更多
    公司介绍 网站地图 图片资讯
    Copyright © 2010-2022 山东找图网络科技有限公司  鲁ICP备18007836号-3  邮箱:15653358549@163.com