ソースの分割

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

ソースの分割

#1

投稿記事 by » 15年前

こんばんわ、またお世話になります。
現在はVisualC++2008EEのWin32アプリケーションのテンプレートを使って作成しています。
先ず表示したウィンドウを二分割して左側にツリー、右側にテキスト入力という形にしました。
そしてソースも分割しようと、ツリーを表示している場所を別の場所に移したのですが、ツリーが表示されません。
何か、ちゃんと機能させる手立てはないでしょうか?

分かりにくいと思いますので、そのまま貼り付けておきます。
tree.cppが移した部分です。DxLib.hなどのあるフォルダは含まれてません。

Justy

Re:ソースの分割

#2

投稿記事 by Justy » 15年前

 多分 tree関数で使われているグローバル変数 hWndハンドルが空なのでしょう。
 この変数に正しいハンドルをセットしていますか?
 デバッガなどで確認して下さい。

 あと、hTreeが staticなのも変ですね。

Re:ソースの分割

#3

投稿記事 by » 15年前

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

Justy

Re:ソースの分割

#4

投稿記事 by Justy » 15年前

>CreateWindowExのhWndには親窓のハンドルが入るとのことなので
 ツリービューを作るのに必要なその親窓のハンドルは main.cpp側で生成された
ウインドウハンドルです。

 tree関数は親窓のプロシージャである WndProc関数の WM_CREATEののところで
処理されていますよね?
 WndProc関数では自分(親窓)のウインドウハンドルの情報を持っていますので、そのまま
tree関数の引数にハンドルを入れるようにすれば、態々グローバル変数に頼らなくても
tree関数内でウインドウハンドルを取得できます。

 あと、グローバル変数とローカル変数で名前を同じにするのは止めましょう。


>取りあえずexternにしたら
 何の為に GLOBALというマクロが存在しているのか考えてみて下さい。


>static hTree
 そこで staticをつけるとインクルードしたソース毎に異なる静的変数になります。
 tree.cppで使われる hTreeと main.cppでツリーに内容を書き込む際に使う hTreeが
別物の変数になってしまいますよ。

Re:ソースの分割

#5

投稿記事 by » 15年前

時間掛かりましたが、一応できました。
ありがとうございます!

>tree関数
仮引数にhWndを入れたら巧く行きました。
>GLOBAL
完全に頭から抜けてました…真上にあったんですけどね……済みません。
>static
なるほど、staticの静的変数とはそういう効果(?)があるのですね、勉強になりました。

拙い質問だったとは思いますが、御丁寧にお答えいただき有難うございました。

閉鎖

“C言語何でも質問掲示板” へ戻る