/*   クリップボードの操作 1999/ 4/30 宍戸 輝光 */ #include LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); HWND hwCopyB,hwPasteB,hwStrE; HINSTANCE hInst; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){ HWND hwnd; MSG msg; WNDCLASSEX wndclass ; hInst=hInstance; wndclass.cbSize = sizeof(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 = "CWindow"; wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION); RegisterClassEx (&wndclass); hwnd = CreateWindow ("Cwindow","クリップボードテスト",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,256,144, 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 iMsg, WPARAM wParam, LPARAM lParam) { HGLOBAL hMem; LPTSTR lpMem; switch (iMsg) { case WM_CREATE: hwStrE=CreateWindow("Edit",NULL, WS_CHILD |WS_VISIBLE |WS_BORDER,16,8,192,32,hwnd, (HMENU)0,hInst,NULL); hwCopyB=CreateWindow("Button","コピー", WS_CHILD |WS_VISIBLE |BS_CENTER,16,60,96,32,hwnd, (HMENU)1,hInst,NULL); hwPasteB=CreateWindow("Button","貼り付け", WS_CHILD | WS_VISIBLE |BS_CENTER,128,60,96,32,hwnd, (HMENU)2,hInst,NULL); break; case WM_COMMAND: switch (LOWORD(wParam)) { case 1: /* クリップボードにコピー */ /* エディタに文字列がなければ中止 */ if (GetWindowTextLength(hwStrE)==0) break; /* バッファ用のメモリブロック確保 */ hMem=GlobalAlloc(GHND,GetWindowTextLength(hwStrE)+1); /* メモリオブジェクトをロックしてアドレスを取得 */ lpMem=GlobalLock(hMem); /* エディタの文字列をバッファに取得 */ GetWindowText(hwStrE,lpMem,GetWindowTextLength(hwStrE)+1); /* バッファをアンロック */ GlobalUnlock(hMem); /* クリップボードをオープン */ OpenClipboard(hwnd); /* クリップボードをクリア */ EmptyClipboard(); /* クリップボードにバッファの文字列をコピー */ SetClipboardData(CF_TEXT,hMem); /* クリップボードをクローズ */ CloseClipboard(); break; case 2: /* クリップボードから貼り付け */ OpenClipboard(hwnd); /* クリップボードから文字列のメモリオブジェクト取得 */ hMem=GetClipboardData(CF_TEXT); if (hMem==NULL) { /* テキストがなければ中止 */ CloseClipboard(); break; } /* メモリオブジェクトをロック */ lpMem=GlobalLock(hMem); /* エディタにロックしたバッファの内容を設定 */ SetWindowText(hwStrE,lpMem); /* バッファをアンロック */ GlobalUnlock(hMem); CloseClipboard(); } break; case WM_DESTROY : PostQuitMessage(0); return 0; } return DefWindowProc (hwnd, iMsg, wParam, lParam) ; }