トップページ⇒tech
1001コメント311KB

Windows Programing for C/C++(Not MFC)

■ このスレッドは過去ログ倉庫に格納されています
00011NGNG
似たようなスレで「WIN32API 質問箱」がありますが
Windowsプログラムを作るにあたって、API以外の疑問や質問を
ぶつける為に作りました。

自分もMSの摩訶不思議な規則や仕様(バグ)等に悩まされてます。
質問や疑問以外にも、プログラミングしていて気付いた事や発見等も
書き込んでくれると有難いです。

あ、自分の開発環境はVisualC++でMFCを使ってないので
C/C++でMFC無しの方向でお願いします。
00021NGNG
さて、自分でスレ立てておいて、昔から疑問に思ってる事があります。
それは、最初に渡されるHINSTANCEの扱いです。
Windowsプログラム等を見ると、迷わずグローバル変数を使ってますよね。
最近までは、グローバル変数を定義して、渡された瞬間に値を代入してましたが
最近は、GetWindowLongを使ってウィンドウハンドルから求めてグローバル変数を
使わない方向にしています。皆さんは、どうされてますか?
0003デフォルトの名無しさんNGNG
2げとずざ。
MFCなしでC++って人いるの?
0004デフォルトの名無しさんNGNG
2ゲトー
00051NGNG
>>2

>Windowsプログラム等を
Windowsプログラムのサンプル等を
00061NGNG
>>3
自分はMFC無しでC++でプログラムしてます。
やはり、CよりC++の方が慣れてくると色々と
便利ですし…(その分…いや倍位、短所もあるけど)

どちらかというと、不満無くMFCを使ってる人の方が不思議です。
0007デフォルトの名無しさんNGNG
>>2
漏れはグローバル変数に入れてしまってるが、確かにグローバル変数は使わない方向で逝きたい…。
が、ウィンドウハンドルから取得って、そのウィンドウハンドルは、何処から取得するの?
0008デフォルトの名無しさんNGNG
>>6
誰も不満無くMFCを使ってる奴なんかいねーよ。
みんな、不満言いながらMFC使ってんだよ。
0009デフォルトの名無しさんNGNG
GetInstance()
00103(まぼろしの2)NGNG
>>8 わらた。はげど。
0011デフォルトの名無しさんNGNG
>>10
禿同。
MFCだけでなく、Windows自体が…(以下略)
0012デフォルトの名無しさんNGNG
>>2
オレの記憶違いでなければ、Win32以降のWinMainに渡されるHINSTANCの値は
ともに無意味だっと思うが。だからオレは固定にしている。
0013デフォルトの名無しさんNGNG
>12
今まで無事でよかったね。
0014デフォルトの名無しさんNGNG
>>8に激しく同意。
0015デフォルトの名無しさんNGNG
>>13 ん゛HINSTANCの値が何を示しているのかわかかって使用してい
るつもりだがなにか問題があるか? 具体例を示してくれ。
0016デフォルトの名無しさんNGNG
理解してんならいんじゃないの
0017デフォルトの名無しさんNGNG
俺も早く>>8みたいなかっこいいレス付けれるようになりたいよ
00181NGNG
>>12
>>13
>>15

なんとなく、わかってたんだけど、実験してみて初めて知った。

