CEdit::SetHandle
更新 : 2007 年 11 月
複数行のエディット コントロールで使われるローカル メモリへのハンドルを設定します。
void SetHandle(
HLOCAL hBuffer
);
パラメータ
- hBuffer
ローカル メモリへのハンドルです。このハンドルは、あらかじめ LMEM_MOVEABLE フラグを設定して LocalAlloc Windows 関数を呼び出して作成しておく必要があります。このメモリが NULL で終わる文字列の格納先になります。NULL で終わる文字列を含めない場合は、割り当てたメモリの先頭バイトを 0 に設定してください。
解説
設定後は、エディット コントロールは、現在表示されているテキストを格納するために自身で確保したバッファの代わりにこのバッファを使います。
このメンバ関数は、複数行のエディット コントロールでのみ処理されます。
アプリケーションが新しいメモリ ハンドルを設定する前に、現在確保しているメモリ バッファのハンドルを GetHandle メンバ関数を使って取得し、Windows 関数の LocalFree を使ってこのメモリを解放する必要があります。
SetHandle 関数は取り消しバッファをクリアします (CanUndo メンバ関数は 0 を返すようになります)。さらに、内部変更フラグもクリアします (GetModify メンバ関数は 0 を返すようになります)。エディット コントロール ウィンドウは再描画されます。
ダイアログ ボックスを DS_LOCALEDIT スタイルで作成したときのみ、ダイアログ ボックスの複数行のエディット コントロールでこのメンバ関数が使えます。
メモ : |
---|
GetHandle 関数は Windows 95/98 では機能しません。Windows 95/98 で GetHandle 関数を呼び出すと、NULL を返します。Windows NT 3.51 以降のバージョンでは、GetHandle 関数が上の説明どおりに動作します。 |
詳細については、Windows SDK の「EM_SETHANDLE」と「LocalAlloc」および「LocalFree」を参照してください。
使用例
// The string to set in the edit control.
CString strString(_T("George Frideric"));
// Initialize the new local handle.
size_t cbSize = (strString.GetLength() + 1) * sizeof(TCHAR);
HLOCAL h = ::LocalAlloc(LHND, cbSize);
LPTSTR lpszText = (LPTSTR) ::LocalLock(h);
_tcsncpy_s(lpszText, cbSize / sizeof(TCHAR), strString, _TRUNCATE);
::LocalUnlock(h);
// Free the current text handle of the edit control.
::LocalFree(m_myEdit.GetHandle());
// Set the new text handle.
m_myEdit.SetHandle(h);
必要条件
ヘッダー : afxwin.h