首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

剪贴板的简略应用

2012-09-16 
剪贴板的简单应用配合鼠标,剪贴板,学习windows程序设计,主要掌握windows中的消息处理机制。Demo解释:鼠标获

剪贴板的简单应用

配合鼠标,剪贴板,学习windows程序设计,主要掌握windows中的消息处理机制。

Demo解释:鼠标获取屏幕上任意一点颜色,然后,将颜色值传入剪贴板,然后去带有粘贴功能的文本编辑器,ctrl+v就能将取得的颜色值复制下来。程序没有任何实战意义,仅是为了实践。

#include <windows.h>void FindWindowSize(int *, int *);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, PSTR szCmdLine, int iCmdShow){TCHAR szAppName[] = TEXT("ColorPicker");MSG msg;WNDCLASS wndclass;HWND hwnd;int cxWindow, cyWindow;wndclass.cbClsExtra = 0;wndclass.cbWndExtra = 0;wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);wndclass.hInstance = hInstance;wndclass.lpfnWndProc = WndProc;wndclass.lpszClassName = szAppName;wndclass.lpszMenuName = NULL;wndclass.style = CS_HREDRAW | CS_VREDRAW;if (!RegisterClass(&wndclass)){MessageBox(NULL, TEXT("Run Error"), szAppName, MB_ICONERROR);return 0;}FindWindowSize(&cxWindow, &cyWindow);hwnd = CreateWindow(szAppName,szAppName,WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_BORDER,CW_USEDEFAULT,CW_USEDEFAULT,cxWindow,cyWindow,NULL,NULL,hInstance,NULL);ShowWindow(hwnd, iCmdShow);UpdateWindow(hwnd);while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}void FindWindowSize(int *pcxWindow, int *pcyWindow){HDC hdcScreen;TEXTMETRIC tm;hdcScreen = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);GetTextMetrics(hdcScreen, &tm);DeleteDC(hdcScreen);*pcxWindow = 2 * GetSystemMetrics(SM_CXBORDER) + 12 * tm.tmAveCharWidth;*pcyWindow = 2 * GetSystemMetrics(SM_CYBORDER) + GetSystemMetrics(SM_CYCAPTION) + 2 * tm.tmHeight;}LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){static COLORREF cr, crLast;static HDC hdcScreen;HDC hdc;PAINTSTRUCT ps;POINT pt;RECT rc;TCHAR szBuffer[20];GLOBALHANDLE hGlobal;char *pGlobal;int i = 0;switch (message){case WM_CREATE:hdcScreen = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL); SetTimer(hwnd, 1, 100, NULL);return 0;case WM_PAINT:hdc = BeginPaint(hwnd, &ps);GetClientRect(hwnd, &rc);wsprintf(szBuffer, TEXT("#%02X%02X%02X"), GetRValue(cr), GetGValue(cr), GetBValue(cr));DrawText(hdc, szBuffer, -1, &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);EndPaint(hwnd, &ps);// 将值传送至剪贴板hGlobal = GlobalAlloc(GHND | GMEM_SHARE, 20);if (NULL == hGlobal){return 0;}pGlobal = (char*)GlobalLock(hGlobal);for (i = 0; i < 20; ++i){*pGlobal++ = szBuffer[i];}GlobalUnlock(hGlobal);OpenClipboard(hwnd);EmptyClipboard();SetClipboardData(CF_TEXT, hGlobal);CloseClipboard();return 0;case WM_TIMER:GetCursorPos(&pt);cr = GetPixel(hdcScreen, pt.x, pt.y);if (cr != crLast){crLast = cr;InvalidateRect(hwnd, NULL, FALSE);}return 0;case WM_DESTROY:DeleteDC(hdcScreen);KillTimer(hwnd, 1);PostQuitMessage(0);return 0;}return DefWindowProc(hwnd, message, wParam, lParam);}


热点排行