MFC DLL动态库添加资源显示窗体,并利用双缓冲描画技术描画

在网上查了很多资料关于封装DLL中添加资源显示窗体的具体操作过程,有些可以借鉴。我在这里做一个简单的例子,供大家分享。

在创建的窗体中进行图像的描画,关于双缓冲描画图像的问题,在此总结一下我在处理过程中遇到的一些问题,供大家参考。

 

1 添加资源创建窗体的动态库封装

我使用的是VS2013,和普通的DLL动态库封装相同,首先创建MFC DLL工程(工程名:MFCDLL),在生成的工程文件中添加动态库的外部接口。

例: MFCDLL.h 中添加 extern "C" void Show();

        MFCDLL.cpp中添加 :

        void Show()

        {

               AFX_MANAGE_STATE(AfxGetStaticModuleState());

               CTest test;

               test.DoModal();

        }

        其中 CTest 是添加资源时创建的类。

       MFCDLL.def 中添加 Show。

 然后在工程名上右键添加资源,选择 Dialog 并新建。出现新建的窗体,在窗体上双击弹出类向导,创建类名(CTest),基类选择CDialog,完成。

2 如果想要在创建的窗体上添加描画区域,可以添加Picture控件(或者static edit)。

为添加的Picture控件修改ID名,这样就可以在类向导中为添加的Picture添加变量(m_todraw)。添加的该变量就是描画区域的窗口句柄。

在窗体中要有描画的话,最好是实现virtual BOOL OnInitDialog(); 在该函数中可以添加一些双缓冲描画的初始化。例:

BOOL CTest::OnInitDialog()
{
 CDialog::OnInitDialog();
 RECT rt;
 m_todraw.GetClientRect(&rt);
 hdc = m_todraw.GetDC();
 m_memDC.CreateCompatibleDC(hdc); //随后建立与屏幕显示兼容的内存显示设备
 m_Bmp.CreateCompatibleBitmap(hdc, rt.right - rt.left, rt.bottom - rt.top);  

SelectObject(m_memDC.GetSafeHdc(), m_Bmp);//将位图选入到内存显示设备中
 m_memDC.FillSolidRect(&rt, 0x00FFFFFF);//先用背景色将位图清除干净,这里我用的是白色作为背景
 m_todraw.ReleaseDC(hdc);

 return TRUE;
}

添加WM_Paint的处理事件OnPaint,

void CTest::OnPaint()
{
 CPaintDC dc(this); // device context for painting
 // TODO:  在此处添加消息处理程序代码
 // 不为绘图消息调用 CDialog::OnPaint()
 CDialog::OnPaint();
 PAINTSTRUCT ps;
 CDC * pDC = m_todraw.BeginPaint(&ps);
 pDC->BitBlt(ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right - ps.rcPaint.left, ps.rcPaint.bottom - ps.rcPaint.top, &m_memDC, ps.rcPaint.left, ps.rcPaint.top, SRCCOPY);
 m_todraw.EndPaint(&ps);
}

这样既可实现带有白色背景的描画区域的窗体,如果想要描画其他图像可以根据需要在白色区域中进行描画。区域信息改变后需要通过调用InvalidateRect(&rt); 进行页面更新。

以上是我在做项目过程中做的一些小总结,希望能够帮助到大家,能给大家提供一些借鉴,如果有什么问题或者不对的地方还请大家能够提出宝贵意见和建议。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值