[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 10/09 01:24 / Filesize : 48 KB / Number-of Response : 216
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build80



1 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 04:25:40 ]
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!

過去スレ、関連リンクは>>2-10くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

- Win32API質問箱 wiki
wiki.livedoor.jp/program1/d/FrontPage

Win32API質問箱 Build79
pc12.2ch.net/test/read.cgi/tech/1240411224/

52 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 17:59:47 ]
ステータスバーっぽいウィンドウ作って配置するとか

53 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 01:56:52 ]
スクロールユーティリティ作っていて、標準スクロールバーを持つコントロールの
スクロールバーのサムの位置をダイレクトに変えたい。

WM_VSCROLL/HSCROLLで SB_LINEUP/DOWN, SB_PAGEUP/DOWNは動くけど、
SB_THUMBPOSIION(またはSB_THUMBTRACK) 送っても反応しないものがある。

エディットやリッチエディットなどは問題ないけど、Janeのスレビューの部分の TMDITextViewなどは動かないんで、
SetScrollInfo(またはSetScrollPos)で無理やり位置を変えてから、SB_THUMBPOSITIONを送ると動いたりする。
(でもビジュアルスタイルを適応していると動かない)

独自コンポーネントの仕様だと言われればそれまでなんだろうけど、
Spy で調べたのと同じメッセージを送っても動かないのは何でだろ?

54 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 07:07:41 ]
独自コンポーネントの仕様です。

55 名前:デフォルトの名無しさん [2009/06/08(月) 17:00:03 ]
システムメニューじゃなくてタイトルバーの下にあるメニューを列挙するAPIを教えてください

56 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 17:06:07 ]
ウィンドウに対してGetMenuしてうんぬんかんぬんする

57 名前:デフォルトの名無しさん [2009/06/08(月) 17:07:28 ]
>>56
あ、ありがとう。
それだけわかれはうんこが漏れるほどわかりますた

58 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:06:39 ]
基本メインウィンドウ隠してる時にポップアップメニューを出すようにしたんだが
WM_HOTKEYでSetForegroundWindowー>TrackPopupMenu
の処理すると、ポップアップメニュー以外をクリックしても閉じるけど
WM_TIMERで同じ事やると、メニューが閉じない
一応メッセージフックして違いを見たけど、解決に至らなかった
良い方法はないだろうか?

59 名前:デフォルトの名無しさん [2009/06/08(月) 21:07:08 ]
>>58
TrackPopupMenuのあとにWM_NULLをポストする。

60 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:42:46 ]
エクスプローラとかについてる進む・戻るボタンみたいな、
ボタンの脇に▼がついてるボタンのことなんていうの?
ナビゲーションボタンであってる?



61 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 00:36:50 ]
特に名前はないだろ

62 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 00:38:06 ]
ドロップダウンボタンだろ

63 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 06:49:24 ]
スプリットボタン

64 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 08:07:48 ]
TBSTYLE_EX_DRAWDDARROWS
BS_SPLITBUTTON
ツールバーだから、ドロップダウンボタンという事になるのかな。

65 名前:58 mailto:sage [2009/06/09(火) 11:37:35 ]
>>59
試して見ましたが駄目でした
WM_NULLはタスクトレイから操作された時に必要のようですね

66 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 15:50:05 ]
質問です。

WNDCLASSのlpszClassNameに設定するクラス名の文字列のポインタのことなんですが、
このポインタが指す文字列は、RegisterClass後も、
そのままメモリ上で同一の内容で存在し続ける必要があるのでしょうか?

例えばlpszClassNameに設定した文字列のポインタが、
mallocによって確保された領域を指している場合、RegisterClass後に
それをfreeしてしまっても問題が起きない保障があるのか、、が気になります。

67 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 15:53:35 ]
開放しても大丈夫

68 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 15:58:50 ]
分かりました。ご返答ありがとうございました。

69 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 16:38:33 ]
いやどうかな

