- 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/
- 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なんですね
- 153 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 17:24:23 ]
- 下図のように自己交差しているリージョンを、
┏━┓ ┃ ┃ ┗━╋━┓ ┃ ┃ ┗━┛ 交点で個別のリージョンに分けたいんですけど、 ┏━┓ ┃ ┃ ┗━┛┏━┓ ┃ ┃ ┗━┛ 簡便な方法ってないものでしょうか。 リージョンに関するWinAPIで対処可能でしょうか。 よろしくお願いします。
- 154 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 17:33:49 ]
- 早く教えて下さいよぉ
- 155 名前:153 ◆D9KRK95MhY mailto:sage [2009/06/19(金) 17:37:04 ]
- 153です。いちおうトリップつけときます。
- 156 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 17:40:56 ]
- この時間はやはりわかる人はいないんですね。。。
- 157 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 17:46:22 ]
- 1日平均10レスのスレにそんな速く回答が帰ってくると思うなっての…。
- 158 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 17:51:32 ]
- >>153
できるよ
- 159 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 17:52:26 ]
- >>153
できますね
- 160 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 18:15:27 ]
- GetRegionDataで地道に作り直すしかないんじゃないか
- 161 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 19:07:35 ]
- >>158-159
具体的にアドバイスした方が良いと思われる。
- 162 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 19:13:29 ]
- ┏━┓
┃ ┃ ┗━┛┏━┓ ┃ ┃ ┗━┛ の上記二つのリージョンを作ったら CombineRgnで混ぜればいいよ
- 163 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 19:45:46 ]
- >>162
リージョンの合成じゃなくて、分離する方法を聞いていると思われる。
- 164 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 21:21:38 ]
- >>163
あ、すまん勘違いしてた リージョンから分離したいなら、GetRegionDataから作り直す ビットマップとかから作るなら、CreateRectRgnとCombineRgn組み合わせればいいよ
- 165 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 21:25:54 ]
- リージョンというより、自己交差しているパスを交点で切り離せれば、
そこからリージョンを作ればいいような気がするな。 ま、APIでそういうことが出来るのかどうかは分からないが。
- 166 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 21:28:16 ]
- 海外の身体改造は半端ねえからなあ
眼球くりぬいてLED埋め込んだ奴 vimeo.com/4500681
- 167 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 21:30:49 ]
- >>166
何処の誤爆だ? 怖くて見れない
- 168 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 21:33:02 ]
- ただ光らせるために片目捨てるとかアホだろw
- 169 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 21:33:47 ]
- 中盤グロかった・・・
- 170 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 22:11:57 ]
- 誤爆はほっとけ
- 171 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 22:15:42 ]
- スレチを承知で聞かせて貰う
グロイ?
- 172 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 22:17:47 ]
- 義眼にLED仕込んだバカのビデオだよ
- 173 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 22:20:47 ]
- 術前→設計→術後だから血とかはないな
- 174 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 22:23:56 ]
- >>172-173
サンクス。最初の画面で嫌悪感出て見るの辞めた 零見たいにサーモグラフィー埋め込めば良いのに
- 175 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 23:31:53 ]
- 話がそれたが、回答としては出尽くしたのか?
他にアイデアがあれば書いといてあげて。
- 176 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 23:33:14 ]
- 自演してんなよ
- 177 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 23:36:28 ]
- おれは175=165だけど?
- 178 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 23:57:57 ]
- れぎおん
- 179 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 02:31:11 ]
- 無理。
- 180 名前:153 ◆D9KRK95MhY mailto:sage [2009/06/20(土) 10:55:44 ]
- 皆さん回答ありがとうございます。
164さんのビットマップから作る方法を検討してみます。
- 181 名前:デフォルトの名無しさん [2009/06/20(土) 13:46:04 ]
- IMEの制御について詳しい方いらっしゃいますか?
漢字仮名まじりの文をIMEを使って全部ひらがなに逆変換したいんですが、 漢字仮名まじりの文をIMEに設定する関数 ImmSetCompositionString(himc, SCS_SETSTR, str, length, NULL, 0)が MSIME2002では成功するのにATOK2006では失敗します。 一応MSIMEでは動くものが作れたんですが、ぶっちゃけクソ変換なので、できればATOKを活用したいのです。 何か別の方法がないでしょうか? ネットで調べても変換操作をしたあとの再変換の方法ならあるんですが、 漢字仮名まじりの文をIMEに設定して逆変換する方法で、ATOKで成功するものが見つけられないんです。
- 182 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 13:51:17 ]
- 大抵の企業でATOKなんてわざわざ入れてないのでおk
- 183 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 13:59:03 ]
- 世間一般の企業がどうとかは関係なくて、自分のところのデータ変換処理に必要なんです。
ATOKだと文脈を理解して適切な読み仮名に変換してくれるはずなので、それに期待してるのです。
- 184 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 14:04:21 ]
- 「詳細なテキストサービスのサポートをプログラムのすべてに拡張する」がONならOFFにしてみるとか?
これでうまくいっても、PGでの対応方法は知らないけど。
- 185 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 15:39:29 ]
- >>184
それはOFFになってましたね。 試しにONにしてみると、MSIMEでも逆変換できなくなってしまいました。。。 「詳細なテキストサービスをオフにする」のチェックも変えましたが、こちらは変化なしでした。 Immで始まるIME制御APIは自分が試した大部分でATOKとMSIMEの間で互換性がありました。 しかしIMEとは無関係のところからもってきた文を逆変換することに関してだけは互換性が無いようなのです。 ATOK12ではできたという話がネット上にありましたが、ATOK2006はその方法ではダメでした。 難しいですね。
- 186 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 16:34:41 ]
- コントロールの座標をクライアントから見たい座標で取得する方法でいいのないな?
今はコントロールとクライアントの二つをGetWindoxRectでスクリーン座標から強引に求めてるが どうも違う
- 187 名前:デフォルトの名無しさん [2009/06/20(土) 16:43:25 ]
- >>186
MapWindowPoints関数を使え。
- 188 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 16:59:52 ]
- ウェブのMSDNって「戻り値」の説明だけごそーり消えてるんだけどなんなんだあれ?
直す気ないのかな?
- 189 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 17:00:31 ]
- 関数とprintfとかとAPIはどっちが遅いの?
- 190 名前:デフォルトの名無しさん [2009/06/20(土) 17:01:21 ]
- >>181
ImmGetConversionList でいけるはず
- 191 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 17:26:14 ]
- >>190
IME2003以降では使えないけどな
- 192 名前:デフォルトの名無しさん [2009/06/20(土) 17:47:12 ]
- >>189
自分で調べろ
- 193 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 17:48:37 ]
- FF11 のいずれかを含むページは 10752 ページ中、 164 ページ見つかりました。
- 194 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 17:48:59 ]
- 誤爆した
- 195 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 18:01:34 ]
- >>189
OSで応答する分APIが遅い
- 196 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 18:52:31 ]
- >>187
有難うございます!!
- 197 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 18:54:46 ]
- >>195
は?
- 198 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 19:11:46 ]
- システムフックするソースとか見ると、DLL側で良く
#pragma data_seg(".ShareForHook") HHOOK MouseHook = NULL; #pragma data_seg() を眼にするんだが、何でこれをする意味が良く分からない。 単純にHHOOK MouseHook = NULL;じゃ駄目なの?
- 199 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 19:15:11 ]
- #pragma data_segってのはプロセス間での共用メモリスペースを作るオプションでな
その中で宣言された変数はどこのプロセスで変更しても全てのプロセスに伝わるわけだ 何で必要なのかはCallNextHookExの第一引数見れば分かる 2000以降は要らないんだっけかな
- 200 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 19:15:12 ]
- 理由もちゃんと書いてあるだろ
- 201 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 19:26:23 ]
- >>197
ライブラリの関数は同じ実行ファイル内にリンクされるのでコストは自分と定義した関数と同じ APIの場合は、IPCを通じてOS内部にある関数本体のアドレスに引数を渡して結果を受け取るためコスト増
- 202 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 19:31:04 ]
- ああこいつ馬鹿か
- 203 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 19:34:53 ]
- 素直に頭が悪くて理解できないと言えよw
- 204 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 19:36:31 ]
- printfもOSのAPI内部で呼ぶっつーの馬鹿
- 205 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 19:37:02 ]
- 自分で定義した関数で、想定されうるあらゆるデバイスに対して出力できる処理かいてるのか
- 206 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 19:38:39 ]
- >>199
有難う! MSDNでのSetWindowsHookEx関数では >グローバルフックは共有リソースであり と書いてあった 正直まだ解せない部分もあるけど、システムフックの最低限必要のマナーなのね
- 207 名前:199 mailto:sage [2009/06/20(土) 19:43:48 ]
- ああ、理解力なさそうだね
- 208 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 20:15:17 ]
- >>189=>>195=>>201=>>203
- 209 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 21:39:29 ]
- >>190
ImmGetConversionListを使う方法を教えていただき、どうもありがとうございました。 結論からすると、やはり逆変換はMSIME2002ではできて、ATOK2006ではできなかったです。 ソースコードは下記をそのまま使いました。 athomejp.com/goldfish/api/yomichange.asp ATOKの2006は鬼門バージョンなんですかねw
- 210 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 21:54:53 ]
- まぁ、そんなもんじゃね?
あとは、実際の動作をエミュレートするかだな。
- 211 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 21:56:13 ]
- プログラム書いていていつも思うのは
LeftとRightとかBeginとEndとか 長さが違うのが無性に腹立つんだが 欧米人には美的感覚ってものが無いのか?
- 212 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 22:02:25 ]
- >>211
まずプログラミング言語ありきってか
- 213 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 22:12:34 ]
- 外人さんのデモ見てると、プロポーショナルフォントだったりするしな・・・
- 214 名前:190 [2009/06/21(日) 00:06:52 ]
- >>209
2006ではだめですか。ATOK2005は確か出来たはずなんですが… 残念です。
- 215 名前:sage [2009/06/21(日) 01:02:46 ]
- 自分は漢字の読み仮名の取得には
IFELanguageを使ってるが。
|

|