SaDoSoftware use MyCSS.

チェックボタンのプッシュメッセージ04/11/4

その名のとおり、チェックボタンをプッシュしたときのメッセージはチェックが変わった後来ます
ほんとメモみたいな内容ですね。。。よって、IDC_CHECKをWM_COMMAND内で捕まえたときに
IsDlgButtonChecked()などを使うとしっかり変わった後の情報を得られます、
boolとかで蓄えとかなくていいですね

WM_NOTIFY 04/11/2

これって『コモン』コントロールしか送ってこないんですね
補足、コモンコントロールとはリストビューとかツールバーとか
ちょいとしためんどーなことしないと使えないコントロールのことです
(詳しい事はわかりません・・)
WM_NOTIFYはそこから送られてくる『通知メッセージ』のこと
コモンコントロールがデータを要求するときや、親にイベントを通知するときに使います。
んで私はふつーのコントロールもWM_NOTIFYを送ると錯覚し、
いろいろやってたわけです、泣ける・・

RegisterHotKey 04/11/2

RegisterHotKeyでセットしたホットキーはWM_GETHOTKEYを使っても得られない
自分は変更するたびに保存しました。
方法あるんでしょうか??

リンクの方法 04/10/10

コモンコントロールとか使うときVCの場合設定からリンクの部分を変更して
リンクするんですがそれをソース上で指示するには
#pragma comment(lib, "comctl32.lib") とする。

DLLのアタッチorデタッチの注意 04/9/26

フック勉強中に某初心者掲示板に質問しまくった挙句、自分のボンミスだということが分かった事
そのまんまですがDLLのアタッチやデタッチ中にメッセージボックスを呼び出すのはやめよ
そんだけ・・・たぶん処理が邪魔されるんだと思う。
ウィンドウハンドルがNULL(デスクトップのハンドル)でもだめです。

ハンドルの概念 04/9/26

二個目。
ハンドルという概念はWindowsのプログラミングで初めて知りました。
ハンドルというのはオブジェクトの入り口、みたいな感じだと思うんですが・・たぶん
(OSが格オブジェクトにつける識別名、らしいです。番号ですが。)
基本的に何かしらの関数でオブジェクトを作るなり、開くなりします
その後、CloseHandle関数で閉めます。
そのとき起こっていることはヘルプにもあるけどオブジェクトを作る関数ならオブジェクトを
作ってハンドル送り、オブジェクトの参照カウントを1にします
また開く場合はハンドルを送り、参照カウントを+1します。
CloseHandleは参照カウントを-1した上でカウントが0ならオブジェクトを破棄する、という感じ
さらにハンドルは入り口と言っても呼び出した本人しか通してくれません、厳重警備です
よってもしオブジェクトを開き、もう一度開くとき、その二つのハンドルは必ず不一致します
つまり行く所は同じでも開いた入り口は別々なのです。
これは開いたまんまだと参照カウントが減らず、オブジェクトが破棄されないことも示します。
なので開く関数と作る関数合わせた分だけCloseHandleを使わないといけませんよ〜ってこと。

ダイアログにアイコン設定 04/9/19

答えは簡単で設定したいウィンドウにWM_SETICONっていうメッセージを送るだけ
そのときlParam部分にアイコンのハンドルを指定する。
ダイアログだけってわけじゃないけど。
http://www.hidecnet.ne.jp/~sinzan/さんから引用!!すみません。
でもここすごいんだってば!

wsprintfの内部処理について 04/9/11

wsprintfを今まで使用していたけど今後控えようかと思う
理由としてwsprintfは指定バッファに指定書式に直した文字列を格納してくれる
ものすごい便利な関数だけど、問題は格納してくれるバイト数が1024以下と固定されていること。
なんでこんな使用にしたのかわからないけど『置換実行中』作成時にどーしても大量の文字列を
表示できないと思ったら格納されていなかった、。
だけど実は指定書式には変更してくれる様子、まぁ格納してないので意味ないけど。
中で文字数をカウントするような構造になっているのかな??にしても1024て・・・
今度ヘッダを探してみます!!理由または真相お願いします〜

リストビュー編集時ののIDOK 04/9/1

コモンコントロールのリストビューを作るとき、リソースエディタで
リストビューを編集できるようにする、もしくは
LVS_EDITLABELSフラグを立たせることで、リストビューのアイテムをダブルクリックで
エディットボックスに変えることができる。その通知メッセージを処理すると編集とか
できるようになるんだけど、そこで発見。
そのエディットボックスで一文字編集するたびに親のウィンドウから
WM_COMMAND&WPARAM=IDOKが送られてくる。なんで・・・?

04/9/3
解決した!!某初心者お助け掲示板にて答えを授かりました。
どうやらリストビュー編集のエディットボックスは文字を打ち込むとき
HIWORD(wParam) == EN_CHANGE || == EN_UPDATEにて上記のメッセージを
オーナーに送ってくるらしい、初めて知った・・ここに記する。

クラスにウィンドウプロシージャを入れる(ウィンドウプロパティ) 04/8/30

第一号目がさっそく人に聞いたことです
クラス内でコールバック関数を宣言する場合、staticで宣言していなければいけません。

なんだけどSHBrowseForFolderっていうシェル関数をクラスにまとめ様として
コールバック関数のアドレスが必要になったのでクラスに含めたんですが、そんとき

class TEST{
   public:static int CALLBACK fanc(...);
}
int CALLBACK TEST::fanc(...){...}
じゃないといけなかった。元々C++はゼンゼンできないけど宣言だけにつけるの?

どうやらしっかり手段がある
たとえばサブクラス化した一部だけ処理するプロシージャをクラスに入れる場合はまず上記の用に宣言をする
この状態だとサブプロシージャからメソッドなどを呼び出すことができない!なぜならサププロシージャは静的だから
仮想状態のメソッドは危なっかしくて呼び出せないわけだ。
そこでサブプロシージャからクラスを呼び出す方法としては『ウィンドウプロパティ』を使う
ウィンドウプロパティとはウィンドウに変数など名前つきでくっつける方法なんだと思う・・。
SetProp(hWnd,TEXT("name"),(HANDLE)value);    //こいつでまずウィンドウに変数をセット!
value = GetProp(hWnd, TEXT("name"));       //こいつでサブプロシージャ内から変数を得る
RemoveProp(hWnd, TEXT("name"));         //ウィンドウが破棄されるときこいつを使うのも約束。
こんな感じでvalueにクラスのポインタでもつかませればもう万事OK!
ほぼここ参照
06/05/27