�������� Linux Tags
12. ������
���ദ�����������������ϵij�ʽ������һ����Edit�����ܱ������а�����Cut������Copy���͡�Paste��ѡ���ʹ����ѡ��Cut�����ߡ�Copy��ʱ����ʽ�����ϴ��͸����������������ʹ��ij�ָ�ʽ�������֡�����ͼ��һ�ְ�λԪ���еľ������У����е�λԪ��ƽ����ʾ��ͼ�����Ӧ������metafile���ö���λԪ��ֵ���ݱ�ʾ�Ļ�ͼ������ȡ���ʹ���ߴӹ��ܱ���ѡ��Paste��ʱ����ʽ���������а��������ϣ�����ʹ�õ��Ƿ��dz�ʽ���Խ��ܵ�һ�ָ�ʽ������ǣ���ô���Ͻ��Ӽ��������͵���ʽ�С�
���ʹ���߲�������ȷ��ָ���ʽ�Ͳ��ܰ�����������Ƴ������������磬��ij����ʽ��ִ�м��»��ƣ����߰�Ctrl-X��Ctrl-C��������ʹ���ߣ�Ӧ���ܹ��ٶ����Ͻ������ڼ������ϣ�ֱ���´μ��»��Ʋ���Ϊֹ��
����һ�µ�ʮ�͵�ʮһ����ʾ��POPPAD��ʽ���޶����У����Ǽ����ˡ�Edit�����ܱ����������DZ��⹦�ܱ�������ֻ�Ƿ���ѶϢ���à¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ñ¡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Â£ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ã£¬ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ô¼ï¿½ï¿½ï¿½ï¿½Ð¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½äº¯Ê½ï¿½ï¿½
���¼������۽����ִ�����Ƴ�����������������½���ҽ�����չʾ����ü�������������ͼ����ʮ�ġ�ʮ���ʮ���£���metafile����ʮ���£���
�������ļ�ʹ��
��
�����ɷ��������ϴ��͵������������»��ƣ��ʹ�ȡ���������ϣ�ճ�����ij�ʽ�뿪ʼ��
��׼���������ϸ�ʽ
��
Windows֧Ԯ��ͬ��Ԥ�ȶ����������ʽ����Щ��ʽ��WINUSER.H�������CFΪ���׵�ʶ���֡�
���Ƚ��������ܹ������ڼ������ϵ�����������̬���Լ�һ�����������ʽ��ص�������̬��
���������ָ��ӵļ�������ʽ�������ڸ�������CF_TEXT��ʽ���ƣ�Ҳ����˵�����Ƕ����������ϣ����������Dz���Ҫ��NULL��β����Ϊ��ʽ�Ѿ����������ϵĽ�β�������Ѿ�����ʹ����Щ��ʽ�ˣ�
�������ּ�������ʽ�����ͼ�йء���ν����ͼ��������λԪ�ľ������У����е�����λԪ������豸��ͼ�����Ӧ����ʮ�ĺ͵�ʮ���½���ϸ���۵���ͼ�Լ���Щ����ͼ�������ĸ�ʽ��
�ڼ������У����п����Թ�ҵ��׼��TIFF��ʽ����ĵ���ͼ���ϣ�
����������metafile��ʽ���ҽ��ڵ�ʮ������ϸ���ۡ�һ��metafile����һ���Զ���λ��ʽ����Ļ�ͼ�����
������ܼ�������͵ļ�������ʽ��
����������
��
��ʽ�����������һЩ���ϵ�ʱ�򣬱�������һ��������飬���ҽ��������彻���������������ڱ������ڵij�ʽ����Ҫ���ü�����ʱ������ֻ��ʹ�ñ�׼Cִ��ʱ�ڳ�ʽ����֧Ԯ��malloc��ʽ�����ǣ������Windows��ִ�е�Ӧ�ó�ʽ֮�����Ҫ���ü�����������ļ�����飬��ʱmalloc��ʽ����Щ���������������ˡ�
ʵ���ϣ����DZ��������Windows�������ļ��������ú�ʽ���ó���ʹ�ã���ʱ����ҵϵͳ��16λԪ��ʵ��ģʽ������ṹ��ִ�С����ڵ�Windows��Ȼ֧Ԯ��Щ��ʽ����������ʹ�����ǣ������DZ���ʹ����Щ��ʽ�����ˡ�
Ҫ��Windows API������һ��������飬���Ժ��У�
hGlobal = GlobalAlloc (uiFlags, dwSize) ;
�˺�ʽ������������һϵ�п��ܵ����ͼ�������λԪ���С����ʽ����һ��HGLOBAL��̬�Ĵ��ţ���Ϊ��������������š���������š�������ֵΪNULL��ʾ���������㹻�ļ����塣
��ȻGlobalAlloc�������������в�ͬ�������Ƕ���32λԪ�����������������������һ�������趨Ϊ0����ô���Ϳ��Ը���Ч��ʹ�����GMEM_FIXED������������£�GlobalAlloc���ص��������ʵ����ָ�������ü�������ָ�ꡣ
�����ϲ������������е�ÿһλԪ����ʼ��Ϊ0����ô��Ҳ�ܹ�ʹ�����GMEM,_ZEROINIT����Windows��ͷ�����У�����GPTR��궨��ΪGMEM_FIXED��GMEM_ZEROINIT������ϣ�
#define GPTR (GMEM_FIXED | GMEM_ZEROINIT)
������һ���������ú�ʽ��
hGlobal = GlobalReAlloc (hGlobal, dwSize, uiFlags) ;
���������������ˣ���������GMEM_ZEROINIT��꽫�µ�λԪ����Ϊ0��
�����ǻ�ü�������С�ĺ�ʽ��
dwSize = GlobalSize (hGlobal) ;
�ͷż������ĺ�ʽ��
GlobalFree (hGlobal) ;
������16λԪ��Windows�У���ΪWindows������ʵ����������ƶ�������飬���Խ�ֹʹ��GMEM_FIXED��ꡣ��32λԪ��Windows�У�GMEM_FIXED���ܳ�����������Ϊ��������һ������λַ��������ҵϵͳҲ�ܹ�ͨ���ı������ҳӳ�����ʵ����������ƶ�������顣���Ϊ16λԪ��Windowsд��ʽʱ��GlobalAlloc�Ƽ�ʹ��GMEM_MOVEABLE��ꡣ��Windows�ı�ͷ�����л�������һ����дʶ���֣��ô�ʶ���ֿ����ڿ��ƶ��ļ�����֮����0��
#define GHND (GMEM_MOVEABLE | GMEM_ZEROINIT)
GMEM_MOVEABLE�������Windows��������������ƶ�һ��������顣�ⲻ��˵����ʵ����������ƶ�������飬ֻ��Ӧ�ó�ʽ��춶�д���������λַ���Ա��䶯��
����GMEM_MOVEABLE��16λԪWindows��ͨ�򣬵����������������Ѿ��ٵö��ˡ��������Ӧ�ó�ʽƵ�������á����������Լ��ͷŲ�ͬ��С�ļ�����飬Ӧ�ó�ʽ������λַ�ռ佫����֧�����顣��������õ����������������λַ�ռ�ͻᱻ���ꡣ������Ǹ����ܻᷢ�������⣬��ô����ϣ���������ǿ��ƶ��ġ�����ͽ�������ü�������Ϊ�ɰ���λ�õġ�
���ȶ���һ��ָ�꣨���磬һ��int��̬�ģ���һ��GLOBALHANDLE��̬�ı�����
int * p ; GLOBALHANDLE hGlobal ;
Ȼ�����ü����塣���磺
hGlobal = GlobalAlloc (GHND, 1024) ;
�봦������Windows����һ���������ص������ֵ�ʵ�����壬ֻҪ�������ͺ��ˡ���Ҫ��ȡ�������ʱ�����Ժ��У�
p = (int *) GlobalLock (hGlobal) ;
�˺�ʽ������ת��Ϊָ�ꡣ�ڼ�����鱻�����ڼ䣬Windows���̶�����������е�λַ�������ƶ��ǿ�����塣��ȡ��������У�
GlobalUnlock (hGlobal) ;
�⽫ʹWindows������������������ƶ�������顣Ҫ����ȷ���˳���������������������Windows��ʽд���ߵ�ʹ�à¾ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ó¦ï¿½ï¿½ï¿½Úµï¿½Ò»ï¿½ï¿½Ñ¶Ï¢ï¿½ï¿½ï¿½ï¿½ï¿½Ú¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Í½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½é¡£
���ͷż�����ʱ������GlobalFreeӦʹ�ô��Ŷ�����ָ�ꡣ��������ڲ��ܴ�ȡ���ţ�����ʹ������ĺ�ʽ��
hGlobal = GlobalHandle (p) ;
�ڽ���֮ǰ�����ܹ��������һ��������顣Windows����һ�����������������ڼ������ɱ������ƶ�֮ǰ��ÿ����������Ҫ���Ӧ�Ľ�������Windows��������������ƶ�һ���������ʱ������Ҫ��λԪ���һ��λ�ø��Ƶ���һ����ֻ������ش���������ҳӳ�����ͨ������32λԪWindowsΪ���ij�ʽ���ÿ��ƶ��ļ�����飬��Ψһȷʵ������ֻ�DZ������������Ŀռ����ѳ��֡�ʹ�ü�����ʱ��ҲӦ��ʹ�ÿ��ƶ������塣
Ϊ���������ü�����ʱ����Ӧ����GMEM_MOVEABLE��GMEM_SHARE������GlobalAlloc��ʽ��GMEM_SHARE���ʹ������Ӧ�ó�ʽҲ����ʹ���ǿ�����塣
�����ִ��͵�������
��
�����������һ��ANSI�ִ����͵��������ϣ����������Ѿ�����ָ������ִ���ָ��(pString)������ϣ����������ִ���iLength��Ԫ����Щ��Ԫ������NULL��β��Ҳ���ܲ���NULL��β��
���ȣ�ͨ��ʹ��GlobalAlloc������һ�����Դ����ִ��ļ�����飬���л�����һ����ֹ��ԪNULL��
hGlobal = GlobalAlloc (GHND | GMEM_SHARE, iLength + 1) ;
���δ�����õ�������飬hGlobal��ֵ��ΪNULL ��������óɹ����������������壬���õ�ָ������һ��ָ�꣺
pGlobal = GlobalLock (hGlobal) ;
���ִ����Ƶ���������У�
for (i = 0 ; i < wLength ; i++) *pGlobal++ = *pString++ ;
���GlobalAlloc��GHND�����ʹ������������������ڼ䱻���Ϊ�㣬���Բ���Ҫ���ӽ�β��NULL ����������Ϊ������������
GlobalUnlock (hGlobal) ;
���ھ����˱�ʾ��NULL��β���������ڼ������ļ�������š�Ϊ�˰����͵��������У��򿪼�������������գ�
OpenClipboard (hwnd) ; EmptyClipboard () ;
����CF_TEXTʶ���ְѼ�������Ž������������رռ�������
SetClipboardData (CF_TEXT, hGlobal) ; CloseClipboard () ;
������һ���䡣
�����ǹ�춴˹��̵�һЩ����
�Ӽ�������ȡ������
��
�Ӽ�������ȡ������ֻ�Ȱ����ִ��͵�����������΢����һЩ������������ȷ���������Ƿ���CF_TEXT��ʽ�����ϣ���򵥵ķ����Ǻ���
bAvailable = IsClipboardFormatAvailable (CF_TEXT) ;
����������Ϻ���CF_TEXT���ϣ������ʽ������TRUE�����㣩�������ڵ�ʮ�µ�POPPAD2��ʽ����ʹ���������ʽ��������ȷ����Edit�����ܱ��С�Paste�����DZ����û��DZ�ͣ�õġ�IsClipboardFormatAvailable���������������ȴ򿪼������Ϳ���ʹ�õļ�������ʽ֮һ�����ǣ������֮�����ٴ򿪼�������ȡ��������֣���Ӧ������һ�μ�飨ʹ��ͬ���ĺ�ʽ���������������Ա�ȷ��CF_TEXT�����Ƿ���Ȼ���ڼ������С�
Ϊ�˴��ͳ����֣����ȴ򿪼�������
OpenClipboard (hwnd) ;
��õ��������ֵļ��������ţ�
hGlobal = GetClipboardData (CF_TEXT) ;
���������������CF_TEXT��ʽ�����ϣ��˴��ž�ΪNULL������ȷ���������Ƿ������ֵ���һ�ַ��������GetClipboardData����NULL����رռ����������������κι�����
��GetClipboardData�õ��Ĵ��Ų������ʹ���߳�ʽ������춼�����������GetClipboardData��CloseClipboard����֮��������Ų���Ч���������ͷ�������Ż�����������õ����ϡ������Ҫ������ȡ��Щ���ϣ�������������������ĸ�����
������һ�ֽ����ϸ��Ƶ�ʹ���߳�ʽ�еķ��������ȣ�����һ������������Ͽ��С��ͬ�ļ�����飬������һ��ָ��ÿ��ָ�꣺
pText = (char *) malloc (GlobalSize (hGlobal)) ;
�ٴκ���hGlobal ����hGlobal�Ǵ�GetClipboardData���д��ص�������š������������ţ����һ��ָ����������ָ�꣺
pGlobal = GlobalLock (hGlobal) ;
���ھͿ��Ը��������ˣ�
strcpy (pText, pGlobal) ;
���ߣ�������ʹ��һЩ�򵥵�C��ʽ�룺
while (*pText++ = *pGlobal++) ;
�ڹرռ�����֮ǰ�Ƚ���������飺
GlobalUnlock (hGlobal) ; CloseClipboard () ;
����������һ������pText��ָ�꣬�����ʽ��ʹ���߾Ϳ������������������ˡ�
�򿪺͹رռ�����
��
���κ�ʱ��ֻ��һ����ʽ���Դ򿪼�����������OpenClipboard�������ǵ�һ����ʽʹ�ü�����ʱ����ֹ�����������ݷ����仯��OpenClipboard����BOOLֵ����˵���Ƿ��Ѿ��ɹ��ش��˼������������һ��Ӧ�ó�ʽû�йرռ���������ô���Ͳ��ܱ��򿪡����ÿ����ʽ�ڻ�Ӧʹ���ߵ�����ʱ������ء����ع淶�ش�Ȼ��رռ���������ô������Զ�����������ܴ򿪼����������⡣
���ǣ��ڲ����ع淶��ʽ������Ȩʽ�๤�����У��ܻᷢ��һЩ���⡣��ʹ�����ij�ʽ��ijЩ���������������ʹ��������һ����Paste��ѡ���ڼ䣬���ij�ʽ��û��ʧȥ���뽹�㣬������Ҳ���ܼٶ�������Ķ�����Ȼ�����һ��������ʽ�п����Ѿ�������ڼ��ȡ���������ˡ�
���ң�������һ����ѶϢ�����йصĸ�΢�����⣺������������㹻�ļ������������ݸ��Ƶ�����������ô������ϣ����ʾһ��ѶϢ���顣���ǣ�������ѶϢ���鲻��ϵͳģ̬�ģ���ôʹ���߿�������ʾѶϢ�����ڼ��л�����һ��Ӧ�ó�ʽ�С���Ӧ��ʹ��ϵͳģ̬��ѶϢ���飬����������ʾѶϢ����֮ǰ�رռ�������
���������ʾһ���Ի�����ʱ������������Ϊ��״̬����ô�������������������⣬�Ի������еıà¼ï¿½ï¿½Î»ï¿½ï¿½Ê¹ï¿½Ã¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ÖµÄ¼ï¿½ï¿½ï¿½ï¿½ï¿½
��������Unicode
��
����Ϊֹ����ֻ�������ü���������ANSI���֣�ÿ����Ԫ��Ӧһ��λԪ�飩��������CF_TEXTʶ����ʱ�������ָ�ʽ�������ܶ�CF_OEMTEXT��CF_UNICODETEXT������Ϥ�ɡ�
����һЩ����Ϣ���ڴ���������Ҫ�����ָ�ʽʱ����ֻ�����SetClipboardData��GetClipboardData��Windows�����������������е�����ת�������磬��Windows NT�У����һ����ʽ��SetClipboardData������CF_TEXT������������̬����ʽҲ����CF_OEMTEXT����GetClipboardData��ͬ���أ�������Ҳ�ܽ�CF_OEMTEXT����ת��ΪCF_TEXT��
��Windows NT�У�ת��������CF_UNICODETEXT��CF_TEXT��CF_OEMTEXT֮�䡣��ʽӦ��ʹ�öԳ�ʽ������������һ�����ָ�ʽ������SetClipboardData ��ͬ���أ���ʽӦ���ó�ʽ��Ҫ�����ָ�ʽ������GetClipboardData�������Ѿ�֪�������鸽�ϵij�ʽ�ڱ�дʱ���Դ��л򲻴�UNICODEʶ���֡�������ij�ʽҲ���˱�д����ô�ڶ�����UNICODEʶ����֮�ᣬ��ʽ��ִ�д���CF_UNICODETEXT������SetClipboardData�Լ�GetClipboardData���У�������CF_TEXT��
CLIPTEXT��ʽ�����ʽ12-1��ʾ��չʾ��һ�ֿ��еķ�����
��ʽ12-1 CLIPTEXT CLIPTEXT.C /*------------------------------------------------------------------------- CLIPTEXT.C -- The Clipboard and Text (c) Charles Petzold, 1998 --------------------------------------------------------------------------*/ #include <windows.h> #include "resource.h" LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; #ifdef UNICODE #define CF_TCHAR CF_UNICODETEXT TCHAR szDefaultText[] = TEXT ("Default Text - Unicode Version") ; TCHAR szCaption[] = TEXT ("Clipboard Text Transfers - Unicode Version") ; #else #define CF_TCHAR CF_TEXT TCHAR szDefaultText[] = TEXT ("Default Text - ANSI Version") ; TCHAR szCaption[] = TEXT ("Clipboard Text Transfers - ANSI Version") ; #endif int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("ClipText") ; HACCEL hAccel ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = szAppName ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox ( NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, szCaption, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; hAccel = LoadAccelerators (hInstance, szAppName) ; while (GetMessage (&msg, NULL, 0, 0)) { if (!TranslateAccelerator (hwnd, hAccel, &msg)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } } return msg.wParam ; } LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam) { static PTSTR pText ; BOOL bEnable ; HGLOBAL hGlobal ; HDC hdc ; PTSTR pGlobal ; PAINTSTRUCT ps ; RECT rect ; switch (message) { case WM_CREATE: SendMessage (hwnd, WM_COMMAND, IDM_EDIT_RESET, 0) ; return 0 ; case WM_INITMENUPOPUP: EnableMenuItem ((HMENU) wParam, IDM_EDIT_PASTE, IsClipboardFormatAvailable (CF_TCHAR) ? MF_ENABLED : MF_GRAYED) ; bEnable = pText ? MF_ENABLED : MF_GRAYED ; EnableMenuItem ((HMENU) wParam, IDM_EDIT_CUT, bEnable) ; EnableMenuItem ((HMENU) wParam, IDM_EDIT_COPY, bEnable) ; EnableMenuItem ((HMENU) wParam, IDM_EDIT_CLEAR, bEnable) ; break ; case WM_COMMAND: switch (LOWORD (wParam)) { case IDM_EDIT_PASTE: OpenClipboard (hwnd) ; if (hGlobal = GetClipboardData (CF_TCHAR)) { pGlobal = GlobalLock (hGlobal) ; if (pText) { free (pText) ; pText = NULL ; } pText = malloc (GlobalSize (hGlobal)) ; lstrcpy (pText, pGlobal) ; InvalidateRect (hwnd, NULL, TRUE) ; } CloseClipboard () ; return 0 ; case IDM_EDIT_CUT: case IDM_EDIT_COPY: if (!pText) return 0 ; hGlobal = GlobalAlloc (GHND | GMEM_SHARE, (lstrlen (pText) + 1) * sizeof (TCHAR)) ; pGlobal = GlobalLock (hGlobal) ; lstrcpy (pGlobal, pText) ; GlobalUnlock (hGlobal) ; OpenClipboard (hwnd) ; EmptyClipboard () ; SetClipboardData (CF_TCHAR, hGlobal) ; CloseClipboard () ; if ( LOWORD (wParam) == IDM_EDIT_COPY) return 0 ; // fall through for IDM_EDIT_CUT case IDM_EDIT_CLEAR: if (pText) { free (pText) ; pText = NULL ; } InvalidateRect (hwnd, NULL, TRUE) ; return 0 ; case IDM_EDIT_RESET: if (pText) { free (pText) ; pText = NULL ; } pText = malloc ((lstrlen (szDefaultText) + 1) * sizeof (TCHAR)) ; lstrcpy (pText, szDefaultText) ; InvalidateRect (hwnd, NULL, TRUE) ; return 0 ; } break ; case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rect) ; if (pText != NULL) DrawText (hdc, pText, -1, &rect, DT_EXPANDTABS | DT_WORDBREAK) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY: if ( pText) free (pText) ; PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
CLIPTEXT.RC ��ժ¼�� //Microsoft Developer Studio generated resource script. #include "resource.h" #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// // Menu CLIPTEXT MENU DISCARDABLE BEGIN POPUP "&Edit" BEGIN MENUITEM "Cu&t\tCtrl+X", IDM_EDIT_CUT MENUITEM "&Copy\tCtrl+C", IDM_EDIT_COPY MENUITEM "&Paste\tCtrl+V", IDM_EDIT_PASTE MENUITEM "De&lete\tDel", IDM_EDIT_CLEAR MENUITEM SEPARATOR MENUITEM "&Reset", IDM_EDIT_RESET END END ///////////////////////////////////////////////////////////////////////////// // Accelerator CLIPTEXT ACCELERATORS DISCARDABLE BEGIN "C", IDM_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT "V", IDM_EDIT_PASTE, VIRTKEY, CONTROL, NOINVERT VK_DELETE, IDM_EDIT_CLEAR, VIRTKEY, NOINVERT "X", IDM_EDIT_CUT, VIRTKEY, CONTROL, NOINVERT END
RESOURCE.H��ժ¼�� // Microsoft Developer Studio generated include file. // Used by ClipText.rc #define IDM_EDIT_CUT 40001 #define IDM_EDIT_COPY 40002 #define IDM_EDIT_PASTE 40003 #define IDM_EDIT_CLEAR 40004 #define IDM_EDIT_RESET 40005
������Windows NT��ִ��Unicode���ANSI���ʽ�ĸ�����ҿ��Կ������������������������Ԫ��֮��ת���ġ�ע��CLIPTEXT.C������#ifdef���������������UNICODEʶ���֣���ôCF_TCHAR����������һ�ֳ��õļ�������ʽ���͵��CF_UNICODETEXT���������͵��CF_TEXT����ʽ������е�IsClipboardFormatAvailable��GetClipboardData��SetClipboardData��ʽ��ʹ��CF_TCHAR��ָ��������̬��
�ڳ�ʽ�Ŀ�ʼ���֣��Լ����ӡ�Edit�����ܱ���ѡ��Reset��ѡ��ʱ������̬����pText����һ��ָ�꣬��Unicode��ij�ʽ�У�ָ��ָ��Unicode�ִ���Default Text -Unicode version�����ڷ�Unicode��ij�ʽ�У�ָ��ָ��Default Text - ANSI version�����������á�Cut����Copy������ִ����ݸ����������á�Cut����Delete������ӳ�ʽ��ɾ���ִ�����Paste������������е��������ݸ��Ƶ�pText����WM_PAINTѶϢ�����ڼ䣬pText���ִ���ʾ�ڳ�ʽ����ʾ����
���������Unicode���CLIPTEXT��ѡ���ˡ�Copy�����Ȼ���ڷ�Unicode����ѡ��Paste�������ô�����ܿ��������Ѿ���Unicodeת������ANSI�����Ƶأ������ִ���෴�IJ�������ô���־ͻ��ANSIת����Unicode��
���ӵļ������÷�
��
�����Ѿ��������ڽ�����׼����֮�ᣬ�Ӽ�������������ʱ��Ҫ�ĸ����У�
OpenClipboard (hwnd) ; EmptyClipboard () ; SetClipboardData (iFormat, hGlobal) ; CloseClipboard () ;
��ȡ��Щ������Ҫ��������
OpenClipboard (hwnd) ; hGlobal = GetClipboardData (iFormat) ; �����г�ʽ CloseClipboard () ;
��GetClipboardData��CloseClipboard����֮�䣬���Ը��Ƽ��������ϻ���������ʽ��ʹ�������ܶ�Ӧ�ó�ʽ����Ҫ�������ַ�������Ҳ�����ø����ӵķ�ʽ��ʹ�ü�������
���ö��������Ŀ
��
���򿪼������������ϴ��͸���ʱ�������Ⱥ���EmptyClipboard��֪ͨWindows�ͷŻ�ɾ���������ϵ����ݡ����������еļ����������и����������������ԣ�������������˵��������ÿ��ֻ�ܱ���һ��������Ŀ��
���ǣ�������EmptyClipboard��CloseClipboard����֮���κ���SetClipboardData��ÿ�ζ�ʹ�ò�ͬ�ļ�������ʽ�����磬������ڼ������д���һ���̵ܶ������ִ������԰��������д��metafile��Ҳ���԰��������д�����ͼ���ѵ���ͼѡ��������װ�������У���������ִ�д������ͼ�С��������ַ�������ʹ�ִ�������Ϊ�Ӽ������϶�ȡ���ֵij�ʽ��ʹ�ã�Ҳ����Ϊ�Ӽ������϶�ȡ����ͼ��metafile�ij�ʽ��ʹ�á���Ȼ����Щ��ʽ������֪��metafile�����ͼʵ���ϰ�����һ���ִ���
������һЩ����д���������ϣ���ÿ�����ž����Ժ��� SetClipboardData��
OpenClipboard (hwnd) ; EmptyClipboard () ; SetClipboardData (CF_TEXT, hGlobalText) ; SetClipboardData (CF_BITMAP, hBitmap) ; SetClipboardData (CF_METAFILEPICT, hGlobalMFP) ; CloseClipboard () ;
�������ָ�ʽ������ͬʱλ춼�������ʱ����CF_TEXT��CF_BITMAP��CF_METAFILEPICT��������IsClipboardFormatAvailable������TRUE��ͨ�����к��г�ʽ���Դ�ȡ��Щ���룺
hGlobalText = GetClipboardData (CF_TEXT) ;
��
hBitmap = GetClipboardData (CF_BITMAP) ;
��
hGlobalMFP = GetClipboardData (CF_METAFILEPICT) ;
��һ�γ�ʽ����EmptyClipboardʱ��Windows���ͷŻ�ɾ���������ϱ����������������š�
�ڽ���ͬ�����ָ�ʽ����ͬ�ĵ���ͼ��ʽ���߲�ͬ��metafile��ʽ���ӵ�������ʱ����Ҫʹ�����ּ�����ֻʹ��һ�����ָ�ʽ��һ�ֵ���ͼ��ʽ�Լ�һ��metafile��ʽ����������˵��������Windows����CF_TEXT��CF_OEMTEXT��CF_UNICODETEXT֮��ת����Ҳ������CF_BITMAP��CF_DIB֮�䣬�Լ���CF_METAFILEPICT��CF_ENHMETAFILE֮�����ת����
͸�����ȴ򿪼�������Ȼ�����EnumClipboardFormats����ʽ����ȷ����������������и�ʽ����ʼʱ�趨����iFormatΪ0��
iFormat = 0 ; OpenClipboard (hwnd) ;
���ڴ�0ֵ��ʼ��ν���������EnumClipboardFormats���С���ʽ��ΪĿǰ�ڼ������е�ÿ�ָ�ʽ����һ������iFormatֵ������ʽ����0ʱ����ʾ��ɣ�
while (iFormat = EnumClipboardFormats (iFormat)) { ����iFormatֵ�Ĵ�����ʽ } CloseClipboard () ;
������ͨ������ĺ�����ȡ��Ŀǰ�ڼ�������֮��ͬ��ʽ�ĸ�����
iCount = CountClipboardFormats () ;
�ӳ����
��
�������Ϸ����������ʱ��һ����˵Ҫ����һ�����ϵĸ���������������ݸ����ļ��������Ŵ������������Էdz����������Ŀ��˵�����ַ������˷Ѽ�����ռ䡣���ʹ���߲��������ճ������һ����ʽ���ô���ڱ���������ȡ��֮ǰ������һֱռ����������ռ䡣
ͨ��ʹ��һ�ֽ������ӳ�������ļ������Ա���������⡣ʵ���ϣ�ֱ����һ����ʽ��Ҫ���ϣ���ʽ���ṩ������ϡ�Ϊ�ˣ��������ϴ��Ŵ���Windows��������SetClipboardData������ʹ��NULL��
OpenClipboard (hwnd) ; EmptyClipboard () ; SetClipboardData (iFormat, NULL) ; CloseClipboard () ;
�����ж��ʹ�ò�ͬiFormatֵ��SetClipboardData���У�������ijЩ���п�ʹ��NULLֵ����������һЩ��ʹ��ʵ�ʵĴ���ֵ��
ǰ��Ĺ��̱Ƚϼ򵥣����µĹ��̾�Ҫ��΢����һЩ�ˡ�����һ����ʽ����GetClipboardDataʱ��Windows��������ָ�ʽ�Ĵ����Ƿ�ΪNULL������ǣ�Windows�����������������ߡ������ij�ʽ������һ��ѶϢ��Ҫ��ȡ�����ϵ�ʵ�ʴ��ţ���ʱ���ij�ʽ�����ṩ������š�
�������˵���������������ߡ��ǽ����Ϸ��������������һ���Ӵ�����һ����ʽ����OpenClipboardʱ��Windows������������ʽʱ���õ��Ӵ����ţ�������ű�ʾ�򿪼��������Ӵ���һ���յ�һ��EmptyClipboard���У�Windows��ʹ����Ӵ���Ϊ�µļ����������ߡ�
ʹ���ӳ���������ij�ʽ�������Ӵ�ѶϢ������ʽ�б��봦������ѶϢ��WM_RENDERFORMAT��WM_RENDERALLFORMATS��WM_DESTROYCLIPBOARD������һ����ʽ����GetClipboardDataʱ��Windows���Ӵ�ѶϢ������ʽ����һ��WM_RENDERFORMATѶϢ��wParam��ֵ����Ҫ��ĸ�ʽ���ڴ���WM_RENDERFORMATѶϢʱ����Ҫ�򿪻���ռ�������ΪwParam��ָ���ĸ�ʽ����һ�����������飬�����ݴ�������������ȷ�ĸ�ʽ����Ӧ���ź���SetClipboardData�������Եأ�Ϊ���ڴ���WM_RENDERFORMATʱ��ȷ�ع���������ϣ���Ҫ�ڳ�ʽ�б�����Щ��Ѷ������һ����ʽ����EmptyClipboardʱ��Windows�����ij�ʽ����һ��WM_DESTROYCLIPBOARDѶϢ��������������Ҫ������������ϵ���Ѷ�����ij�ʽ�����Ǽ������������ߡ�
�����ʽ�����Լ���Ȼ�Ǽ����������ߵ�ʱ���Ҫ��ִֹ�У����Ҽ���������Ȼ�������ó�ʽ��SetClipboardData�趨��NULL���ϴ��ţ������յ�WM_RENDERALLFORMATSѶϢ����ʱ��Ӧ�ô򿪼�������������������������������У���Ϊÿ�ָ�ʽ����SetClipboardData��Ȼ��رռ�������WM_RENDERALLFORMATSѶϢ���Ӵ�ѶϢ������ʽ�����յ���ѶϢ֮һ�����������WM_DESTROYCLIPBOARDѶϢ������Ѿ�������������ϣ���Ȼ����������WM_DESTROYѶϢ��
������ij�ʽֻ�������������һ�ָ�ʽ�����ϣ��������֣�����ô�����԰�WM_RENDERALLFORMATS��WM_RENDERFORMAT���������һ����Щ��ʽ��Ӧ����������������
case WM_RENDERALLFORMATS : OpenClipboard (hwnd) ; EmptyClipboard () ; // fall through case WM_RENDERFORMAT : // �����ַ������������� SetClipboardData (CF_TEXT, hGlobal) ; if (message == WM_RENDERALLFORMATS) CloseClipboard () ; return 0 ;
������ij�ʽʹ�úü��ּ�������ʽ����ô��������ΪwParam��Ҫ��ĸ�ʽ����WM_ RENDERFORMAT�����dz�ʽ�ڴ�Ź��������������Ѷʱ�������ѣ�������Ҫ����WM_DESTROYCLIPBOARDѶϢ��
�Զ����ϸ�ʽ
��
��ĿǰΪֹ�����ǽ�������Windows����ı�׼���������ϸ�ʽ�����ǣ����������ü����������桸�Զ����ϸ�ʽ�����������鴦����ʽʹ�����ּ������������������͸�ʽ����Ѷ�����֡�
����֮�£���������ƺ���û������ġ��������������������Ӧ�ó�ʽ֮�䴫�����ϣ���ô��Ϊʲô��������Ҫ����ֻ��һ��Ӧ�ó�ʽ��������������أ��𰸺ܼ򵥣�������������ͬһ����ʽ���ڲ������߿�����һ����ʽ�еIJ�ִͬ��ʵ��֮�䣩�������ϡ������Եأ���Щִ��ʵ�������������Լ����Զ����ϸ�ʽ��
�м���ʹ���Զ����ϸ�ʽ�ķ�������򵥵ķ����õ�һ�ֱ������DZ�׼��������ʽ�����֡�����ͼ��metafile�������ϣ����Ǹ�����ʵ����ֻ�����ij�ʽ�����塣��������£���SetClipboardData��GetClipboardData�����п�ʹ������wFormatֵ��CF_DSPTEXT��CF_DSPBITMAP��CF_DSPMETAFILEPICT��CF_DSPENHMETAFILE����ĸDSP��������ʾ����������Щ��ʽ����Windows�����֡�����ͼ��metafile���������ʾ���ϡ����ǣ���һ��ʹ�ó����CF_TEXT��CF_BITMAP��CF_DIB��CF_METAFILEPICT��CF_ENHMETAFILE��ʽ����GetClipboardData�ij�ʽ������ȡ��������ϡ�
���������һ�ָ�ʽ�����Ϸ���������У������ʹ��ͬ���ĸ�ʽ�������ϡ����ǣ����֪�����������Գ�ʽ����һ��ִ��ʵ�壬��������ʹ������ij�����ϸ�ʽ����һ����ʽ�أ�������һ�ַ���������͸�����к������Ȼ�ü����������ߣ�
hwndClipOwner = GetClipboardOwner () ;
Ȼ����Եõ����Ӵ����ŵ��Ӵ�������ƣ�
TCHAR szClassName [32] ; //�����г�ʽ GetClassName (hwndClipOwner, szClassName, 32) ;
�������������ʽ������ͬ����ô�������ɳ�ʽ����һ��ִ��ʵ�崫�͵��������еġ�
ʹ���Զ����ϸ�ʽ�ĵڶ��ַ����漰��CF_OWNERDISPLAY��ꡣSetClipboardData����������������NULL��
SetClipboardData (CF_OWNERDISPLAY, NULL) ;
����ijЩ���鴦����ʽ��Windows�ļ��������������ʾ��������ʾ��ʽ������ʱ�����õķ����������Եأ��������������֪�������ʾ���ָ�ʽ�����֡���һ�����鴦����ʽָ��CF_OWNERDISPLAY��ʽʱ����Ҳ�ͳе����ڼ��������������ʾ�����л�ͼ�����Ρ�
���������������ΪNULL��������CF_OWNERDISPLAY��ʽ�������������ߣ�����SetClipboardData�ij�ʽ���봦����Windows���������������ߵ��ӳ����ѶϢ���Լ�5������ѶϢ����5��ѶϢ���ɼ�������������͵������������ߵģ�
������ЩѶϢ�Ƚ��鷳����������ֵ�������������ǣ����ִ�����ʹ������˵������ġ��������鴦����ʽ�����ָ��Ƶ�������ʱ��ʹ�����ڼ��������������ʾ�����п������ֻ���������ʽʱ�������̹Щ��
ʹ��˽�м��������ϸ�ʽ�ĵ����ַ�����ע���Լ��ļ�������ʽ��������Windows�ṩ��ʽ����Windows����ʽ�ṩһ����ţ�����������SetClipboardData��GetClipboardData�ĸ�ʽ������һ����˵���������ַ����ij�ʽҲҪ��һ�ֱ�׼��ʽ�����ϸ��Ƶ������������ַ��������������������������ʾ��������ʾ���ϣ�û����CF_OWNERDISPLAY��صij�ͻ������������������ʽ�Ӽ������ϸ������ϡ�
���磬�ٶ������Ѿ���д��һ���Ե���ͼ��ʽ��metafile��ʽ���Լ�����ע��ļ�������ʽ�����ϸ��Ƶ��������е�������ͼ��ʽ�����������������ʾmetafile���ߵ���ͼ�������Ӽ������϶�ȡ����ͼ��metafile�ij�ʽ������⼸�ָ�ʽ�����ǣ������ǵ�������ͼ��ʽ��Ҫ�Ӽ������϶�����ʱ�����ᰴ���Լ���ע��ĸ�ʽ�������ϣ�������Ϊ���ָ�ʽ���ܰ������ȵ���ͼ��������metafile�������Ѷ��
��ʽ͸������ĺ�����ע��һ���µļ�������ʽ��
iFormat = RegisterClipboardFormat (szFormatName) ;
iFormat��ֵ���0xC000��0xFFFF֮�䡣���������������һ��ͨ������EnumClipboardFormatsȡ��Ŀǰ���м��������ϸ�ʽ�ij�ʽ������ȡ���������ϸ�ʽ��ASCII���ƣ�����ͨ���������ʵ���ģ�
GetClipboardFormatName (iFormat, psBuffer, iMaxCount) ;
Windows�����iMaxCount����Ԫ���Ƶ�psBuffer�С�
ʹ�����ַ��������ϸ��Ƶ��������еij�ʽд���ߣ�������Ҫ�������ϸ�ʽ���ƺ�ʵ�ʵ����ϸ�ʽ����������ʽ������������ô������ʽ�ͻ������ָ�ʽ�Ӽ������и������ϡ�
ʵ�������������
��
���Ӽ��������ݱ仯�ij�ʽ��Ϊ�������������������������Windows�еõ�һ���������������������Ҳ���Ա�д�Լ��ļ������������ʽ�������������ͨ�����ݵ�������Ӵ�ѶϢ������ʽ��ѶϢ�����Ӽ��������ݵı仯��
�������������
��
���������ļ����������Ӧ�ó�ʽ������ͬʱ��Windows��ִ�У����Ƕ����Լ��Ӽ��������ݵı仯�����ǣ���Windows�ĽǶ�������ֻ����һ������������������dz�֮Ϊ��Ŀǰ���������������Windowsֻ����һ��ʶ��Ŀǰ��������������Ӵ����ţ����ҵ������������ݷ����仯ʱֻ��ѶϢ���͵��Ǹ��Ӵ��С�
�����������Ӧ�ó�ʽ�б�Ҫ���롸������������������Ա�ִ�е����м�����������������յ�Windows���͸�Ŀǰ�������������ѶϢ����һ����ʽ���Լ�ע��Ϊһ�������������ʱ�����ͳ�ΪĿǰ�ļ������������Windows����ǰ��Ŀǰ������Ӵ����Ž��������ʽ�����Ҵ˳�ʽ������������š����˳�ʽ�յ�һ�������������ѶϢʱ���������ѶϢ���͸�������������һ����ʽ���Ӵ�ѶϢ������ʽ��
������������ĺ�ʽ��ѶϢ
��
��ʽ͸������SetClipboardViewer��ʽ���Գ�Ϊ���������������һ���֡������ʽ����Ҫ��������Ϊ���������������ô�����ʽ��WM_CREATEѶϢ�����ڼ���Ժ��������ʽ���ú�ʽ����ǰһ��Ŀǰ��������������Ӵ����š���ʽӦ�ð�������Ŵ����ھ�̬�����У�
static HWND hwndNextViewer ; //�����г�ʽ case WM_CREATE : //�����г�ʽ hwndNextViewer = SetClipboardViewer (hwnd) ;
�����Windows��һ��ִ���ڼ䣬���ij�ʽ��Ϊ������������ĵ�һ����ʽ����ôhwndNextViewer��ΪNULL��
���ܼ������е����������仯��Windows������WM_DRAWCLIPBOARDѶϢ���͸�Ŀǰ�ļ���������������ע��Ϊ��������������Ӵ�������������������е�ÿ����ʽ��Ӧ����SendMessage�����ѶϢ���͵���һ�����������������������е�����һ����ʽ����һ�����Լ�ע��Ϊ��������������Ӵ����������hwndNextViewerΪNULL�����hwndNextViewerΪNULL����ô��ʽֻ�򵥵ؽ�������Ȩ����ϵͳ���ѣ�������������ʽ�����κ�ѶϢ����Ҫ��WM_DRAWCLIPBOARDѶϢ��WM_PAINTCLIPBOARDѶϢ�����ˡ�WM_PAINTCLIPBOARD���ɼ�������������͸�ʹ��CF_OWNERDISPLAY���������ϸ�ʽ�ij�ʽ����WM_ DRAWCLIPBOARDѶϢ����Windows����Ŀǰ������������ģ���
����WM_DRAWCLIPBOARDѶϢ����򵥷����ǽ�ѶϢ���͸���һ�������������������hwndNextViewerΪNULL������ʹ�Ӵ�����ʾ������Ч��
case WM_DRAWCLIPBOARD : if ( hwndNextViewer) SendMessage (hwndNextViewer, message, wParam, lParam) ; InvalidateRect (hwnd, NULL, TRUE) ; return 0 ;
�ڴ���WM_PAINTѶϢ�����ڼ䣬ͨ��ʹ�ó����OpenClipboard��GetClipboardData��CloseClipboard���п��Զ�ȡ�����������ݡ�
��ij����ʽ��Ӽ��������������ɾ�����Լ�ʱ�����������ChangeClipboardChain�������ʽ����������������ij�ʽ֮�Ӵ����ţ�����һ����������������Ӵ����ţ�
ChangeClipboardChain (hwnd, hwndNextViewer) ;
����ʽ����ChangeClipboardChainʱ��Windows����WM_CHANGECBCHAINѶϢ��Ŀǰ�ļ������������wParam�����Ǵ������Ƴ����Լ����Ǹ�������Ӵ����ţ�ChangeClipboardChain�ĵ�һ����������lParam�Ǵ������Ƴ��Լ������һ����������������Ӵ����ţ�ChangeClipboardChain�ĵڶ�����������
����ʽ���յ�WM_CHANGECBCHAINѶϢʱ��������wParam�Ƿ����Ѿ������hwndNextViewer��ֵ���������������ʽ�����趨hwndNextViewerΪlParam���������֤������WM_DRAWCLIPBOARDѶϢ���ᷢ�͸��Ӽ��������������ɾ�����Լ����Ӵ������wParam�����hwndNextViewer ������hwndNextViewer��ΪNULL�����ѶϢ�͵���һ���������������
case WM_CHANGECBCHAIN : if ((HWND) wParam == hwndNextViewer) hwndNextViewer = (HWND) lParam ; else if (hwndNextViewer) SendMessage (hwndNextViewer, message, wParam, lParam) ; return 0 ;
��һ��Ҫʹ��else if��������ֻ��춱�֤hwndNextViewerΪ��NULL��ֵ��hwndNextViewer��ֵΪNULLʱ��ִ����γ�ʽ��ij�ʽ������������һ��������������Dz����ܵġ�
����ʽ�����ʱ���������Ȼ�ڼ�������������У�����������ɾ�������������ڴ���WM_DESTROYѶϢʱ����ChangeClipboardChain������������
case WM_DESTROY : ChangeClipboardChain (hwnd, hwndNextViewer) ; PostQuitMessage (0) ; return 0 ;
Windows����һ��������ʽ��õ�һ��������������Ӵ����ŵĺ�ʽ��
hwndViewer = GetClipboardViewer () ;
һ����˵����Ҫ�����ʽ�����û��Ŀǰ�ļ�������������򴫻�ֵΪNULL��
������һ��˵�����������������ι��������ӡ���Windows������ʱ��Ŀǰ�������������NULL��
������������� NULL
һ������hwnd1�Ӵ����ŵij�ʽ����SetClipboardViewer�������ʽ���ص�NULL��Ϊ�����ʽ�е�hwndNextViewerֵ��
Ŀǰ������������� hwnd1
hwnd1����һ��������� NULL
�ڶ�������hwnd2�Ӵ����ŵij�ʽ����SetClipboardViewer ��������hwnd1��
Ŀǰ�ļ������������ hwnd2
hwnd2����һ��������� hwnd1
hwnd1����һ��������� NULL
ÿ������ʽ (hwnd3)�͵��ĸ���ʽ (hwnd4) Ҳ����SetClipboardViewer �����Ҵ���hwnd2��hwnd3��
Ŀǰ�ļ������������ hwnd4
hwnd4����һ��������� hwnd3
hwnd3����һ��������� hwnd2
hwnd2����һ��������� hwnd1
hwnd1����һ��������� NULL
�������������ݷ����仯ʱ�� Windows����һ��WM_DRAWCLIPBOARDѶϢ��hwnd4�� hwnd4����ѶϢ��hwnd3��hwnd3����ѶϢ��hwnd2��hwnd2����ѶϢ��hwnd1��hwnd1���ء�
����hwnd2����ͨ�����к��д�����ɾ���Լ���
ChangeClipboardChain (hwnd2, hwnd1) ;
Windows��wParam���hwnd2��lParam���hwnd1��WM_CHANGECBCHAINѶϢ���͸�hwnd4�����hwnd4����һ����������hwnd3������hwnd4�����ѶϢ����hwnd3������hwnd3ע�⵽wParam���������һ��������(hwnd2)�����Խ���һ��������趨ΪlParam (hwnd1)���Ҵ��ء���������������ˡ����ڼ���������������£�
Ŀǰ������������� hwnd4
hwnd4����һ��������� hwnd3
hwnd3����һ��������� hwnd1
hwnd1����һ��������� NULL
һ���򵥵ļ����������
��
�������������һ��Ҫ��Windows���ṩ���������ƣ����磬���������������ֻ��ʾһ�ּ��������ϸ�ʽ����ʽ12-2����ʾ��CLIPVIEW��ʽ��һ��ֻ����ʾCF_TEXT��ʽ�ļ������������
��ʽ12-2 CLIPVIEW CLIPVIEW.C /*------------------------------------------------------------------------- CLIPVIEW.C -- Simple Clipboard Viewer (c) Charles Petzold, 1998 --------------------------------------------------------------------------*/ #include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("ClipView") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox ( NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, TEXT ("Simple Clipboard Viewer (Text Only)"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam) { static HWND hwndNextViewer ; HGLOBAL hGlobal ; HDC hdc ; PTSTR pGlobal ; PAINTSTRUCT ps ; RECT rect ; switch (message) { case WM_CREATE: hwndNextViewer = SetClipboardViewer (hwnd) ; return 0 ; case WM_CHANGECBCHAIN: if ((HWND) wParam == hwndNextViewer) hwndNextViewer = (HWND) lParam ; else if (hwndNextViewer) 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�ṩ���Ǹ�������һ������������ϸ�ʽ�ļ��������������Ҫ���һЩ����������������ʾ��������Ŀǰ�������ϸ�ʽ�����ơ�ʹ���߿���ͨ������EnumClipboardFormats��ʹ��GetClipboardFormatName�õ��DZ�׼���ϸ�ʽ����������������ʹ��CF_OWNERDISPLAY���ϸ�ʽ�ļ��������������������ĸ�ѶϢ�������������ϵ�ӵ��������ʾ�����ϣ�
WM_PAINTCLIPBOARD WM_SIZECLIPBOARD |
WM_VSCROLLCLIPBOARD WM_HSCROLLCLIPBOARD |
��������д�����ļ��������������ô����ʹ��GetClipboardOwner��ü����������ߵ��Ӵ����ţ���������Ҫ�޸ļ���������ʾ����ʱ������ЩѶϢ���͸����Ӵ���