Windowsプログラミング

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

Windowsプログラミング

#1

投稿記事 by みー » 16年前

[color=orange>
Windowsプログラミングをするときにウィンドウを作成するのってメンバを登録するのが面倒ですよね。
その手間を省こうと思ったのですがやりかたが思いつきません。
ヘッダファイルにまとめてみようと思ったのですが、ウィンドウプロシージャの関数ポインタの渡し方がわからずあきらめました。
Windowsプログラミングをする方はどうやってこの手間を軽減していますか??
「コピペ。」というのはナシでお願いします。
[/color]

御津凪

Re:Windowsプログラミング

#2

投稿記事 by 御津凪 » 16年前

メンバを登録?っていうのはよく分かりませんが、

私なら windowsx.h のマクロを使ったり、担当するウインドウごとにヘッダ・ソースで分けたりして、
あとはガリガリと書くと思います。
余り規模の大きいものを作ってはいないので確信は出来ませんが、
多少面倒でも、後のメンテナンスはしやすいはずです。
(私はMFCを使わずWINAPIで使用してます)


あと、もう少し詳しい情報が欲しいところです。

> ウィンドウプロシージャの関数ポインタの渡し方

というのは、 SetWindowLongPtr で渡せるのでは?
とまでしか言えないです。

みー

Re:Windowsプログラミング

#3

投稿記事 by みー » 16年前

>あと、もう少し詳しい情報が欲しいところです。
そうですね。

例えばこのページのCreate関数。
http://www.geocities.jp/ky_webid/win32c/003.html
こんなかんじにしたいのですがこれは同じファイルの中に書いてあります。
これではほかのファイルから使うときに面倒なのでヘッダファイルにまとめようと思いましたが、
ヘッダファイルにまとめようとすると
wc.lpfnWndProc = WndProc;
のところではWndProcのアドレスを渡していると思ったのですが、その場合WndProcの情報をどうにかして渡さないとエラーが出てしまいます。
しかもこれだと毎回書き直さなくてはならないので、これを少し改造してタイトルバーの文字列やサイズ、座標などを引数で指定しようと思ったのですがうまくいきません。

SCI

Re:Windowsプログラミング

#4

投稿記事 by SCI » 16年前

>ヘッダファイル
ヘッダファイルに実装は書いていませんよね?
プロシージャに外部結合をもたせてあればexternで別のファイルから参照できます。

>タイトルバーの文字列やサイズ、座標などを引数で指定
これは関数を作ればいいだけですね。


C言語の基礎も同時進行で勉強するといいかも知れません。

dic

Re:Windowsプログラミング

#5

投稿記事 by dic » 16年前

コピペはダメといいつつ・・・

dic

Re:Windowsプログラミング

#6

投稿記事 by dic » 16年前

ちょっと煽り気味になりました
申し訳ありません

メンバ関数の登録というのはMFCの環境でしょうか?SDKの環境でしょうか?
もう少し具体的な環境などを書かれると回答を得られると思います

>例えばこのページのCreate関数。
>http://www.geocities.jp/ky_webid/win32c/003.html
このような感じに行いたいのであれば SCIさんのおっしゃるとおり
C言語の基礎を勉強すればいいかと考えます

エラーがでるというのはコンパイルエラーですよね?
自分で関数が定義できるようになり 引数の意味がわかるようになれば可能かと思います

たかぎ

Re:Windowsプログラミング

#7

投稿記事 by たかぎ » 16年前

こんなのでどうでしょう。

1. あらかじめデフォルト値(自分でよく使う値を決めてください)を設定したWNDCLASSEX型の雛形を用意する。
2. いったん1.で用意したWNDCLASSEXオブジェクトのコピーをとる。
3. 必要なメンバーを上書きする。
4. RegisterClassExを呼び出す。

1. で用意する雛形は、const修飾子を付けて更新不可にしておくことをお勧めします。

みー

Re:Windowsプログラミング

#8

投稿記事 by みー » 16年前

みなさんに誤解を招いたようで申し訳ありません。
メンバというのはWNDCLASSEX構造体のメンバに含まれる変数のことです。
つまりメンバに含まれる変数に代入するという作業を登録すると言っていました。
語彙力不足というか間違って言葉の意味を間違って使っていたみたいで本当に申し訳ありませんでしたm(_ _)m

二度目の質問の意味は、とりあえず引数を使って他の構造体のメンバは代入することができたのですが、ウィンドウプロシージャの関数アドレスをlpfnWndProcに代入するところで失敗しているということでした。

これはウィンドウプロシージャのプロトタイプ宣言をヘッダファイル内で宣言することで解決できました。

回答してくださった方々本当にありがとうございました。

閉鎖

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