70 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:54:41 ]
普段は単なる文字列リテラルを使っていたから考えもしなかったが、リテラル文字列は
メモリ上に永続していることが多いのか。



71 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:01:06 ]
というかまあ、常識的に考えれば、文字列へのポインタを引数にとる関数が、制御が帰った後も
その文字列が永続してなきゃいけないような変則的な作りだったら、ドキュメントにそう
書いてあるはずだ。

72 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:02:12 ]
strtokとかか

73 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:13:35 ]
RegionをSelectObjectした時の記述が無い?

74 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 19:58:21 ]
>>70
つーか文字列リテラルが永続しない場合ってどんな時だ?

75 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 20:11:01 ]
>>73
SelectClipRgnと等価。
ってMFCの方には書いてあるのだけどなあ。
www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.gdi/2005-08/msg00233.html
というVC++MVPな人の発言もあるし、それで合ってると思う。

76 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 20:57:39 ]
エディットコントロールに対して文字を追加する方法はありますか?
SetWindowTextだと全て描画しなおしになってしまうので。

77 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:19:55 ]
自己解決しました。EM_REPLACESELでいけました。

78 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:21:07 ]
>>76
うろ覚えですまんが、確かSendMessageとか使うんじゃなかったかな

79 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:51:15 ]
>>74
永続する保証がない以上、永続しないケースがあると考えておかないと。

80 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:12:54 ]
言語によってはガーベジコレクトされるかもね。



81 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:28:26 ]
DLL内の文字列とか、DLLをアンロードすれば読めなくなる。

82 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:03:21 ]
>>76
EM_SETSEL (-1, -1) → EM_REPLACESEL

83 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 14:32:58 ]
>>81
アンロードしてもすぐには消えないことがあるからタチ悪いよな。

84 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:37:31 ]
マルチスレッドで、
スレッドAの処理Bと、スレッドCの処理Dを排他的に処理したい
(同時進行で処理したくない)場合、一般的にはどうするの?
これ! っていうAPIがあったりする?

85 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:41:58 ]
>>84
同期オブジェクトを使って同期。

86 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:43:08 ]
Mutex とか CriticalSection とか

87 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 01:16:35 ]
InitializeCriticalSection(&cs);
EnterCriticalSection(&cs);
EnterCriticalSection(&cs);
EnterCriticalSection(&cs);
...

てやると、普通に最後まで実行できるんだけど、なぜ?
この場合って、二回目のEnterCriticalSectionで永久ループになるんじゃないの??


88 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 01:31:37 ]
csを獲得済みだから

msdn.microsoft.com/en-us/library/ms682608.aspx
After a thread has ownership of a critical section, it can make additional calls to EnterCriticalSection or TryEnterCriticalSection without blocking its execution.
This prevents a thread from deadlocking itself while waiting for a critical section that it already owns.
The thread enters the critical section each time EnterCriticalSection and TryEnterCriticalSection succeed.
A thread must call LeaveCriticalSection once for each time that it entered the critical section.

89 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 01:54:29 ]
unsigned charのSHIFT JIS文字列をcharのSHIFT JIS文字列に変換する、もしくはその逆は可能でしょうか?

90 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 01:59:50 ]
>>89
(char*)とか(unsigned char*)とかキャストするだけ。Win32APIの出番ではない。
C++ならreinterpret_castな。



91 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 09:06:31 ]
_com_ptr へのポインタなんだけど

IHogePtr phoge;

IHoきいせかす *pphoge = &phoge;

とすると&のオーバーロードで入れられないんです。
どうしますか?

92 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 10:36:30 ]
使い方がおかしい
というかスレ違い

93 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 14:09:13 ]
>>91
IHogePtrへの参照で我慢するか、boost::addressof

94 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 22:21:15 ]
DrawCaption(hWnd, hDC, &rcCaption, DC_ACTIVE | DC_GRADIENT | DC_TEXT | DC_ICON | DC_BUTTONS);

このようにしてDrawCaptionをDC_BUTTONSフラグを付けて呼び出してもボタンが描画されないのですが
なぜでしょうか?

