Ctrl+C的功能实现

BOOL XXXX::PreTranslateMessage(MSG* pMsg)
{
 if ((pMsg-> wParam== 'c' || pMsg->wParam == 'C') &&   (GetAsyncKeyState(VK_CONTROL)   &   0x8000)   ==   0x8000)
 {
  CString str=_T("要复制的文本");
  //复制到剪贴板
      if (OpenClipboard())    //打开剪贴板
      {
          HGLOBAL clipBuffer; 
          EmptyClipboard();    //清空剪贴板
 
 #ifdef _UNICODE        
   //复制Unicode字符串到剪贴板

          wchar_t * buffer; //指向宽字符的指针变量
          clipBuffer = GlobalAlloc(GMEM_DDESHARE, str.GetLength()*2+2);   //Unicode串,其中每个字符占 2 byte
          buffer = (wchar_t*)GlobalLock(clipBuffer);
          wcscpy_s(buffer,str.GetLength()+1,str);
          GlobalUnlock(clipBuffer);
          SetClipboardData(CF_UNICODETEXT,clipBuffer);   //剪贴板格式为CF_UNICODETEXT ---Unicode文本
 #else          
          //复制ANSI字符串到剪贴板

          char *pbuff;
          clipBuffer = GlobalAlloc(GMEM_DDESHARE,str.GetLength()+1); //ANSI串,其中每个字符占 1 byte
          buff = (char*)GlobalLock(clipBuffer);
          strcpy(pbuff,str.GetLength()+1,LPCSTR(str));
          GlobalUnlock(clipBuffer);
          SetClipboardData(CF_TEXT,clipBuffer);  //剪贴板格式为CF_TEXT ---ANSI文本
 #endif

          CloseClipboard(); //关闭剪贴板
      }
  return XXXX::PreTranslateMessage(pMsg);
 }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

剪贴板取字

 

CString str;
 if (OpenClipboard())
 {
  HANDLE hClip=GetClipboardData(CF_UNICODETEXT);
  WCHAR* buff;
  buff=(WCHAR*)GlobalLock(hClip);
  str=buff;
  GlobalUnlock(hClip);
  CloseClipboard();
  m_EditError.SetWindowTextW(str);
 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是符合要求的C++ Windows代码: ```c++ #include <windows.h> #include <iostream> #include <fstream> using namespace std; LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { // 注册窗口类 WNDCLASS wc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hInstance = hInstance; wc.lpfnWndProc = WndProc; wc.lpszClassName = "MyClass"; wc.lpszMenuName = NULL; wc.style = CS_HREDRAW | CS_VREDRAW; if (!RegisterClass(&wc)) { MessageBox(NULL, "窗口类注册失败!", "错误", MB_OK); return 0; } // 创建窗口 HWND hWnd = CreateWindow("MyClass", "My Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, NULL); if (!hWnd) { MessageBox(NULL, "窗口创建失败!", "错误", MB_OK); return 0; } // 显示窗口 ShowWindow(hWnd, nShowCmd); UpdateWindow(hWnd); // 消息循环 MSG msg; 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 hEdit; static HINSTANCE hInstance; switch (message) { case WM_CREATE: // 创建编辑框 hEdit = CreateWindow("Edit", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN, 0, 0, 0, 0, hWnd, NULL, hInstance, NULL); if (!hEdit) { MessageBox(hWnd, "编辑框创建失败!", "错误", MB_OK); return 0; } break; case WM_SIZE: // 调整编辑框大小 MoveWindow(hEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE); break; case WM_COMMAND: switch (LOWORD(wParam)) { case ID_FILE_SAVE: // 打开保存对话框 char szFileName[MAX_PATH]; ZeroMemory(szFileName, MAX_PATH); OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hWnd; ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0"; ofn.lpstrFile = szFileName; ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_EXPLORER | OFN_OVERWRITEPROMPT; if (GetSaveFileName(&ofn)) { // 保存文件 ofstream ofs(szFileName); if (ofs) { int nLen = GetWindowTextLength(hEdit); char* pszText = new char[nLen + 1]; ZeroMemory(pszText, nLen + 1); GetWindowText(hEdit, pszText, nLen + 1); ofs.write(pszText, nLen); delete[] pszText; ofs.close(); } } break; } break; case WM_KEYDOWN: if (GetKeyState(VK_CONTROL) < 0) { switch (wParam) { case 'A': // Ctrl+A:选择所有文字 SendMessage(hEdit, EM_SETSEL, 0, -1); break; case 'C': // Ctrl+C:复制选中的文字 SendMessage(hEdit, WM_COPY, 0, 0); break; case 'V': // Ctrl+V:粘贴文字 SendMessage(hEdit, WM_PASTE, 0, 0); break; case 'S': // Ctrl+S:保存文件 SendMessage(hWnd, WM_COMMAND, ID_FILE_SAVE, 0); break; } } break; case WM_DESTROY: // 销毁窗口 PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } ``` 代码实现了在Windows下创建一个窗口,其中包含一个编辑框,可以响应键盘输入文字,支持Ctrl+A选择所有文字,Ctrl+C复制选中的文字,Ctrl+V粘贴文字,粘贴位置紧随原文之后,Ctrl+S保存所输入文字为文本文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值