==VC++==
[[C++]] | [[Visual Studio]] | [[C Sharp]] |
===[[MFC]]===
====概略====
*[[MFC はじめに|はじめに] [はじめに]*[[MFC イベントハンドリング|イベントハンドリング] [イベントハンドリング]*[[VC++ メンバー関数のオーバーライド|メンバー関数のオーバーライド] [メンバー関数のオーバーライド]*[[MFC CString|CString] [CString]
====簡単なダイアログアプリケーションを作ってみる====
*[[MFC ダイアログの作成|ダイアログの作成] [ダイアログの作成]**[[MFC ファイルを選択|ファイルを選択] [ファイルを選択]**[[MFC ファイルを読む|ファイルを読む] [ファイルを読む]**[[MFC リストボックスに要素を追加|リストボックスに要素を追加] [リストボックスに要素を追加]**[[MFC マルチスレッド|マルチスレッド化] [マルチスレッド化]
====簡単なサービスを作ってみる====
**[[ATLサービスプロジェクト]]====レジストリ文字列値の読み出し====https://github.com/GiovanniDicanio/ReadStringsFromRegistry/blob/master/README.md上記を参考に、C++でレジストリから文字列値を取得する実装http://chipmunkland.blog104.fc2.com/blog-entry-67.html取得した値をマルチバイト文字列に変換する <pre>#include <stdio.h>#include <iostream>#include <windows.h>#include <winreg.h>#include <atlstr.h> /// https://github.com/GiovanniDicanio/ReadStringsFromRegistry/blob/master/README.md/// http://chipmunkland.blog104.fc2.com/blog-entry-67.html///int main(){ // Windowsレジストリから文字列値を取得するために、Win32 RegGetValue() APIを使用する // // 取得する文字列のサイズは事前には分からないので、RegGetValue()関数を2回呼び出す // 最初の呼び出しの目的は、文字列を格納するのに十分な大きさのバッファを割り当てるためのサイズ値を取得する // サイズ値が決まれば、適切なバッファサイズを持つ CString インスタンスを割り当てることができる // 次に、RegGetValue()関数を再度呼び出し、今度はpvDataパラメータに有効なバッファポインタと、有効な最大バッファサイズを渡す // 2回目の呼び出しが成功すると、RegGetValue()関数は提供されたバッファに実際の文字列値を格納 DWORD keyType = 0; DWORD dataSize = 0; const DWORD flags = RRF_RT_REG_SZ; // 文字列(REG_SZ)のみ読み込み可 LONG result = ::RegGetValue( HKEY_CURRENT_USER, _T("Software\\レジストリサブキー"), _T("レジストリ値"), flags, &keyType, nullptr, // pvData == nullptr ? Request buffer size &dataSize); if (result != ERROR_SUCCESS) { return 1; } CString text; const DWORD bufferLength = dataSize / sizeof(WCHAR); // WCHARの長さ WCHAR* const textBuffer = text.GetBuffer(bufferLength); // レジストリから文字列値をローカルの文字列バッファに読み込む result = ::RegGetValue( HKEY_CURRENT_USER, _T("Software\\レジストリサブキー"), _T("レジストリ値"), flags, nullptr, textBuffer, // このバッファに文字列を書き込む &dataSize); if (result != ERROR_SUCCESS) { return 1; } const DWORD actualStringLength = dataSize / sizeof(WCHAR); // -1 to exclude the terminating NUL text.ReleaseBufferSetLength(actualStringLength - 1); // std::wcout << text.GetString() << std::endl; // CStringをマルチバイト文字に変換 CT2A scr(text); // std::wcout << scr << std::endl; // プログラムを起動 system(scr); //FreeConsole(); ::ShowWindow(::GetConsoleWindow(), SW_HIDE); return 0;}</pre>
----
{{amazon|B0011410RG}}