Windows Programing for C/C++(Not MFC)
■ このスレッドは過去ログ倉庫に格納されています
00011
NGNGWindowsプログラムを作るにあたって、API以外の疑問や質問を
ぶつける為に作りました。
自分もMSの摩訶不思議な規則や仕様(バグ)等に悩まされてます。
質問や疑問以外にも、プログラミングしていて気付いた事や発見等も
書き込んでくれると有難いです。
あ、自分の開発環境はVisualC++でMFCを使ってないので
C/C++でMFC無しの方向でお願いします。
00021
NGNGそれは、最初に渡されるHINSTANCEの扱いです。
Windowsプログラム等を見ると、迷わずグローバル変数を使ってますよね。
最近までは、グローバル変数を定義して、渡された瞬間に値を代入してましたが
最近は、GetWindowLongを使ってウィンドウハンドルから求めてグローバル変数を
使わない方向にしています。皆さんは、どうされてますか?
0003デフォルトの名無しさん
NGNGMFCなしでC++って人いるの?
0004デフォルトの名無しさん
NGNG00061
NGNG自分はMFC無しでC++でプログラムしてます。
やはり、CよりC++の方が慣れてくると色々と
便利ですし…(その分…いや倍位、短所もあるけど)
どちらかというと、不満無くMFCを使ってる人の方が不思議です。
0007デフォルトの名無しさん
NGNG漏れはグローバル変数に入れてしまってるが、確かにグローバル変数は使わない方向で逝きたい…。
が、ウィンドウハンドルから取得って、そのウィンドウハンドルは、何処から取得するの?
0008デフォルトの名無しさん
NGNG誰も不満無くMFCを使ってる奴なんかいねーよ。
みんな、不満言いながらMFC使ってんだよ。
0009デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNG禿同。
MFCだけでなく、Windows自体が…(以下略)
0012デフォルトの名無しさん
NGNGオレの記憶違いでなければ、Win32以降のWinMainに渡されるHINSTANCの値は
ともに無意味だっと思うが。だからオレは固定にしている。
0013デフォルトの名無しさん
NGNG今まで無事でよかったね。
0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNGるつもりだがなにか問題があるか? 具体例を示してくれ。
0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNG00181
NGNG>>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デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1017072275
00211
NGNG>>10
>>11
>>14
>>17
皆さん、Windowsプログラムは仕事でしてるんでしょうか?
自分の場合は仕事でする場合は1人か、複数人でも幸運にも
MFCを使わない場合が多いのです。
あとは、趣味でプログラムをする時ですが、
この時はもちろん、MFC無しです。
仕様とかで「MFCを使う事」とかになってるんでしょうか?
それとも、もともとMFCを使って組んであって、それを引き継いだとか??
0022デフォルトの名無しさん
NGNG「C/C++で Windows programming をサポートするフレームワーク/ライブラリって知りませんか?
有名なやつはいいです」
という質問なら理解できる。あるかどうか知らんけど。GTKがあるか。
> Windowsプログラムを作るにあたって、API以外の疑問や質問を
> ぶつける為に作りました。
> 自分もMSの摩訶不思議な規則や仕様(バグ)等に悩まされてます。
摩訶不思議な挙動はAPIの実装あるいは仕様が引き起こすものだ。
にもかかわらずAPI以外という限定は理解できん。
それから >>2 は明らかに WIN32API 逝きだ。
>>21
MFC使いに苛められたのか?
002312
NGNG>>21
わしは、仕事の関係でMFCを使用している。既存のコードがMFCなんでね。
その改修をやると仕方なしにMFCを使用せざるえない。
個人では、自作のライブラリーを利用している。
>>22
>摩訶不思議な挙動はAPIの実装あるいは仕様が引き起こすものだ。
>もかかわらずAPI以外という限定は理解できん
一部同意、確かにほとんどは、APIの実行結果に互換性がなく発生することが
多いな。
ただ、ヘッダーファイルの構造体の定義の一部変更でおかしくなることもあるね。
わしが最近はまったのは、フリーの3Dライブラリーをわしのライブラリーで
使用としたらリンクが出来なかったことがあった。
リンクできないのは、3Dライブラリーで「#define STRICT」が定義していな
かったせいなのだが、最新のwindows.hでは「STRICT」を使用していない可
能性も考えられる。
そういうことを1は知りたいのではないか?と勝手に憶測するがね。
0024デフォルトの名無しさん
NGNG00251
NGNGそうですね。スレの趣旨とズレた方向に話を持っていってしまったみたいですね。
スレ立てた本人が、スレの趣旨と違う事を書いてたら駄目ですね…。申し訳ない。
ここのスレの趣旨はAPI以外のWindowsProgramに関する事、全てです。
言語はC/C++で非MFCという事で。別にMFC使いに苛められたい訳では無いです。
…が、書き方がソレっぽくなっちゃいましたね。
今、直ぐに「コレ」といった例が思いつかないのですが、プログラムを
していると、APIの純粋な疑問よりも、バージョンの違いから来る
動作の違いや、定義の違い等がありますよね?
あと、サンプル等ではAPIの動きを説明する為に、それに特化した不自然な
プログラムが載っている事が多々あります。しかし、Windowsプログラムには
独特のクセ等が多く、それを自然なプログラムだと自分で思っていて、後で
それが不自然なプログラムだった事に気付いたりする事は多いのではないでしょうか?
そういう疑問を質問して答える場が無いなー。と思ってスレ立ててみました。
>>2では、「HINSTANCEをどういう風に扱っていますか?」という疑問で
「HINSTANCEをどう取得すれば良いか?」という結果重視の質問ではありません。
その辺が「WIN32 APIスレ」と違う所だと自分で思っているのですが…。
0026デフォルトの名無しさん
NGNGMFC使ってるけど、GetWindowLong()使ってるYO!
それ以前にHWND hWnd = GetSafeHwnd();ってやって、Win32APIで処理してる。
単なるラッパならラッパ関数呼ばなくなった分だけ早くなんねーかな? とか思ってんだけど、実際はあまり変わんねー。
でもやる(藁
0028デフォルトの名無しさん
NGNG>摩訶不思議な挙動はAPIの実装あるいは仕様が引き起こすものだ。
>にもかかわらずAPI以外という限定は理解できん。
漏れが思うに「WIN32API質問箱」の方も定義がいまいちだと思うYO!
例えば、ウィンドウの最大化ボタンとクローズボックスを非表示にして
最小化ボタンだけ表示させたい時に、質問するのは「WIN32API質問箱」か?
質問しても、「WM_NCPAINTを捕まえて自前で処理しろ!」と言われるのが
オチだろう。確かに、そうだけど実際それを実行するのは難しいし
質問者は、むしろ、「どう自前で処理をすれば良いのか?」という疑問に
進む事は当然だろう。しかし、それを質問すると「質問厨」とか言われて
おしまいだろう。
もしかしたら、他の意外な方法(効率とかは抜きで)があるかもしれないし
そういうAPIやメッセージを駆使して実現する事は、APIの質問からズレて
いるような気がする。
ここは、そういう趣旨のスレなのでは?…と勝手に漏れは推測する。
…というか、願う。漏れも、この手の疑問はいっぱいあるから。
0029デフォルトの名無しさん
NGNG「C/C++で Windows programming を(略)」なスレなら(・∀・)イイ!。
マイナーな奴でこんなのはどう?
SOL++
http://home.att.ne.jp/green/atlan/sol2000/library.html
Motifにバイアスがかかってる感じのクラスライブラリ。
もう手に入らないけど、ソフトバンクから出てた
「Windows 95 SUPER CLASS LIBRARY」って本に
ついてたやつの最新版みたい。
0030デフォルトの名無しさん
NGNGGetModuleHandle(NULL);でいけない理由は?
たとえば、ウインドウを持たないdllのインスタンスハンドルを得るにはどうしてる?
00311
NGNG特にGetModuleHandleでは、いけない理由はありません。
…というか、今までグローバル変数を定義して、
渡された瞬間に値を代入してました。Windowsのサンプルプログラムでは
ほとんどが、この方法になってると思います。(Windows APIバイブル等)
しかし、そうじゃなくてGetWindowLongを使った方がグローバル変数なんか
定義しなくても良いんじゃないのか?と、最近思った訳です。
GetModuleHandleですか…。それは気付きませんでした。
確かに、こっちの方がスマートかもしれませんね。
もしかして、GetModuleHandleでHINSTANCEを取得している方って多いんでしょうか?
それとも常識??自分が今まで気付かなかっただけ???
0032デフォルトの名無しさん
NGNG0033デフォルトの名無しさん
NGNGhttp://www.fox-toolkit.org/
こういうのは?
0034デフォルトの名無しさん
NGNGだったりするが)を見直してる。
昔はグローバル変数等で管理している状態?と実際の状態がバグで
食い違ったり、APIで取れる情報を変数に抑えておくと、同じ情報を
二重に持っているみたいで嫌だったんで、APIで取得できる情報は
変数に押さえるのを極力やめていた...
が、しかし、パフォーマンスがでないんよ。結構頻繁に使用する
情報だったりすると、ちょっとした連想配列使った情報検索
なんかよりAPI呼び出しの方が高価みたい。
が、HINSTANCEは頻繁庭使わんか。
0035デフォルトの名無しさん
NGNG普通は頻繁に使う/ループ内で使う値は自動変数に一時的に保存するだろ。
0036デフォルトの名無しさん
NGNGグローバル變數になつて問題は無い、と思つてをります。
問題となる使ひ方は、処理の簡略化のため、データのやり取りに使ふ、
というやうな場合ではないですか?
003734
NGNG大体においてローカルで済ませられるならそのほうがいいでしょ。
でもwindowsのGUIはメッセージループに戻る必要があるでしょ。
でね、それをウィンドウ矩形毎回取得したり、GetWindowLong使ったり、
IsWindowVisible使ったり...つまりはそういうAPI叩きは遅いって事。
実際には独自HashMapでHWNDと関連づけたデータ構造から状態取得
したほうがえらく速かったという。
MFCとか使ってるならCWnd派生クラスのメンバ変数でも良いが、
MFCはメッセージループからしてとろいからなー。
0038デフォルトの名無しさん
NGNGまぁ、悪いとは言わないけどね。
外部アプリから勝手にウインドウスタイル変更されたりした場合に、
内部の状態と食い違いが生じてくるでしょ。
003934
NGNGそうなのよねー、そこらへんが悩みどころ。
性能とのトレードオフっちゅー事でしょーか。
かといって昔の俺の様に、何でもかんでもグローバル
データや情報の二重管理は良くないって思っている人結構
いないですか?
実際にはバグ以外では有り得ないって事は言えないですが、
子ウィンドウが外部アプリで勝手にクローズされたり等
対話アプリとして作っている以上きりがないので
(そんな事コーディングで毎回チェックしてられねーっ
ちゅうねん)俺は使用頻度が高い情報はオフラインキャッシュ
とゆーか、プログラムのメモリに置くのもOKだと思う。
#DBのファイルを稼動中に書き換えて、DBのメモリ内のキャッシュ
とファイル内の情報が食い違うようなものだと思うが。
MSのアプリや市販ソフトも自作アプリからスタイル変更したり
SW_HIDE等しても無視されちゃってるしね-。
#逆に不正操作(チート)防止の為にわざとやってるとしか思えない
様な挙動をしたりして。
00401
NGNG了解です。スレの趣旨がわかった方が少数でもいるみたいなので、
>>1は、ここで消えます。(何か自分に対する質問があれば別ですが)
次回からの自分の書き込みは「デフォルトの名無しさん」という事で…。
0041デフォルトの名無しさん
NGNGスタイルもきっちり規定のものに戻すコードを書いているんだが、くどいのかな、やっぱり。
0042デフォルトの名無しさん
NGNGするものは考えなくて良いと思うのだが、
最近、思ったのは「ウィンドウの境界の幅」。
結構、かなりのアプリが対応してない。
今まではデフォルトの幅が1だったけど、
XPのデフォルトの幅が5位(詳細忘れた)になってるので
気付いて慌てて直したアプリも多い筈…。
0043デフォルトの名無しさん
NGNG> するものは考えなくて良いと思うのだが、
考えろよ… 対した作業量じゃないだろ。
いくつかのメッセージに反応すればいいだけだし。
0044デフォルトの名無しさん
NGNG俺は、グローバル変数は極力使わない。
なんでもAPI等を使って取得するようにしてる。
確かにパフォーマンスは悪い。
どうしても遅さが気になる時はその部分だけ一時的に
グローバル変数を使用している。
後々、PCのパフォーマンスが上がり、その遅さが
気にならない程度になってきた時にバージョンUPの時等に
APIの取得に切り替える。
そういう切り替えが楽にできるような書き方をしている。
0045デフォルトの名無しさん
NGNGいくつかのメッセージと言われてもcase by caseだからなぁ…。
当然、システム標準で変えられるような属性(画面のプロパティ等で)は
対応しないとマズイと思うのだが、それ以外は無視している。
昔、自分の作ったアプリで、子ウィンドウにWM_DESTROYを投げると
落ちるというバグが報告されたが、無視した。
そんなの、システム標準のツールじゃできない事だし。
>>43の言う「いくつかのメッセージ」というのは例えばどんなんだ?
004643
NGNG> 昔、自分の作ったアプリで、子ウィンドウにWM_DESTROYを投げると
> 落ちるというバグが報告されたが、無視した。
すげーなぁ。そんなこと言ってくる奴がいるのか…
そりゃ無視だろ。
いや俺が言ってるのも、システム標準で変えられるような属性(画面のプロパティ等)
って奴だよ。 >>42の話の中でWindowの幅とか出てたから。
004741
NGNG43じゃないが。
システムでいろ設定を変えたりすると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随分手が込んでるな。デスクトップマスコット系アプリ?
0049デフォルトの名無しさん
NGNG仕事だったら「WM_SYSCOLORCHANGEを投げてこないアプリが悪い」と言って
無視するなぁ。それに対応する為に色々な事やって、パフォーマンスの低下や
新たなバグを生む原因にしたくないし…。
そもそも>>47は、グローバル変数にシステム情報等を格納している方向なのか?
それなら、その位の対応も納得なのだが…。
タイマーは、ちょっと手が込んでる気がするが…(^^;
0050デフォルトの名無しさん
NGNG42=45だが、システムで変えられる情報の中でもウィンドウの境界の幅は
今まで、誰も気付かなかったような項目だから…って話だったんだけど
説明がわかりにくくてスマソ。
0052デフォルトの名無しさん
NGNGGetClientRectとGetWindowRectの幅と高さの差(高さは結構あるか…)は
そんなに違いが無くて、ウィンドウのサイズ制限するプログラムとかで
GetWindowRectとか、WM_SIZEメッセージで返ってくるLPARAMの
値を使って制限してると問題が出るね。(後者の方は結構多いと思う)
0053デフォルトの名無しさん
NGNGそれに幅は、GetSystemMetricsで取得すればよいと思うが違うのか。
0054デフォルトの名無しさん
NGNGまさに>>50,52の言っていた例のレスだな。
つまり、WM_GETMINMAXINFOメッセージで処理するという事は
LPMINMAXINFO構造体でウィンドウサイズを制御するという事だよね?
その時にptMinTrackSizeに最小値を入れろ…と。
しかし、それではいかんのだよ。わかるかな?>>53よ。
>>50,52の言っている事を良く考えてみよう。
GetSystemMetricsで幅を取得するのも同じだ。
0055デフォルトの名無しさん
NGNGどっちも閑古鳥が鳴いてるし
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNG素直にGetWindowRectとGetClientRectのサイズの差を求めて、最小サイズに
したい値に、その差とクライアントウィンドウのサイズを足したものにするのが
一番良いと思う。GetSystemMetricsでウィンドウの幅とかを取得しまくると
メニューなんかが2行になった時等に対応するのが辛いよ。
0058デフォルトの名無しさん
NGNG別に2つあっても良いんじゃない?
0059デフォルトの名無しさん
NGNGここが、part2かAPIスレがbuild3になったら、統合しよう。
いつになる事やら…。
0060戸尾理縋り
NGNG中身が
「小っちぇーよ!(三村調)」
枠幅変更をわざわざ考慮してたものはXP以前にゃ
あまりないだろうということだろう
006150
NGNGそういう事。
0062デフォルトの名無しさん
NGNGクライアントサイズとウインドウサイズの差というのは落とし穴があるよ。
たとえば、WS_EX_CLIENTEDGEスタイルを持った子ウインドウを
幅高さともに0で作ると、GetClientRect/GetWindowRectが同じサイズ{0, 0}を返すので、
差が求められない。
実際にこれでハマったことあるし。
#論理レイアウトマネージャにウインドウのサイズの管理を任せたりするときにこれにハマった
じゃぁ、最低いくつで作ればいいのかという話になるが、
それこそボーダーの太さに事実上上限が設定されていないので、
どのサイズで作っても保証が無くなる
それこそ、縦横ともにサイズにずれが生じるまでループするしかない。
もっともほぼ無いと言ってもいいようなレアケースだけどね。
0063デフォルトの名無しさん
NGNGきっちりGetSystemMetricsで取ってくるんじゃないか?
0064デフォルトの名無しさん
NGNGGetClientRectとGetWindowRectで求めてましたが…。
0065デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNGトレイのアイコン取得する方法教えてください。
0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNGAPIとC-runtimeは包括範囲が違うだろ
0071デフォルトの名無しさん
NGNGこんなの見つけたからage
http://www.fltk.org
かなりマルチプラットフォーム化されてるしGUIビルダもある
Qtはでか過ぎてイヤンという人にお勧めできるんじゃなかろうか
ちなみにC++
0072デフォルトの名無しさん
NGNG007369
NGNGいやー、結構重複してる部分あるじゃない。
CreateFile ≒ open
CreateProcess ≒ execXX
…
ぼくはAPI派なんだけど、害虫さんはCRT派でね、
ちなみにGUIアプリでWin以外への移植は無しなの。
どっちが多数派かなーって思って。
0074デフォルトの名無しさん
NGNG細かくアクセスコントロールを行う場合など、
特殊な状況じゃなければ標準ライブラリを利用する。
APIを使うと引数の数が平気で10個あったり、
いちいち構造体使ったり面倒だから。
0075デフォルトの名無しさん
NGNGそれ以外はAPIを使ってるなー。長年Windowsプログラムをしてると
ある程度のパターンができてくるから、APIの引数とかも気にならないし…。
ところで、HINSTANCEの話がでてきて思ったんだけど、グローバル変数を
使ってる場合は、他にはどんなグローバル変数を使ってる?
漏れは…ウィンドウクラス名とかかなぁ…。
0076デフォルトの名無しさん
NGNGシステムの情報は格納しないな。
アプリケーションの設定を専用クラスでグローバルに置くくらいかな。
文字関係は全部リソースに置いておくし。
0077デフォルトの名無しさん
NGNGなんでウインドウクラス名ってグローバル変数なの?
どの本見てもそうなってるけど。
まだ本格的にWin32やってないから、これがグローバルである意味が
よくわかんない。
知ってる人いたら教えて。
0078デフォルトの名無しさん
NGNGまぁ、defineでもいいんだけどね。
0079デフォルトの名無しさん
NGNG別にローカル変数でもいいよ?
つーかそれよりRegisterClass呼んでるのに
なんでUnregisterClassは呼ばないのか疑問。
別に
0080デフォルトの名無しさん
NGNG余分だった。
0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNG一度も出てこないんだ、ゴラァと言ってみるテスト
0083デフォルトの名無しさん
NGNG必要ないから。
プロセス終了時に解放されることが保証されている
0084デフォルトの名無しさん
NGNGLoadImageやCreateWindowはウィンドウズヘッダ内でマクロとして定義されてるんですよね。
だからメンバ関数にLoadImageなんて名前付けるとLoadImageAに変わってしまったり、
CreateWindowなんかコンパイルエラーになってしまいます。
何でインライン関数使わないんだよぉ!
何のための名前空間、何のためのクラスだと思ってんだ。
0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNG元々C互換APIだから。
C++でもっとも顕著なのは、STLのstd::min/maxかな。
それから、LoadImageなんてセンスのない名前付けるな
0087旧MS-Cユーザ
NGNG名前空間なんかつい最近できたばかりじゃないか。
0088デフォルトの名無しさん
NGNG0089デフォルトの名無しさん
NGNG0090ショシンs
NGNGメッセージプロシージャ関数内の
case WM_LBUTTONDOWN:
の下で現在のマウス位置を取得して
そのあと条件式で自分が指定した矩形領域内でボタンが押されたならば
という形でボタン機能を実現したいと思っているのですが
マウス位置を取得する関数がよくわかりません。
それともlParamかwParamを使えば同じことができるのでしょうか
0091デフォルトの名無しさん
NGNGGetCursorPosを調べてみる
0092ショシンs
NGNG最初
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デフォルトの名無しさん
NGNG0094ショシンs
NGNGDirectXの勉強を始めたばかりのものでしていまだ使えこなせずにいます。やっぱひとつWINDOWSAPIの説明がいろいろと書いてある本を
買ったほうがいいのですかね。
0095デフォルトの名無しさん
NGNG>LPPOINT MSpoint;
>GetCursorPos(MSpoint);
は
POINT MSpoint;
GetCursorPos(&MSpoint);
じゃないとだめだYO
それと、GetCursorPosはそのときのカーソルの位置を
かえすけど、lParamはボタンの押された位置がかえるYO
若干ちがくなることがあるので気をつけてね。
あとクライアント座標とかスクリーン座標とかにも気をつけてね。
>WINDOWSAPIの説明がいろいろと書いてある本を
>買ったほうがいいのですかね。
あとDEEPなCの本もNE
0096デフォルトの名無しさん
NGNGいつから、ポインタの基礎・FAQが、DEEPなCの本の扱いに
なったのでしょうか。私は、日本のソフトウエア業界の
逝く末を心配したくなりました。
0097デフォルトの名無しさん
NGNGくだらないことで話し広げようとしないでくれる?
C厨が集まっちゃうとスレが死ぬから。
どうせ広げるなら、
「GetMessagePosとかもあるYO。とか」
「これを使えば、コントロールからの通知とかでもちゃんとした
座標が取れる?」とか技術的なコトにしてクンナイ?
0098t
NGNGまず、メモリ上に描写を行って、そのあと1度に画面に表示させる。
方法を教えて、
0099t=98
NGNG0100デフォルトの名無しさん
NGNGGetMessagePosなら、lParamの方がよっぽどいい。
0101デフォルトの名無しさん
NGNGんじゃ、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);
■ このスレッドは過去ログ倉庫に格納されています