Winapi Windows如何实现剪贴板格式转换?

Winapi Windows如何实现剪贴板格式转换?,winapi,clipboard,sandbox,Winapi,Clipboard,Sandbox,我正在Windows上为我的应用程序沙盒系统实现剪贴板。我必须自己模拟剪贴板行为。现在,除了格式转换部分,所有的工作都很好,我可以对CF_TEXT/UNICODETEXT/OEMTEXT进行转换,但是还有其他一些格式我不熟悉,比如DIB。是否有任何示例代码说明Windows是如何做到这一点的?与其他剪贴板格式的区别在于,它包含BITMAPINFO结构的内存对象和位图位 提供了一个非常详细的示例: HINSTANCE hinst; UINT uFormat = (UINT)(-1); BOOL

我正在Windows上为我的应用程序沙盒系统实现剪贴板。我必须自己模拟剪贴板行为。现在,除了格式转换部分,所有的工作都很好,我可以对CF_TEXT/UNICODETEXT/OEMTEXT进行转换,但是还有其他一些格式我不熟悉,比如DIB。是否有任何示例代码说明Windows是如何做到这一点的?

与其他剪贴板格式的区别在于,它包含
BITMAPINFO
结构的内存对象和位图位

提供了一个非常详细的示例:

HINSTANCE hinst; 
UINT uFormat = (UINT)(-1); 
BOOL fAuto = TRUE; 
 
LRESULT APIENTRY MainWndProc(hwnd, uMsg, wParam, lParam) 
HWND hwnd; 
UINT uMsg; 
WPARAM wParam; 
LPARAM lParam; 
{ 
    static HWND hwndNextViewer; 
 
    HDC hdc; 
    HDC hdcMem; 
    PAINTSTRUCT ps; 
    LPPAINTSTRUCT lpps; 
    RECT rc; 
    LPRECT lprc; 
    HGLOBAL hglb; 
    LPSTR lpstr; 
    HBITMAP hbm; 
    HENHMETAFILE hemf; 
    HWND hwndOwner; 
 
    switch (uMsg) 
    { 
        case WM_PAINT: 
            hdc = BeginPaint(hwnd, &ps); 
 
            // Branch depending on the clipboard format. 
 
            switch (uFormat) 
            { 
                case CF_OWNERDISPLAY: 
                    ...
 
                case CF_BITMAP: 
                    hdcMem = CreateCompatibleDC(hdc); 
                    if (hdcMem != NULL) 
                    { 
                        if (OpenClipboard(hwnd)) 
                        { 
                            hbm = (HBITMAP) 
                                GetClipboardData(uFormat); 
                            SelectObject(hdcMem, hbm); 
                            GetClientRect(hwnd, &rc); 
 
                            BitBlt(hdc, 0, 0, rc.right, rc.bottom, 
                                hdcMem, 0, 0, SRCCOPY); 
                            CloseClipboard(); 
                        } 
                        DeleteDC(hdcMem); 
                    } 
                    break; 
...
如果需要将获取的位图对象保存为文件,则必须严格按照指定值


MSDN代码示例:

Windows如何做什么?顺便说一句,它们有很多:这既过于宽泛,也是一个推荐问题,因此不适合这个网站