wer) SendMessage (hwndNextViewer, message, wParam, lParam) ; return 0 ; case WM_DRAWCLIPBOARD: if (hwndNextViewer) SendMessage (hwndNextViewer, message, wParam, lParam) ; InvalidateRect (hwnd, NULL, TRUE) ; return 0 ; case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rect) ; OpenClipboard (hwnd) ; #ifdef UNICODE hGlobal = GetClipboardData (CF_UNICODETEXT) ; #else hGlobal = GetClipboardData (CF_TEXT) ; #endif if (hGlobal != NULL) { pGlobal = (PTSTR) GlobalLock (hGlobal) ; DrawText (hdc, pGlobal, -1, &rect, DT_EXPANDTABS) ; GlobalUnlock (hGlobal) ; } CloseClipboard () ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY: ChangeClipboardChain (hwnd, hwndNextViewer) ; PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
CLIPVIEW依上面所讨论的方法来处理WM_CREATE、WM_CHANGECBCHAIN、WM_DRAWCLIPBOARD和WM_DESTROY讯息。WM_PAINT讯息处理打开剪贴簿,并用CF_TEXT格式呼叫GetClipboardData。如果函式传回一个整体记忆体代号,那么CLIPVIEW将锁定它,并用DrawText在显示区域显示文字。
处理标准格式(如Windows提供的那个剪贴簿一样)以外的资料格式的剪贴簿浏览器还需要完成一些其他工作,比如显示剪贴簿中目前所有资料格式的名称。 |