在MFC中,CWnd::OnPaintClipboard 方法用于处理剪贴板内容的绘制操作。当剪贴板的内容需要在窗口中绘制时,系统会调用这个方法。通常,这个方法用于处理 WM_PAINTCLIPBOARD 消息。

以下是一个简单的示例,演示如何在自定义的窗口类中重写 OnPaintClipboard 方法:
class CMyWnd : public CWnd
{
public:
    // 构造函数和其他成员函数的声明

protected:
    // 重写 OnPaintClipboard 方法
    afx_msg void OnPaintClipboard(CWnd* pViewer, HGLOBAL hglb, LPTSTR lptstrFormat)
    {
        // 在这里进行剪贴板内容的绘制操作
        // pViewer 是接收剪贴板绘制消息的窗口
        // hglb 是剪贴板中的数据句柄
        // lptstrFormat 是剪贴板中的数据格式

        // 例如,你可以在这里绘制剪贴板中的图像数据
        if (lstrcmp(lptstrFormat, _T("Bitmap")) == 0)
        {
            CDC dc;
            if (dc.Attach(::GetDC(GetSafeHwnd())))
            {
                CBitmap bitmap;
                bitmap.Attach((HBITMAP)hglb);

                BITMAP bm;
                bitmap.GetBitmap(&bm);

                // 在窗口中绘制位图
                dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &CDC::FromHandle(bitmap.GetDC()), 0, 0, SRCCOPY);

                ::ReleaseDC(GetSafeHwnd(), dc.Detach());
                bitmap.Detach();
            }
        }
    }

    // 其他成员变量和函数的声明

    DECLARE_MESSAGE_MAP()
};

在这个例子中,CMyWnd 是一个自定义的窗口类,它继承自 CWnd。我们通过 DECLARE_MESSAGE_MAP() 宏声明了消息映射表,并在实现文件中使用 BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 宏进行消息映射的定义。

OnPaintClipboard 方法用于处理剪贴板内容的绘制,可以根据实际需要在窗口中绘制剪贴板的数据,这里以绘制位图为例。需要注意,OnPaintClipboard 方法的声明中使用了 afx_msg 宏。


转载请注明出处:http://www.pingtaimeng.com/article/detail/23661/MFC/CWnd