BOOL CALLBACK EnumWindowsProc(HWND hWnd,LPARAM lParam){
 TCHAR szWindowText[200], szBuff[300];
 GetWindowText(hWnd,szWindowText,200);
 if(szWindowText[0]==0) return TRUE;
 sprintf(szBuff, "%s - %08x",szWindowText,GetWindowLong(hWnd,GWL_HINSTANCE));
 SendMessage((HWND)lParam,LB_ADDSTRING,0,(long)szBuff);
 return TRUE;
}
LRESULT CALLBACK TestWindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
 static HWND hList;
 switch(uMsg){
  case WM_CREATE:
   hList = CreateWindow(TEXT("LISTBOX"),NULL,WS_CHILD|WS_VISIBLE|LBS_STANDARD,0,0,0,0,hWnd,NULL,(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),NULL);
   EnumWindows(EnumWindowsProc , (LPARAM)hList);
   return 0;
0019デフォルトの名無しさんNGNG
おもいっきり WIN32API とかぶってるじゃないか
0020デフォルトの名無しさんNGNG
かぶってますね。続きは WIN32API でどうぞ。

http://pc.2ch.net/test/read.cgi/tech/1017072275
00211NGNG
>>8
>>10
>>11
>>14
>>17
皆さん、Windowsプログラムは仕事でしてるんでしょうか?
自分の場合は仕事でする場合は1人か、複数人でも幸運にも
MFCを使わない場合が多いのです。
あとは、趣味でプログラムをする時ですが、
この時はもちろん、MFC無しです。

仕様とかで「MFCを使う事」とかになってるんでしょうか?
それとも、もともとMFCを使って組んであって、それを引き継いだとか??
0022デフォルトの名無しさんNGNG
>>1 よ、スレタイトルと趣旨が異なっているぞ。

「C/C++で Windows programming をサポートするフレームワーク/ライブラリって知りませんか?
 有名なやつはいいです」

という質問なら理解できる。あるかどうか知らんけど。GTKがあるか。

> Windowsプログラムを作るにあたって、API以外の疑問や質問を
> ぶつける為に作りました。
> 自分もMSの摩訶不思議な規則や仕様(バグ)等に悩まされてます。

摩訶不思議な挙動はAPIの実装あるいは仕様が引き起こすものだ。
にもかかわらずAPI以外という限定は理解できん。

それから >>2 は明らかに WIN32API 逝きだ。

>>21
MFC使いに苛められたのか?
002312NGNG
12=14=15 なんだが。
>>21
わしは、仕事の関係でMFCを使用している。既存のコードがMFCなんでね。
その改修をやると仕方なしにMFCを使用せざるえない。

個人では、自作のライブラリーを利用している。

>>22
>摩訶不思議な挙動はAPIの実装あるいは仕様が引き起こすものだ。
>もかかわらずAPI以外という限定は理解できん
一部同意、確かにほとんどは、APIの実行結果に互換性がなく発生することが
多いな。
 ただ、ヘッダーファイルの構造体の定義の一部変更でおかしくなることもあるね。
わしが最近はまったのは、フリーの3Dライブラリーをわしのライブラリーで
使用としたらリンクが出来なかったことがあった。
リンクできないのは、3Dライブラリーで「#define STRICT」が定義していな
かったせいなのだが、最新のwindows.hでは「STRICT」を使用していない可
能性も考えられる。
そういうことを1は知りたいのではないか?と勝手に憶測するがね。

 













0024デフォルトの名無しさんNGNG
(余分な改行が説得力の無さを示してるようで…)
00251NGNG
>>22
そうですね。スレの趣旨とズレた方向に話を持っていってしまったみたいですね。
スレ立てた本人が、スレの趣旨と違う事を書いてたら駄目ですね…。申し訳ない。

ここのスレの趣旨はAPI以外のWindowsProgramに関する事、全てです。
言語はC/C++で非MFCという事で。別にMFC使いに苛められたい訳では無いです。
…が、書き方がソレっぽくなっちゃいましたね。

今、直ぐに「コレ」といった例が思いつかないのですが、プログラムを
していると、APIの純粋な疑問よりも、バージョンの違いから来る
動作の違いや、定義の違い等がありますよね?

あと、サンプル等ではAPIの動きを説明する為に、それに特化した不自然な
プログラムが載っている事が多々あります。しかし、Windowsプログラムには
独特のクセ等が多く、それを自然なプログラムだと自分で思っていて、後で
それが不自然なプログラムだった事に気付いたりする事は多いのではないでしょうか?

そういう疑問を質問して答える場が無いなー。と思ってスレ立ててみました。
>>2では、「HINSTANCEをどういう風に扱っていますか?」という疑問で
「HINSTANCEをどう取得すれば良いか?」という結果重視の質問ではありません。
その辺が「WIN32 APIスレ」と違う所だと自分で思っているのですが…。
0026デフォルトの名無しさんNGNG
>>1
MFC使ってるけど、GetWindowLong()使ってるYO!
それ以前にHWND hWnd = GetSafeHwnd();ってやって、Win32APIで処理してる。
単なるラッパならラッパ関数呼ばなくなった分だけ早くなんねーかな? とか思ってんだけど、実際はあまり変わんねー。
でもやる(藁
002712NGNG
>>24
ああ確かに、逝って来るわ。
0028デフォルトの名無しさんNGNG
>>22

>摩訶不思議な挙動はAPIの実装あるいは仕様が引き起こすものだ。
>にもかかわらずAPI以外という限定は理解できん。

漏れが思うに「WIN32API質問箱」の方も定義がいまいちだと思うYO!
例えば、ウィンドウの最大化ボタンとクローズボックスを非表示にして
最小化ボタンだけ表示させたい時に、質問するのは「WIN32API質問箱」か?
質問しても、「WM_NCPAINTを捕まえて自前で処理しろ!」と言われるのが
オチだろう。確かに、そうだけど実際それを実行するのは難しいし
質問者は、むしろ、「どう自前で処理をすれば良いのか?」という疑問に
進む事は当然だろう。しかし、それを質問すると「質問厨」とか言われて
おしまいだろう。

もしかしたら、他の意外な方法(効率とかは抜きで)があるかもしれないし
そういうAPIやメッセージを駆使して実現する事は、APIの質問からズレて
いるような気がする。

ここは、そういう趣旨のスレなのでは?…と勝手に漏れは推測する。
…というか、願う。漏れも、この手の疑問はいっぱいあるから。
0029デフォルトの名無しさんNGNG
>>22の言う
「C/C++で Windows programming を(略)」なスレなら(・∀・)イイ!。

マイナーな奴でこんなのはどう?

SOL++
http://home.att.ne.jp/green/atlan/sol2000/library.html

Motifにバイアスがかかってる感じのクラスライブラリ。

もう手に入らないけど、ソフトバンクから出てた
「Windows 95 SUPER CLASS LIBRARY」って本に
ついてたやつの最新版みたい。
0030デフォルトの名無しさんNGNG
>>1に質問だが
GetModuleHandle(NULL);でいけない理由は?
たとえば、ウインドウを持たないdllのインスタンスハンドルを得るにはどうしてる?
00311NGNG
>>30
特にGetModuleHandleでは、いけない理由はありません。

…というか、今までグローバル変数を定義して、
渡された瞬間に値を代入してました。Windowsのサンプルプログラムでは
ほとんどが、この方法になってると思います。(Windows APIバイブル等)

しかし、そうじゃなくてGetWindowLongを使った方がグローバル変数なんか
定義しなくても良いんじゃないのか?と、最近思った訳です。

GetModuleHandleですか…。それは気付きませんでした。
確かに、こっちの方がスマートかもしれませんね。
もしかして、GetModuleHandleでHINSTANCEを取得している方って多いんでしょうか?
それとも常識??自分が今まで気付かなかっただけ???
0032デフォルトの名無しさんNGNG
とりあえず、>>1のコテハンはやめてくれ。
0033デフォルトの名無しさんNGNG
http://www.asahi-net.or.jp/~cv8t-hdk/fox/fox-doc.ja/fox.ja.html
http://www.fox-toolkit.org/
こういうのは?
0034デフォルトの名無しさんNGNG
俺は逆にグローバル変数(って実際にはクラスでラップしたメンバー
だったりするが)を見直してる。

昔はグローバル変数等で管理している状態?と実際の状態がバグで
食い違ったり、APIで取れる情報を変数に抑えておくと、同じ情報を
二重に持っているみたいで嫌だったんで、APIで取得できる情報は
変数に押さえるのを極力やめていた...

が、しかし、パフォーマンスがでないんよ。結構頻繁に使用する
情報だったりすると、ちょっとした連想配列使った情報検索
なんかよりAPI呼び出しの方が高価みたい。

が、HINSTANCEは頻繁庭使わんか。
0035デフォルトの名無しさんNGNG
>>34
普通は頻繁に使う/ループ内で使う値は自動変数に一時的に保存するだろ。
0036デフォルトの名無しさんNGNG
HINSTANCEのやうなプログラムそのものが持つてゐる性質は、
グローバル變數になつて問題は無い、と思つてをります。

問題となる使ひ方は、処理の簡略化のため、データのやり取りに使ふ、
というやうな場合ではないですか?
003734NGNG
>>35
大体においてローカルで済ませられるならそのほうがいいでしょ。

でもwindowsのGUIはメッセージループに戻る必要があるでしょ。
でね、それをウィンドウ矩形毎回取得したり、GetWindowLong使ったり、
IsWindowVisible使ったり...つまりはそういうAPI叩きは遅いって事。

実際には独自HashMapでHWNDと関連づけたデータ構造から状態取得
したほうがえらく速かったという。

MFCとか使ってるならCWnd派生クラスのメンバ変数でも良いが、
MFCはメッセージループからしてとろいからなー。
0038デフォルトの名無しさんNGNG
>>37
まぁ、悪いとは言わないけどね。
外部アプリから勝手にウインドウスタイル変更されたりした場合に、
内部の状態と食い違いが生じてくるでしょ。
003934NGNG
>>38
そうなのよねー、そこらへんが悩みどころ。
性能とのトレードオフっちゅー事でしょーか。
かといって昔の俺の様に、何でもかんでもグローバル
データや情報の二重管理は良くないって思っている人結構
いないですか?

実際にはバグ以外では有り得ないって事は言えないですが、
子ウィンドウが外部アプリで勝手にクローズされたり等
対話アプリとして作っている以上きりがないので
(そんな事コーディングで毎回チェックしてられねーっ
ちゅうねん)俺は使用頻度が高い情報はオフラインキャッシュ
とゆーか、プログラムのメモリに置くのもOKだと思う。

#DBのファイルを稼動中に書き換えて、DBのメモリ内のキャッシュ
とファイル内の情報が食い違うようなものだと思うが。

MSのアプリや市販ソフトも自作アプリからスタイル変更したり
SW_HIDE等しても無視されちゃってるしね-。
#逆に不正操作(チート)防止の為にわざとやってるとしか思えない
様な挙動をしたりして。
00401NGNG
>>32
了解です。スレの趣旨がわかった方が少数でもいるみたいなので、
>>1は、ここで消えます。(何か自分に対する質問があれば別ですが)
次回からの自分の書き込みは「デフォルトの名無しさん」という事で…。
0041デフォルトの名無しさんNGNG
普段からあらゆる状況を想定して、ウインドウが閉じられても自動リカバリしたり、
スタイルもきっちり規定のものに戻すコードを書いているんだが、くどいのかな、やっぱり。
0042デフォルトの名無しさんNGNG
ウィンドウの属性が実行中に強引に変えられたり
するものは考えなくて良いと思うのだが、
最近、思ったのは「ウィンドウの境界の幅」。
結構、かなりのアプリが対応してない。
今まではデフォルトの幅が1だったけど、
XPのデフォルトの幅が5位(詳細忘れた)になってるので
気付いて慌てて直したアプリも多い筈…。
0043デフォルトの名無しさんNGNG
> ウィンドウの属性が実行中に強引に変えられたり
> するものは考えなくて良いと思うのだが、

考えろよ… 対した作業量じゃないだろ。
いくつかのメッセージに反応すればいいだけだし。
0044デフォルトの名無しさんNGNG
>>34-39
俺は、グローバル変数は極力使わない。
なんでもAPI等を使って取得するようにしてる。
確かにパフォーマンスは悪い。

どうしても遅さが気になる時はその部分だけ一時的に
グローバル変数を使用している。
後々、PCのパフォーマンスが上がり、その遅さが
気にならない程度になってきた時にバージョンUPの時等に
APIの取得に切り替える。

そういう切り替えが楽にできるような書き方をしている。
0045デフォルトの名無しさんNGNG
>>43
いくつかのメッセージと言われてもcase by caseだからなぁ…。
当然、システム標準で変えられるような属性(画面のプロパティ等で)は
対応しないとマズイと思うのだが、それ以外は無視している。
昔、自分の作ったアプリで、子ウィンドウにWM_DESTROYを投げると
落ちるというバグが報告されたが、無視した。
そんなの、システム標準のツールじゃできない事だし。

>>43の言う「いくつかのメッセージ」というのは例えばどんなんだ?
004643NGNG
>>45

> 昔、自分の作ったアプリで、子ウィンドウにWM_DESTROYを投げると
> 落ちるというバグが報告されたが、無視した。
すげーなぁ。そんなこと言ってくる奴がいるのか…
そりゃ無視だろ。

いや俺が言ってるのも、システム標準で変えられるような属性(画面のプロパティ等)
って奴だよ。 >>42の話の中でWindowの幅とか出てたから。
004741NGNG
>>45
43じゃないが。
システムでいろ設定を変えたりするとWM_SYSCOLORCHANGEが投げられてくるが、
3D ColorChanger 3000とかを使って色を変えると、
投げられるのはWM_NCPAINTとWM_PAINTだけだったり、

どんなときに変更されるか予測がつかないから、はっきり言って全部に対応するのは面倒だね。
俺の場合は、
WM_PAINT/WM_NCPAINT/WM_NCACTIVATE/WM_NCHITTEST/WM_SIZE/WM_MOVE/WM_STYLECHANGING
でシステムの設定やスタイルをチェックして、さらにタイマーを使って5秒ごとに監視してる。
0048デフォルトの名無しさんNGNG
>47
随分手が込んでるな。デスクトップマスコット系アプリ?
0049デフォルトの名無しさんNGNG
>>47
仕事だったら「WM_SYSCOLORCHANGEを投げてこないアプリが悪い」と言って
無視するなぁ。それに対応する為に色々な事やって、パフォーマンスの低下や
新たなバグを生む原因にしたくないし…。

そもそも>>47は、グローバル変数にシステム情報等を格納している方向なのか?
それなら、その位の対応も納得なのだが…。
タイマーは、ちょっと手が込んでる気がするが…(^^;
0050デフォルトの名無しさんNGNG
>>46
42=45だが、システムで変えられる情報の中でもウィンドウの境界の幅は
今まで、誰も気付かなかったような項目だから…って話だったんだけど
説明がわかりにくくてスマソ。
005143NGNG
>>50
そうだったか。要は同じような事を言ってたんだな。失礼しますた。
0052デフォルトの名無しさんNGNG
>>50じゃないが、確かにウィンドウの境界の幅は今まで1とかだったから
GetClientRectとGetWindowRectの幅と高さの差(高さは結構あるか…)は
そんなに違いが無くて、ウィンドウのサイズ制限するプログラムとかで
GetWindowRectとか、WM_SIZEメッセージで返ってくるLPARAMの
値を使って制限してると問題が出るね。(後者の方は結構多いと思う)
0053デフォルトの名無しさんNGNG
一般的には、ウィンドウサイズの固定はWM_GETMINMAXINFOでやらない?
それに幅は、GetSystemMetricsで取得すればよいと思うが違うのか。
0054デフォルトの名無しさんNGNG
>>53
まさに>>50,52の言っていた例のレスだな。
つまり、WM_GETMINMAXINFOメッセージで処理するという事は
LPMINMAXINFO構造体でウィンドウサイズを制御するという事だよね?
その時にptMinTrackSizeに最小値を入れろ…と。
しかし、それではいかんのだよ。わかるかな?>>53よ。
>>50,52の言っている事を良く考えてみよう。
GetSystemMetricsで幅を取得するのも同じだ。
0055デフォルトの名無しさんNGNG
このスレとAPIスレ統合して、Windows Programming 相談室にしねーか?
どっちも閑古鳥が鳴いてるし
0056デフォルトの名無しさんNGNG
GetSystemMetricsはokじゃね?
0057デフォルトの名無しさんNGNG
GetSystemMetricsでウィンドウの幅とかを取得しまくるのもOKだと思うが
素直にGetWindowRectとGetClientRectのサイズの差を求めて、最小サイズに
したい値に、その差とクライアントウィンドウのサイズを足したものにするのが
一番良いと思う。GetSystemMetricsでウィンドウの幅とかを取得しまくると
メニューなんかが2行になった時等に対応するのが辛いよ。
0058デフォルトの名無しさんNGNG
>>55
別に2つあっても良いんじゃない?
0059デフォルトの名無しさんNGNG
>55,58
ここが、part2かAPIスレがbuild3になったら、統合しよう。
いつになる事やら…。
0060戸尾理縋りNGNG
外側の幅に合わしてサイズ計算してたら、
中身が
「小っちぇーよ!(三村調)」
枠幅変更をわざわざ考慮してたものはXP以前にゃ
あまりないだろうということだろう
006150NGNG
>>60
そういう事。
0062デフォルトの名無しさんNGNG
>>57
クライアントサイズとウインドウサイズの差というのは落とし穴があるよ。
たとえば、WS_EX_CLIENTEDGEスタイルを持った子ウインドウを
幅高さともに0で作ると、GetClientRect/GetWindowRectが同じサイズ{0, 0}を返すので、
差が求められない。
実際にこれでハマったことあるし。
#論理レイアウトマネージャにウインドウのサイズの管理を任せたりするときにこれにハマった

じゃぁ、最低いくつで作ればいいのかという話になるが、
それこそボーダーの太さに事実上上限が設定されていないので、
どのサイズで作っても保証が無くなる

それこそ、縦横ともにサイズにずれが生じるまでループするしかない。
もっともほぼ無いと言ってもいいようなレアケースだけどね。
0063デフォルトの名無しさんNGNG
ってか、この枠の太さって、Win3.0/3.1位の頃から開発してた人は、
きっちりGetSystemMetricsで取ってくるんじゃないか?
0064デフォルトの名無しさんNGNG
自分はWin3.1から開発してましたが、>>50のように
GetClientRectとGetWindowRectで求めてましたが…。
0065デフォルトの名無しさんNGNG
SIZEのcx,cyのcって何よ?(マヂで
0066デフォルトの名無しさんNGNG
coordinate
0067デフォルトの名無しさんNGNG
サンクス
0068デフォルトの名無しさんNGNG
システムトレイをいじくるソフトあるよね。
トレイのアイコン取得する方法教えてください。
0069デフォルトの名無しさんNGNG
みんなはAPIとCRTとどっちが好み?
0070デフォルトの名無しさんNGNG
好みって何だよ
APIとC-runtimeは包括範囲が違うだろ
0071デフォルトの名無しさんNGNG
結局ここはMFC or API以外のWindows Programingスレになったの?

こんなの見つけたからage
http://www.fltk.org
かなりマルチプラットフォーム化されてるしGUIビルダもある
Qtはでか過ぎてイヤンという人にお勧めできるんじゃなかろうか
ちなみにC++
0072デフォルトの名無しさんNGNG
本来はWindowsプログラムをする上でのドキュメント化されていないノウハウを語りたかったんじゃないの?
007369NGNG
>>70
いやー、結構重複してる部分あるじゃない。
 CreateFile ≒ open
 CreateProcess ≒ execXX
   …
ぼくはAPI派なんだけど、害虫さんはCRT派でね、
ちなみにGUIアプリでWin以外への移植は無しなの。

どっちが多数派かなーって思って。
0074デフォルトの名無しさんNGNG
どうしても実行ファイルのサイズを小さくしたい場合、
細かくアクセスコントロールを行う場合など、
特殊な状況じゃなければ標準ライブラリを利用する。

APIを使うと引数の数が平気で10個あったり、
いちいち構造体使ったり面倒だから。

0075デフォルトの名無しさんNGNG
誰かに渡したりするのはCRTの方が良いと思うが
それ以外はAPIを使ってるなー。長年Windowsプログラムをしてると
ある程度のパターンができてくるから、APIの引数とかも気にならないし…。
ところで、HINSTANCEの話がでてきて思ったんだけど、グローバル変数を
使ってる場合は、他にはどんなグローバル変数を使ってる?

漏れは…ウィンドウクラス名とかかなぁ…。
0076デフォルトの名無しさんNGNG
グローバル・・・
システムの情報は格納しないな。
アプリケーションの設定を専用クラスでグローバルに置くくらいかな。
文字関係は全部リソースに置いておくし。
0077デフォルトの名無しさんNGNG
素朴な疑問。
なんでウインドウクラス名ってグローバル変数なの?
どの本見てもそうなってるけど。
まだ本格的にWin32やってないから、これがグローバルである意味が
よくわかんない。
知ってる人いたら教えて。
0078デフォルトの名無しさんNGNG
その方がお気楽だから。
まぁ、defineでもいいんだけどね。
0079デフォルトの名無しさんNGNG
>>77
別にローカル変数でもいいよ?
つーかそれよりRegisterClass呼んでるのに
なんでUnregisterClassは呼ばないのか疑問。
別に
0080デフォルトの名無しさんNGNG
>別に
余分だった。
0081デフォルトの名無しさんNGNG
mallocしたのをfreeしないでexitだな
0082デフォルトの名無しさんNGNG
なんでMFC以外のWindows ProgramingでVCLが
一度も出てこないんだ、ゴラァと言ってみるテスト
0083デフォルトの名無しさんNGNG
>>79
必要ないから。
プロセス終了時に解放されることが保証されている
0084デフォルトの名無しさんNGNG
最近むかついてしょうがないんですけど、
LoadImageやCreateWindowはウィンドウズヘッダ内でマクロとして定義されてるんですよね。
だからメンバ関数にLoadImageなんて名前付けるとLoadImageAに変わってしまったり、
CreateWindowなんかコンパイルエラーになってしまいます。
何でインライン関数使わないんだよぉ!
何のための名前空間、何のためのクラスだと思ってんだ。
0085デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>C++
0086デフォルトの名無しさんNGNG
>>84
元々C互換APIだから。
C++でもっとも顕著なのは、STLのstd::min/maxかな。

それから、LoadImageなんてセンスのない名前付けるな
0087旧MS-CユーザNGNG
LoadImageの方がinline、namespaceより古いから。
名前空間なんかつい最近できたばかりじゃないか。
0088デフォルトの名無しさんNGNG
気持ちはわかるが、>>84は自己中なやつなのだろうな。
0089デフォルトの名無しさんNGNG
age
0090ショシンsNGNG
ウィンドウ内に自分でボタンのようなものを作りたいと思い
メッセージプロシージャ関数内の
case WM_LBUTTONDOWN:
の下で現在のマウス位置を取得して
そのあと条件式で自分が指定した矩形領域内でボタンが押されたならば
という形でボタン機能を実現したいと思っているのですが
マウス位置を取得する関数がよくわかりません。
それともlParamかwParamを使えば同じことができるのでしょうか
0091デフォルトの名無しさんNGNG
WM_LBUTTONDOWNメッセージを調べてみる
GetCursorPosを調べてみる
0092ショシンsNGNG
アドバイスありがとうございます
最初
case WM_LBUTTONDOWN:
LPPOINT MSpoint;
long msx,msy;
GetCursorPos(MSpoint);
msx=MSpoint->x;
msy=MSpoint->y;
とやったらGetCursorPosの時点でエラーが出てシャットダウンしてしまいました。
その後いろいろと調べたところ
int x,y;
x=LOWORD(lParam);
y=HIWORD(lParam);
とやったらうまくいきました。
とりあえず解決できたのですがなんか複雑な気分です。
0093デフォルトの名無しさんNGNG
なめてんのか?
0094ショシンsNGNG
いや、なめてないですよ。
DirectXの勉強を始めたばかりのものでしていまだ使えこなせずにいます。やっぱひとつWINDOWSAPIの説明がいろいろと書いてある本を
買ったほうがいいのですかね。
0095デフォルトの名無しさんNGNG
マジレスするとNE
>LPPOINT MSpoint;
>GetCursorPos(MSpoint);
は
POINT MSpoint;
GetCursorPos(&MSpoint);
じゃないとだめだYO

それと、GetCursorPosはそのときのカーソルの位置を
かえすけど、lParamはボタンの押された位置がかえるYO
若干ちがくなることがあるので気をつけてね。
あとクライアント座標とかスクリーン座標とかにも気をつけてね。

>WINDOWSAPIの説明がいろいろと書いてある本を
>買ったほうがいいのですかね。
あとDEEPなCの本もNE
0096デフォルトの名無しさんNGNG
>あとDEEPなCの本もNE

いつから、ポインタの基礎・FAQが、DEEPなCの本の扱いに
なったのでしょうか。私は、日本のソフトウエア業界の
逝く末を心配したくなりました。
0097デフォルトの名無しさんNGNG
でたよC厨、
くだらないことで話し広げようとしないでくれる?
C厨が集まっちゃうとスレが死ぬから。

どうせ広げるなら、
「GetMessagePosとかもあるYO。とか」
「これを使えば、コントロールからの通知とかでもちゃんとした
座標が取れる?」とか技術的なコトにしてクンナイ?
0098tNGNG
win32sdkで
まず、メモリ上に描写を行って、そのあと1度に画面に表示させる。
方法を教えて、
0099t=98NGNG
>>DirectX は除く
0100デフォルトの名無しさんNGNG
>>97
GetMessagePosなら、lParamの方がよっぽどいい。
0101デフォルトの名無しさんNGNG
>>99
んじゃ、GDIでやれ。

RECT ClientRect;
::GetClientRect(&ClientRect);
HDC WindowDC = ::GetDC(hwnd);
HDC MemDC = ::CreateCompatibleDC(hdc);
HBITMAP BackBuffer = ::CreateCompatibleBitmap(WindowDC, ClientRect.right, ClientRect.bottom);
HBITMAP OriginalBmp = static_cast<HBITMAP>(::SelectObject(MemDC, BackBuffer));

::DeleteObject(::SelectObject(MemDC, OriginalBmp));
::DeleteDC(MemDC);
::ReleaseDC(WindowDC);
■ このスレッドは過去ログ倉庫に格納されています