《Windows程序设计》之剪贴板

	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
		case IDM_EDIT_PASTE:
			//打开剪切板
			OpenClipboard(hwnd);
			//取得指向文本的全局内存块的句柄
			if(hGlobal=GetClipboardData(CF_TCHAR))
			{
				//锁定剪切板,同时得到一个指向数据块的指针
				pGlobal=(PTSTR)GlobalLock(hGlobal);
				//清pText数据
				if(pText)
				{
					free(pText);
					pText=NULL;
				}
				//分配大小
				pText=(PTSTR)malloc(GlobalSize(hGlobal));
				//复制
				lstrcpy(pText,pGlobal);
				//刷新,触发WM_PAINT
				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=(PTSTR)GlobalLock(hGlobal);
			//复制
			lstrcpy(pGlobal,pText);
			//解锁(可以让Windows自由移动内存中的内存块)
			GlobalUnlock(hGlobal);
			//打开剪切板
			OpenClipboard(hwnd);
			//清空剪切板
			EmptyClipboard();
			//将内存句柄传给剪切板,后关闭剪切板
			SetClipboardData(CF_TCHAR,hGlobal);
			CloseClipboard();
			//如果是复制的话,就直接返回0,不是的话,直接执行IDM_EDIT_CLEAR,实现了剪切
			if(LOWORD(wParam)==IDM_EDIT_COPY)
				return 0;
		case IDM_EDIT_CLEAR:
			if(pText)
			{
				free(pText);
				pText=NULL;
			}
			InvalidateRect(hwnd,NULL,TRUE);
			return 0;
以后在使用剪贴板时,按这种顺序来用,学习一种方法吧。

你可能感兴趣的:(windows,command,null)