[color=orange>
Windowsプログラミングをするときにウィンドウを作成するのってメンバを登録するのが面倒ですよね。
その手間を省こうと思ったのですがやりかたが思いつきません。
ヘッダファイルにまとめてみようと思ったのですが、ウィンドウプロシージャの関数ポインタの渡し方がわからずあきらめました。
Windowsプログラミングをする方はどうやってこの手間を軽減していますか??
「コピペ。」というのはナシでお願いします。
[/color]
Windowsプログラミング
Re:Windowsプログラミング
メンバを登録?っていうのはよく分かりませんが、
私なら windowsx.h のマクロを使ったり、担当するウインドウごとにヘッダ・ソースで分けたりして、
あとはガリガリと書くと思います。
余り規模の大きいものを作ってはいないので確信は出来ませんが、
多少面倒でも、後のメンテナンスはしやすいはずです。
(私はMFCを使わずWINAPIで使用してます)
あと、もう少し詳しい情報が欲しいところです。
> ウィンドウプロシージャの関数ポインタの渡し方
というのは、 SetWindowLongPtr で渡せるのでは?
とまでしか言えないです。
私なら windowsx.h のマクロを使ったり、担当するウインドウごとにヘッダ・ソースで分けたりして、
あとはガリガリと書くと思います。
余り規模の大きいものを作ってはいないので確信は出来ませんが、
多少面倒でも、後のメンテナンスはしやすいはずです。
(私はMFCを使わずWINAPIで使用してます)
あと、もう少し詳しい情報が欲しいところです。
> ウィンドウプロシージャの関数ポインタの渡し方
というのは、 SetWindowLongPtr で渡せるのでは?
とまでしか言えないです。
Re:Windowsプログラミング
>あと、もう少し詳しい情報が欲しいところです。
そうですね。
例えばこのページのCreate関数。
http://www.geocities.jp/ky_webid/win32c/003.html
こんなかんじにしたいのですがこれは同じファイルの中に書いてあります。
これではほかのファイルから使うときに面倒なのでヘッダファイルにまとめようと思いましたが、
ヘッダファイルにまとめようとすると
wc.lpfnWndProc = WndProc;
のところではWndProcのアドレスを渡していると思ったのですが、その場合WndProcの情報をどうにかして渡さないとエラーが出てしまいます。
しかもこれだと毎回書き直さなくてはならないので、これを少し改造してタイトルバーの文字列やサイズ、座標などを引数で指定しようと思ったのですがうまくいきません。
そうですね。
例えばこのページのCreate関数。
http://www.geocities.jp/ky_webid/win32c/003.html
こんなかんじにしたいのですがこれは同じファイルの中に書いてあります。
これではほかのファイルから使うときに面倒なのでヘッダファイルにまとめようと思いましたが、
ヘッダファイルにまとめようとすると
wc.lpfnWndProc = WndProc;
のところではWndProcのアドレスを渡していると思ったのですが、その場合WndProcの情報をどうにかして渡さないとエラーが出てしまいます。
しかもこれだと毎回書き直さなくてはならないので、これを少し改造してタイトルバーの文字列やサイズ、座標などを引数で指定しようと思ったのですがうまくいきません。
Re:Windowsプログラミング
>ヘッダファイル
ヘッダファイルに実装は書いていませんよね?
プロシージャに外部結合をもたせてあればexternで別のファイルから参照できます。
>タイトルバーの文字列やサイズ、座標などを引数で指定
これは関数を作ればいいだけですね。
C言語の基礎も同時進行で勉強するといいかも知れません。
ヘッダファイルに実装は書いていませんよね?
プロシージャに外部結合をもたせてあればexternで別のファイルから参照できます。
>タイトルバーの文字列やサイズ、座標などを引数で指定
これは関数を作ればいいだけですね。
C言語の基礎も同時進行で勉強するといいかも知れません。
Re:Windowsプログラミング
ちょっと煽り気味になりました
申し訳ありません
メンバ関数の登録というのはMFCの環境でしょうか?SDKの環境でしょうか?
もう少し具体的な環境などを書かれると回答を得られると思います
>例えばこのページのCreate関数。
>http://www.geocities.jp/ky_webid/win32c/003.html
このような感じに行いたいのであれば SCIさんのおっしゃるとおり
C言語の基礎を勉強すればいいかと考えます
エラーがでるというのはコンパイルエラーですよね?
自分で関数が定義できるようになり 引数の意味がわかるようになれば可能かと思います
申し訳ありません
メンバ関数の登録というのはMFCの環境でしょうか?SDKの環境でしょうか?
もう少し具体的な環境などを書かれると回答を得られると思います
>例えばこのページのCreate関数。
>http://www.geocities.jp/ky_webid/win32c/003.html
このような感じに行いたいのであれば SCIさんのおっしゃるとおり
C言語の基礎を勉強すればいいかと考えます
エラーがでるというのはコンパイルエラーですよね?
自分で関数が定義できるようになり 引数の意味がわかるようになれば可能かと思います
Re:Windowsプログラミング
こんなのでどうでしょう。
1. あらかじめデフォルト値(自分でよく使う値を決めてください)を設定したWNDCLASSEX型の雛形を用意する。
2. いったん1.で用意したWNDCLASSEXオブジェクトのコピーをとる。
3. 必要なメンバーを上書きする。
4. RegisterClassExを呼び出す。
1. で用意する雛形は、const修飾子を付けて更新不可にしておくことをお勧めします。
1. あらかじめデフォルト値(自分でよく使う値を決めてください)を設定したWNDCLASSEX型の雛形を用意する。
2. いったん1.で用意したWNDCLASSEXオブジェクトのコピーをとる。
3. 必要なメンバーを上書きする。
4. RegisterClassExを呼び出す。
1. で用意する雛形は、const修飾子を付けて更新不可にしておくことをお勧めします。
Re:Windowsプログラミング
みなさんに誤解を招いたようで申し訳ありません。
メンバというのはWNDCLASSEX構造体のメンバに含まれる変数のことです。
つまりメンバに含まれる変数に代入するという作業を登録すると言っていました。
語彙力不足というか間違って言葉の意味を間違って使っていたみたいで本当に申し訳ありませんでしたm(_ _)m
二度目の質問の意味は、とりあえず引数を使って他の構造体のメンバは代入することができたのですが、ウィンドウプロシージャの関数アドレスをlpfnWndProcに代入するところで失敗しているということでした。
これはウィンドウプロシージャのプロトタイプ宣言をヘッダファイル内で宣言することで解決できました。
回答してくださった方々本当にありがとうございました。
メンバというのはWNDCLASSEX構造体のメンバに含まれる変数のことです。
つまりメンバに含まれる変数に代入するという作業を登録すると言っていました。
語彙力不足というか間違って言葉の意味を間違って使っていたみたいで本当に申し訳ありませんでしたm(_ _)m
二度目の質問の意味は、とりあえず引数を使って他の構造体のメンバは代入することができたのですが、ウィンドウプロシージャの関数アドレスをlpfnWndProcに代入するところで失敗しているということでした。
これはウィンドウプロシージャのプロトタイプ宣言をヘッダファイル内で宣言することで解決できました。
回答してくださった方々本当にありがとうございました。