ブレークポイントがヒットしない時の対処

Posted on Wed 17 March 2010 in Windows • Tagged with Windows

デバック時、リビルドしたソースにブレークポイントを設定しても、
ブレークポイントは、現在の設定ではヒットしません。ソースコード が元のバージョンと異なります。」
と表示されるときの対処

[「ツール」→「オプション」→「デバッグ」→「全般」を開き、「元のバージョンと完全に一致するソースファイルを必要とする」のチェックをはずす。]

http://www.langedge.jp/blog/?&blogid=1&archive=2006-6-14


TreeViewコントロール 選択されたアイテムの文字列を取得するには

Posted on Fri 28 August 2009 in Windows • Tagged with Windows

まず、親ウィンドウでWM_NOTIFYを捕まえる。
WM_NOTIFYでTreeViewのイベントが送られてくるのでこれを処理する。
このときLPARAMにはNMTREEVIEW構造体のアドレスが入っている。

 LPNMTREEVIEW lpnmtview = (LPNMTREEVIEW)lp;
if(lpnmtview->hdr.idFrom != IDC_CONFIG_TREE) return;
switch(lpnmtview->hdr.code){
  case NM_CLICK: //ツリーアイテムクリック時
    break;
  case TVN_SELCHANGED: //ツリーアイテム選択変更時
    break;
}

このように
lpnmtview->hdr.idFromにツリービューのIDが、
lpnmtview->hdr.codeのイベントのIDが入っている。

クリックイベント時にはまだ、アイテムは選択されていないので、
NM_CLICKを捕まえて、選択アイテムを取得するというやり方では上手くいかない。

なので、TVN_SELCHANGED時に、選択アイテムを取得するという方法で行います。
このとき、送られてくる、NMTREEVIEW構造体に選択されているTVITEMが入ってるが、
このTVITEMのラベル名は正しく格納されていないので自分で取得する必要がある。

コード例は以下のようになる。

 LPNMTREEVIEW lpnmtview = (LPNMTREEVIEW)lp;
if …

Continue reading