95 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 22:33:36 ]
次にお前は「OSは2000」と言う!

96 名前:94 mailto:sage [2009/06/13(土) 22:42:02 ]
すみません、OSはXP SP3です。。。

97 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 22:42:40 ]
>>95
駄目じゃん

98 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 22:48:26 ]
EnterCriticalSection て、例えば
beginthread でスレッドAとBをつくったとして、そのAとBの間で
同期する場合にしか使えないの?
beginthread でスレッドを1つだけつくった場合に、
プログラム本体側と、スレッドの間で同期はできないの?

99 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 22:54:48 ]
>>98
何言ってんのか正直わからんが、おまえの言う「プログラム本体」も
スレッドなので「スレッドAとB」の場合と何もかわらんよ。

Advanced Windows読んで出直してこい

100 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 23:14:05 ]
つーか、beginthread なんて使わずに、ちゃんと CreateThread() 使え。



101 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 23:15:20 ]
俺はbeginthread派何だが、CreateThreadの方がやっぱりいい?

102 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 23:18:38 ]
俺はThread.Start()派

103 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 23:19:16 ]
CreateThreadのメモリリーク問題ってなんでマイクロソフトは10年経っても治さないの?

104 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 23:23:50 ]
いろいろ面倒だからじゃね?

俺は面倒だから_beginthreadex使うけど。

105 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 23:29:15 ]
>>103
もう直っている。
Windows Server 2003でFlsAllocと言う関数が導入された。もちろんVistaでも使える。
これには、スレッド終了時に呼ばれるコールバックを登録する機能が付いており、
CRTもこれを使ってのリソース解放ができるようになった。

XP以下放置かよ、と思うならDLL版CRT使えばいい。

106 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 23:54:35 ]
いつも_beginthreadexじゃなくて_beginthreadのほう使ってるけど
いいの?

107 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 00:11:39 ]
>>106
今話題になっている件については問題はない
ただし、他にも違いがあるので _beginthreadex にしておくのが無難、MSDNを読んでおけ

108 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 18:24:17 ]
      ______
      \|        (___    
    ♪   |\            `ヽ、 
         |  \             \
   ∧ ∧ |   \             〉
   (*`q´) | ♪   \          /
 ‖( つ| ̄ ̄ ̄ ̄ ̄ ̄! ̄ ̄ ̄ ̄ ̄ ̄ノ
 ‖( 匚______ζ--ー―ーrー´
  〓〓JJ .‖    ||       .||
 ‖       ‖            ||



109 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 18:25:03 ]
質問です。

フィルタドライバを作らずにリアルタイムでオーディオデバイスから出力されるサウンドを加工することは可能でしょうか?
もし可能ならやり方の概要を教えてください。

110 名前:109 mailto:sage [2009/06/14(日) 18:25:58 ]
オーディオデバイスから出力される直前のサウンドを加工してから出力したいのです。



111 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 18:49:59 ]
ASIOとVSTプラグインを使えば普通に可能だろ

112 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 08:33:19 ]
携帯電話は高いよ〜。
ピッチがオススメ!
俺はNTTパーソナルだけど、この前サービスが始まったASTELが気になる。

113 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 16:52:55 ]
非同期ソケット通信でWSAAsyncSelectでメッセージを受け取らずに
自分のスレッドで接続したかどうかを識別する方法を教えてください

114 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 18:02:03 ]
もひとつ質問ですが
WSAAsyncSelectのFD_CONNECTをしてからconnectしますが
サーバーから応答が無い時はだいたい30秒くらいで
メッセージが返ってくるのですがこれのタイムアウトはどうやって設定するのですか?
ちなみに、>>113もFD_CONNECTの話です。

115 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 02:57:29 ]
しつもんです。
Windowsが起動してからの
任意のドライブ(物理 or 論理)の

総書き込みバイト数
総読み込みバイト数

をいちばんシンプルに取得する方法はどんな方法でしょうか?

