您的位置:首頁>正文

C/C++打造專屬複製工具

C/C++打造專屬複製工具

工具: vs2013/vs2015/vs2010/VC 6.0 ---編譯器

需要的能力:C/C++ 基礎 win32/MFC基本框架

首先:創建MFC 對話方塊程式

更多問題解答,學習交流,請少俠駐足:C/C++學習交流 8群 491994603

其次直接畫圖, 沒看錯, 寫程式就是畫圖, 非常簡單:

更多問題解答,學習交流,請少俠駐足:C/C++學習交流 8群 491994603

然後就是寫代碼。 代碼比較多, 小便在這裡就獻上主要代碼:

No.1 為基本控制項添加變數去保存要發送的資訊

CString m_strF1;

CString m_strF2;

CString m_strF3;

CString m_strF4;

CString m_strF5;

CString m_strF6;

CString m_strF7;

CString m_strF8;

No.2 註冊熱鍵

//函數的使用:: 全域的函數--函式呼叫

//註冊F1-F8熱鍵

::RegisterHotKey(m_hWnd, 1001, NULL, VK_F1); //註冊熱鍵F1

::RegisterHotKey(m_hWnd, 1002, NULL, VK_F2); //註冊熱鍵F1

::RegisterHotKey(m_hWnd, 1003, NULL, VK_F3); //註冊熱鍵F1

::RegisterHotKey(m_hWnd, 1004, NULL, VK_F4); //註冊熱鍵F1

::RegisterHotKey(m_hWnd, 1005, NULL, VK_F5); //註冊熱鍵F1

::RegisterHotKey(m_hWnd, 1006, NULL, VK_F6); //註冊熱鍵F1

::RegisterHotKey(m_hWnd, 1007, NULL, VK_F7); //註冊熱鍵F1

::RegisterHotKey(m_hWnd, 1008, NULL, VK_F8); //註冊熱鍵F1

No.2 處理熱鍵, 按鍵比較多, 我就在這裡以F1為例

if (nHotKeyId == 1001) //F1 Id 是1001 註冊的時候的id

{

//如果編輯方塊沒有內容, 沒有必要拷貝到剪切板

if (m_strF1.IsEmpty())

return;

//把文字放到剪切板裡面去

if (OpenClipboard()) //打開剪切板 成功

{

//清空剪切板

EmptyClipboard();

//分配記憶體

//char wchat_t

// malloc

// char * p=(char *)malloc(sizeof(char)*n)

//不是從事演算法這塊/伺服器/遊戲

TCHAR *buffer = (TCHAR *)GlobalAlloc(GMEM_DDESHARE, m_strF1.GetLength() + 1);

//綁定記憶體--讓指標指向分配記憶體的首位址

buffer = (TCHAR *)GlobalLock(buffer);

//複製到buffer ------- 字串複製 strcpy

strcpy(buffer, m_strF1.GetBuffer()); //如果報錯, 改為寬位元組編碼

//這裡報錯了, 要你使用_s 系列 _getch _kbhit scanf_s

//解鎖綁定記憶體

GlobalUnlock(buffer);

//指定資料按照指定格式放到剪切板

SetClipboardData(CF_TEXT, buffer); //CF_TEXT 代表資料樣式 :Edit數據

//關閉剪切板

CloseClipboard();

}

//類比按鍵 ---keybd_event() 類比

/*

視頻 +源碼+筆記

*/

//按F1 實現Ctr+v的功能

keybd_event(VK_CONTROL, 0, 0, 0); //按下ctrl

keybd_event(_T('V'), 0, 0, 0); //按下v鍵

//釋放

keybd_event(_T('V'), 0, KEYEVENTF_KEYUP, 0); //構造函數+析構函數的順序相反

keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

return;

}

No.3 當你寫完的時候,
你發現好像不能換行, 這時候我們處理換行的問題

//多行輸入 ------按下Enter 實現

注意是:處理按鍵是修改消息函數:PreTranslateMessage(MSG* pMsg)

if ((WM_KEYFIRST <= pMsg->message) && (pMsg->message <= WM_KEYLAST))

{

//通用消息, 和專用消息 : 高四位 低四位

if (pMsg->wParam == VK_RETURN) //按鍵消息等於Enter

{

HWND hWnd = ::GetFocus(); //獲取當前滑鼠所在視窗的控制碼

int iID = ::GetDlgCtrlID(hWnd); //獲取這個控制項 的ID

if (iID == IDC_EDIT1) //判斷是否是第一個編輯

{

//在原來的資料前面加;

CString sData;

sData.Empty(); //清空sData

int lenData = 0; //初始化長度

GetDlgItemText(IDC_EDIT1, sData); //獲取編輯方塊中內容

sData += "";

SetDlgItemTextA(IDC_EDIT1, sData); //結果顯示在編輯方塊

lenData = sData.GetLength();

((CEdit*)GetDlgItem((IDC_EDIT1)))->SetSel(lenData, lenData);

}

}

No.4 檔操作

第一步:初始化的檔操作

CFile file1;

if (!file1.Open("1.txt", CFile::modeRead))

{

m_strF1 = "strF1";

}

else{

char pBuffer[256] = { 0 };

file1.Read(pBuffer, 256);

m_strF1 = pBuffer;

file1.Close();

}

第二步:修改內容後的操作, 需要為控制項添加控制項事件

voidCMyCopyToolDlg::OnEnChangeEdit1()

{

UpdateData(TRUE);

CFile file;

if (file.Open("1.txt", CFile::modeWrite | CFile::modeCreate))

{

file.Write(m_strF1, m_strF1.GetLength());

file.Close();

}

}

更多問題解答,學習交流,請少俠駐足:C/C++學習交流 8群 491994603

好了到這裡, 一個完美的聊天助手已經誕生, 要注意是上面都是以第一個編輯方塊為例, 所以代碼你得重複8次哈哈。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示