5.クリップボードの概念 |
6.クリップボード関数の作成(クリップボードへのデータ書き込み) |
クリップボードにデータを設定する関数 void CMyHtmlView::SetClipBoard(CString str) { char *ptr; HGLOBAL hMem; hMem = GlobalAlloc(GHND, (DWORD)str.GetLength() + 1); ptr = (char *)GlobalLock(hMem); lstrcpy(ptr,str); ::GlobalUnlock(hMem); ::OpenClipboard(m_hWnd); ::EmptyClipboard(); ::SetClipboardData(CF_TEXT, hMem); ::CloseClipboard(); GlobalFree(hMem); } |
7.クリップボード関数の作成(クリップボードからのデータ読み込み) |
クリップボードからデータを読み出す関数 CString CMyHtmlView::GetClipBoard(void){ HANDLE hMem; char *ptr; ::OpenClipboard(m_hWnd); hMem = ::GetClipboardData(CF_TEXT); ptr = (char *)::GlobalLock(hMem); ::GlobalUnlock(hMem); ::CloseClipboard(); return (CString)ptr; } |
8.便利関数を作ってしまいましょう。 |
太字タグを挿入する関数(面倒くさい例) void CMyHtmlView::OnButtonBold{ /* (1) */ CString strData;//選択された文字列(タグで挟まれる文字列) CString strTag;//タグを挟んだあとの文字列 CEdit& cEdt = GetEditCtrl();//CEditへのポインタを取得 cEdt.Copy();//クリップボードへ選択された文字列をコピー strSel = GetClipBoard();//クリップボードからデータを取得 strTag = "<B>" + strData + "</B>"; /* (2) */ SetClipBoard(strTag);//クリップボードにタグを挟んだあとも文字列を挿入 OnEditPaste();//クリップボードのデータを貼り付け } |
太字タグを挿入する関数(スマートな例) void CMyHtmlView::OnButtonBold{ CString strTag = MakeTag("<B>","</B>");//上の(1)の部分 PasteString(strTag);//上の(2)の部分 } |
// 文字列のペースト void CMyHtmlView::PasteString(CString str){ SetClipBoard(str); OnEditPaste(); } // タグの作成 CString CMyHtmlView::MakeTag(CString strTagA,CString strTagB){ CString strSel,strTag; CEdit& cEdt = GetEditCtrl(); cEdt.Copy(); strSel = GetClipBoard(); strTag = strTagA + strSel + strTagB; return strTag; } |