その手のデータを表示するソフトがあるのですが、
OSを起動させてかなり時間が経過してからアプリを起動しても、
OS起動からの正しい数値が表示されます。
常駐してカウントしてるわけではないんです。
これは、どこから取得しているんでしょうか?

116 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 03:49:43 ]
>その手のデータを表示するソフト

具体的に頼むわ

117 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 04:01:59 ]
>>116
HDDLed Indicator
インジケーターにカーソルを合わせると
OS起動時から起動しなくてもきちんと
任意の物理/論理ドライブのreadとwriteの累積バイト数が出ます
これ、どうやって取得してるんでしょう?

118 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 06:01:47 ]
パフォーマンスカウンタ

119 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 06:22:06 ]
>>118
パフォーマンスカウンタでは>>115の後半に書いたようなことは無理ですよね?

120 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 07:35:49 ]
fsutil fsinfo statistics
で見られるのだから、どこかに記録されているのは確か。
パフォーマンスカウンタかWMI辺りなんだろうけど。



121 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 09:29:39 ]
NtQueryVolumeInformationFile辺りだな

122 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 09:40:23 ]
間違えた
DeviceIoControlでFSCTL_FILESYSTEM_GET_STATISTICSだった

123 名前:デフォルトの名無しさん [2009/06/17(水) 14:00:04 ]
クライアント領域が透明なウインドウをつくるとき、エディットコントロールみたいな子ウインドウではできない?

124 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 15:09:43 ]
何を言っているのかよくわからないが、リージョンを使う分には問題ないだろ

LayeredWindowは無理かもしれんが

125 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 15:45:34 ]
背景ブラシの色を0x00000000に

126 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 16:22:34 ]
>>118-122
Thanks!!!

127 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 18:29:15 ]
ReadDirectoryChangesWで、変更されたファイル名の終端にゴミ文字がある場合があるんだが
これは仕様?
バッファは呼ぶ直前に0クリアしてる

128 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 19:07:33 ]
有効なサイズは返しているのだから、
後はどんなゴミで埋められようがガタガタ抜かすな、ってスタンス?

129 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 19:38:59 ]
>>127
使用する領域はちゃんと確保した領域にしてる?
ポインタだけ宣言してどこ指してるか不明なまま使ってるとかじゃない?

130 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 19:52:03 ]
最前面表示のウィンドウよりも手前に表示されるウィンドウってどうやったら作れますか?
最前面表示ウィンドウ同士だと、通常のウィンドウのようにアクティブな方が手前に表示されてしまいます



131 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 20:12:28 ]
最前面表示のウィンドウよりも手前に表示されるウィンドウ
よりも手前に表示されるウィンドウってどうやったら作れますか?
って話になってしまうので、そういう事はできなくなっている。

132 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 20:18:15 ]
タイマーで監視して常にアクティブに・・・
っていう嫌らしいコードが頭に浮かんだぜ

133 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 20:58:12 ]
>>129
TCHAR buffer[1024];
ZeroMemory( buffer, sizeof(buffer) );
を渡しても問題が発生しています


134 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 21:45:45 ]
C++でCPU温度を取得したいんだけど、なんかいいAPIある??

XP
borland c++
なんだが。。。誰か教えてくれ

135 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 21:45:59 ]
>>133
FILE_NOTIFY_INFORMATIONの
FileNameがFileNameLengthの分だけ正しい内容になっていればOKだぞ。
0終端はなされないと書かれてあるしな。

136 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 21:50:05 ]
>>134
ググレカス

答えは出てないが↓
ttp://okwave.jp/qa3337870.html

core2だとレジスタ内に温度が格納されている?↓
ttp://pc-match.spaces.live.com/blog/cns!54C129738D4C3785!201.entry

137 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 21:50:11 ]
TOPMOSTのウインドウをオーナーウインドウにしたらできる気もする>最前面より手前

138 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 22:04:25 ]
>>135
有難うっ
>0終端はなされないと書かれてあるしな。
これは知らなかった。WideCharToMultiByteでANSI分の文字数取って変換ってやってた
何にせよ、おかげで解決しそうです。有難うございました。

