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