ページ 1 / 1
ソースの分割
Posted: 2010年4月11日(日) 01:28
by 冊
こんばんわ、またお世話になります。
現在はVisualC++2008EEのWin32アプリケーションのテンプレートを使って作成しています。
先ず表示したウィンドウを二分割して左側にツリー、右側にテキスト入力という形にしました。
そしてソースも分割しようと、ツリーを表示している場所を別の場所に移したのですが、ツリーが表示されません。
何か、ちゃんと機能させる手立てはないでしょうか?
分かりにくいと思いますので、そのまま貼り付けておきます。
tree.cppが移した部分です。DxLib.hなどのあるフォルダは含まれてません。
Re:ソースの分割
Posted: 2010年4月11日(日) 01:56
by Justy
多分 tree関数で使われているグローバル変数 hWndハンドルが空なのでしょう。
この変数に正しいハンドルをセットしていますか?
デバッガなどで確認して下さい。
あと、hTreeが staticなのも変ですね。
Re:ソースの分割
Posted: 2010年4月11日(日) 12:35
by 冊
CreateWindowExのhWndには親窓のハンドルが入るとのことなので、
HWND GetParent(HWND hWnd);
をtree.cppに入れてハンドルを取得しようとしたのですが、再定義されていますとエラーになりました。
色々と順番を変えてみます。
staticの方については、今調べています。
取りあえずexternにしたら「外部シンボル ""struct HWND__ * hTree" (?hTree@@3PAUHWND__@@A)" は未解決です。」
と出ました。
------
HWND extern hTree; // ツリービューのハンドル
HWND static hTree;
------
としたら実行できたのですが、これでいいのかと疑問に思います。(上が未解決なので表示はされませんが)
参考にしたURL
http://gurigumi.s349.xrea.com/programmi ... plit1.html
http://gurigumi.s349.xrea.com/programmi ... view1.html
Re:ソースの分割
Posted: 2010年4月11日(日) 16:55
by Justy
>CreateWindowExのhWndには親窓のハンドルが入るとのことなので
ツリービューを作るのに必要なその親窓のハンドルは main.cpp側で生成された
ウインドウハンドルです。
tree関数は親窓のプロシージャである WndProc関数の WM_CREATEののところで
処理されていますよね?
WndProc関数では自分(親窓)のウインドウハンドルの情報を持っていますので、そのまま
tree関数の引数にハンドルを入れるようにすれば、態々グローバル変数に頼らなくても
tree関数内でウインドウハンドルを取得できます。
あと、グローバル変数とローカル変数で名前を同じにするのは止めましょう。
>取りあえずexternにしたら
何の為に GLOBALというマクロが存在しているのか考えてみて下さい。
>static hTree
そこで staticをつけるとインクルードしたソース毎に異なる静的変数になります。
tree.cppで使われる hTreeと main.cppでツリーに内容を書き込む際に使う hTreeが
別物の変数になってしまいますよ。
Re:ソースの分割
Posted: 2010年4月13日(火) 00:10
by 冊
時間掛かりましたが、一応できました。
ありがとうございます!
>tree関数
仮引数にhWndを入れたら巧く行きました。
>GLOBAL
完全に頭から抜けてました…真上にあったんですけどね……済みません。
>static
なるほど、staticの静的変数とはそういう効果(?)があるのですね、勉強になりました。
拙い質問だったとは思いますが、御丁寧にお答えいただき有難うございました。