139 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 22:52:27 ]
VBのリストビュー使ってるんだが、SubItemが編集状態にできないので
フォーカスが当たってる場所に擬似的にテキストボックスを表示させたい
んだが、フォーカスが当たっている座標が分からん。何か良いAPIはないものか。


140 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 23:28:11 ]
>>139
LVM_GETITEMRECT とかでいいんじゃねーの?



141 名前:デフォルトの名無しさん [2009/06/19(金) 00:37:16 ]
初歩的な質問かもしれませんがエディットボックスを作ってもキーボードで文字を打ち込むことができません。なぜでしょうか?
マウスの右クリックから文字を貼り付けることはできます。

142 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 00:50:39 ]
ここは大穴狙いで。
メッセージループでTranslateMessageしていない、とか?

143 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 01:30:01 ]
>>142
すげー助かりましたw
分かってることなのになんでこんなの見落としてたんだろう・・・

144 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 07:32:39 ]
上でも挙がってるReaDirectoryChangesWを使って見たんだが
ファイルを複数移動すると取りこぼす時がある
何か改善案ないかな?

145 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 11:10:38 ]
1個につき1回じゃないぞ

146 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 11:16:13 ]
>>145
勿論承知してる
非同期のマルチスレッドで常に呼んでるけど
ファイルを多数移動すると通知されれず
結果取得の為の待機をしてしまう
このAPIは基本取りこぼしはしない?

147 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 15:06:27 ]
>同期操作が正しく完了した場合、lpBuffer パラメータはフォーマット済みのバッファを表し、
>lpBytesReturned パラメータにはバッファに書き込まれたバイト数が返ります。
>転送バイト数が 0 の場合、バッファが小さ過ぎて、ディレクトリやサブツリーで発生した
>すべての変更に関する詳細情報を格納できなかったことを表します。
>この場合、ディレクトリまたはサブツリーを列挙して、変更内容を計算する必要があります。

148 名前:デフォルトの名無しさん [2009/06/19(金) 15:23:12 ]
とあるサイトで勉強していて、マウスクリックしたところにSetPixelVで点を打ってみましょう、という課題をやってみたのですが
まず
300*300の多次元配列を用意して
int pixel[1000][1000];
WM_LBUTTONDOWNのメッセージで
int w = LOWORD(lParam);
int h = HIWORD(lParam);
pixel[w][h] = 1;
UpdateWindow(hWnd);
return 0;
WM_PAINTのメッセージで
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint( hWnd, &ps );
for(int w=0; w<300; w++)
{
for(int h=0; h<300; h++)
{
if(pixel[w][h] == 1)
{
SetPixelV( hDC, w, h, RGB(255,0,0) );
}
}
}
EndPaint( hWnd, &ps );
return 0;
してみたのですが、windowサイズを変えるまで塗られません。
RedrawWindowも試してみましたが、WM_PAINTが発生しないようです。この方法は駄目でしょうか?
それともwindow生成を自分でクラス化してるのですが、そのクラスに問題があるのでしょうか?


149 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 15:31:40 ]
ちゃんとInvalidateしてる?

150 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 15:39:25 ]
>>147
デバッガで追ったけど、バッファが足りないっていうのは無かった
関数呼んでWaitで変更通知来るまで待機してるんだが
まだ通知されてるだろうに、そこで待機状態に入る



151 名前:148 mailto:sage [2009/06/19(金) 15:47:47 ]
>>149
ありがとうございます。出来ました。

InvalidateRgn(hWnd, NULL, true);
UpdateWindow(hWnd);

152 名前:148 mailto:sage [2009/06/19(金) 16:50:15 ]
というか
WM_LBUTTONDOWNのメッセージで
int w = LOWORD(lParam);
int h = HIWORD(lParam);
pixel[w][h] = 1;
InvalidateRect(hWnd, NULL, false);

これだけでOKなんですね






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<48KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef