ちょっとしたメモ

個別にメニューを作るまでもないメモ。
小技?かな?

MFCのレジストリを操作

MFCは
HKEY_CURRENT_USER\Software\<company namegt;\<application namegt;
というようにレジストリを利用します。

<company name>を変更する場合、CWinApp派生クラスのInitInstanceのSetRegistryKeyの引数の値を変えます。
<application name>を変更する場合、文字列リソースのAFX_IDS_APP_TITLEの値を変更すると変えられます。

タスクトレイのアイコンクリックでポップアップメニューを表示する時のおまじない

メニューのオーナーとなるウィンドウを最前列に表示させる。
そうしないと、メニューの範囲外(他のウィンドウやデスクトップなど)をクリックしてもメニューが消えない。
SetForgroundWindowなどでどうぞ

特定のプロジェクトを開くとVCがイカれる

複数のプロジェクトを登録したプロジェクトで起きることがある(とりあえず体験したのがこのパターンのときだけ)
複数のプロジェクトを登録したプロジェクト(ここではhogeとしよう)の .ncb(hoge.ncb) ファイルを削除すると回避できる。

CStringでの改行検索

改行の検索は、char型のポインタ配列等で地道に探すより、CStringを使うと楽に行える。
ただし、改行コードに依存したい場合は別だと思われる。

改行検索
//改行コード:CRLF
char retSet[3] = {0x0d, 0x0a, NULL};

CString cStr;
    ・・・なんか、文字をcStrに設定する処理・・・

if(cStr.Find(retSet, 0) != -1){
   ・・・改行がある場合・・・
}else{
   ・・・改行が無い場合・・・
}

とまあ、こんなカンジで。

メッセージの数値を知りたい

WM_XXXX(WM_LBUTTONDOWN等)にカーソルを合わせて F12 を押す。
これはそのほかの定数や変数、関数でも利用可能。
当然ながら、それらを定義したソースが参照できるところにあるのが前提。

関数にデフォルト値を設定

プロトタイプ宣言のみで設定しておく

型 関数名 ( 引数1, 引数2 = 値, ...)



というカンジで。
たとえば

void HogeMethod(int x, int y, DWORD flag = DefaultFlag);


というように。

VisualStudioで秀丸を使う

アドインで利用する方法もあります。
しかし、VisualStudioの設定でも利用可能になります。
[メニュー]→[ツール]→[カスタマイズ] でカスタマイズ画面を開きます。
[ツール]タブを選択し、[メニュー項目]に "秀丸エディタ" を追加します。
次に[コマンド]に秀丸のパスを入力します。
そして、引数を設定します。とりあえず /j$(CurLine) $(FilePath) と 入力しておけば困りません。

今度は[キーボード]タブを選択します。
[カテゴリ] のところのコンボボックスの中から [ツール] を選択します。
その下の [コマンド] の中から UserTool??(先ほどの[ツール]タブのメニュー項目の 何番目に秀丸が登録されているかで ?? の数字が変わります。)を選択します。
[新しいショートカット] のエディット部分をクリックし、割り当てたいショートカットを押します。
そこまでできたら、 [割り当て]ボタン を押します。[OK]を押せば完了です。

VisualStudioでソースを開いて、任意の場所で、割り当てたショートカットを押してみましょう。
秀丸が起動されるはずです。

秀丸でMSDNを使う

秀丸で[メニュー]→[その他]→[動作環境]を選択し、動作環境ダイアログを表示させます。
左のツリーで[パス]の子アイテム[環境]をクリックします。
[外部ヘルプファイル]のエディットのところにMSDNのパスを入れます。
自分の環境では

C:\Program Files\Microsoft Visual Studio\MSDN\2001JUL\1041\MSDN120.COL

でした。
[OK]を押します。

次に[メニュー]→[その他]→[キー割り当て]を押します。
好みのショートカットを選択し、[コマンド]のコンボボックスで[その他]を選択します。
その下のリストから[外部ヘルプファイル]を選択し、[OK]を押します。

あとは試しに秀丸にMSDNで引っかかるキーワードを記述、ショートカットを押してみましょう。
MSDNが起動して、目的のヘルプが表示されればOKです。