- 1 名前:デフォルトの名無しさん [2007/04/18(水) 01:54:51 ]
- スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。 過去スレ、関連リンクは>>2-5くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版(msdn.microsoft.com/library/)の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
- 267 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 18:47:48 ]
- >>258
Enterキーを処理した後、EDIT本来のプロシージャに処理回してない?
- 268 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 18:53:30 ]
- >>267
エディットコントロールのプロシージャの最後は return CallWindowProc(DefInProc, hwnd, msg, wp, lp); にしてます。これをどうすればいいのでしょうか・・・ return 0;とかにしてもエディットコントロール自体が消えてしまいます;;
- 269 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:02:14 ]
- >>267
Enterキーの時だけ、プロシージャに処理を渡さないようにすればいい
- 270 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:02:28 ]
- >>268
>Enterキーを処理した後
- 271 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:07:28 ]
- SubclassProc(hwnd, msg, wparam, lparam)
{ switch(msg) { case WM_KEYDOWN: if(wparam == VK_RETURN) { (処理) return; // DefWindowProc()いらない } } } こういうことか?リターンキーの時だけ弾ければいいってこと?
- 272 名前:258 mailto:sage [2007/04/25(水) 19:07:29 ]
- プロシージャはこんな感じになってます。処理の後はreturn 0;にしてますが
やはり改行されてしまいます・・・ LRESULT CALLBACK InProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { switch(msg) { case WM_KEYDOWN: if(wp==VK_SHIFT){ shift_flag = 1; }else if (wp == VK_RETURN && shift_flag==0) { MessageBox(hwnd, "ENTER", "ENTER", MB_OK); }else if (wp == VK_RETURN && shift_flag==0) { MessageBox(hwnd, "Shift+ENTER", "Shift+ENTER", MB_OK); } return 0; case WM_KEYUP: if(wp==VK_SHIFT){ shift_flag = 0; } return 0; } return CallWindowProc(DefInProc , hwnd , msg , wp , lp); }
- 273 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:15:58 ]
- WM_CHAR
- 274 名前:258 mailto:sage [2007/04/25(水) 19:29:27 ]
- WM_CHARにしてみたら文字の入力すら出来なくなったのですが・・・;;
きっと基本的なことなのでしょうけど、何時間も止まってると泣きたくなってくる・・・
- 275 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:31:19 ]
- そりゃそうだよなぁ。
- 276 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:37:31 ]
- >>258
if文をよ〜く見直してみろEnterキー以外もトラップしてるぞ
- 277 名前:258 mailto:sage [2007/04/25(水) 19:45:58 ]
- >>276
Shiftの事でしょうか?Shift全部はずして、単純にif(wp==VK_RETRUN){}にしても やはり同じ結果になりました。これは一体何がどうあghwrへあぃtjr
- 278 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:47:44 ]
- >>277
トラップしないキーはreturn 0;しないでデフォルトプロシージャに渡すのだ。
- 279 名前:258 mailto:sage [2007/04/25(水) 19:54:15 ]
- >>278
こういう事でしょうか? LRESULT CALLBACK InProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { switch(msg) { case WM_KEYDOWN: if (wp == VK_RETURN) { MessageBox(hwnd, "ENTER", "ENTER", MB_OK); return 0; } return CallWindowProc(DefInProc , hwnd , msg , wp , lp); }
- 280 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:55:15 ]
- >>279
それをWM_CHARでやる
- 281 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 20:00:15 ]
- できました
みなさま本当にありがとうございました
- 282 名前:258 mailto:sage [2007/04/25(水) 20:02:42 ]
- いえ、出来てません。文字の入力すら出来ないのですが・・・
LRESULT CALLBACK InProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { switch(msg) { case WM_CHAR: if (wp == VK_RETURN) { MessageBox(hwnd, "ENTER", "ENTER", MB_OK); return 0; } return CallWindowProc(DefInProc , hwnd , msg , wp , lp); }
- 283 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 20:10:21 ]
- >>258
メッセージループのところにTranslateMessage(&msg);はあるか? // メッセージループ MSG msg; while(GetMessage(&msg, NULL, NULL, NULL)) { TranslateMessage(&msg); DispatchMessage(&msg); }
- 284 名前:258 mailto:sage [2007/04/25(水) 20:15:53 ]
- 出来ましたあああああああああ;;
caseの終わるところをreturn 0からbreak;に直したら出来ました;; WM_CHARで捕まえて、全部return0にしてたせいで入力されないようになってたみたいです。。。 ありがとうございました
- 285 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 20:25:41 ]
- >>279,282のプロシージャ
{ }の対応がおかしい気がするんだが・・・?
- 286 名前:デフォルトの名無しさん [2007/04/25(水) 21:28:59 ]
- このような関数で、ドライブごとまるまるコピーしたいのですが、
BOOL CopyDirectory(LPCTSTR From, LPCTSTR To) { SHFILEOPSTRUCT TSHFileOpStruct; ZeroMemory(&TSHFileOpStruct,sizeof(SHFILEOPSTRUCT)); MessageBox(NULL, From, To, MB_OK); //構造体の初期設定 TSHFileOpStruct.hwnd = NULL; // 親ウインドウのハンドル TSHFileOpStruct.wFunc = FO_COPY; // フラグ TSHFileOpStruct.pFrom = From + NULL+ NULL; // 対象元パス TSHFileOpStruct.pTo = To + NULL+ NULL; // 対象先パス TSHFileOpStruct.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR; //フラグ //実行する if(SHFileOperation(&TSHFileOpStruct) != 0){ return FALSE; } if(TSHFileOpStruct.fAnyOperationsAborted == TRUE){ return FALSE; } return TRUE; } CopyDirectory("H:\\test", "C:\\test") だと成功するのですが CopyDirectory("H:\\", "C:\\test") だと失敗します。 ドライブの中身をまるまるコピーすることはできないのでしょうか? 初歩的な質問かもしれませんが、よろしくお願い致します。
- 287 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 21:44:32 ]
- pFromはあくまでもファイル名を指定するためのバッファらしいので
"H:\\*"みたいにワイルドカードを使うってのはダメ?
- 288 名前:デフォルトの名無しさん [2007/04/25(水) 21:50:56 ]
- >>287
教えていただいた方法で解決できました! 結構長い間ひっかかっていたので、助かりました。 ありがとうございました。
- 289 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:40:16 ]
- GUIアプリからコンソール用のアプリを影で動かし(て、その結果をエディタに送り)たいんですけど
そういうAPIってありますか?
- 290 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:44:12 ]
- はぁ?
- 291 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:44:51 ]
- 無い
はい次
- 292 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:44:55 ]
- あります
- 293 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:51:38 ]
- ありますが、
はい次
- 294 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:52:22 ]
- APIに関係することか、わかりませんがお願いします。
自己解凍書式によくあるような > copy /b hoge.exe + datafile でつくった hoge.exe から datafile の中身を取る プログラムを作りたいのですがやり方を教えて頂けないでしょうか?
- 295 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:53:39 ]
- *** main(char**arg,int argl) ...................................................
- 296 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:59:30 ]
- >>294
「リソース」をキーワードに基本から勉強しなおしなさい
- 297 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:10:47 ]
- copyで連結したものをリソースとして扱えるか?
俺にはイメージヘッダからイメージサイズを見て、 それを元にdataの先頭領域を求める方法になる気がする。 違ったらすまん
- 298 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:13:51 ]
- copy /b hoge.exe + datafile + datafilesize
- 299 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:15:52 ]
- ぐぐってみたらこういう方法だそうです
プログラムに4バイトのリソースを埋め込む。 そのリソースを読み込んでその値だけ、読み飛ばして自分自身を解凍するプログラムを作る。 何らかの手段で4バイトのリソースに自己解凍プログラムのサイズを書き込む。 自己解凍プログラムの後ろに実際のデータを書き込む。
- 300 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:18:20 ]
- かなりコンパイラ依存な質問ですが・・・
FindNextFileがVisual C++ 6.0でちゃんと動くのにGCC(gcc version 3.4.5 (mingw special))でちゃんと動きませんorz www.uploda.net/cgi/uploader4/index.php?file_id=0000012569.zip test_findfile.c ソース test_findfile_gcc.exe GCCでコンパイルしたもの test_findfile_vc6.exe VC++6.0でコンパイルしたもの VC++6.0でコンパイルしたものは、ちゃんと2つ目以降に見つかったファイルを表示します。 しかしGCCでコンパイルしたものは最初の1つ目しか表示しません。 MSDN見ても解決方法わからないし・・・
- 301 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:24:41 ]
- >>289
名前なしパイプを使ってリダイレクト。 CreatePipe, DuplicateHandle, CreateProcess(STARTF_USESTDHANDLESがヒント), PeekNamedPipe, ReadFileなどの関数を使う。 待機関数を使ったプロセスの終了判定と、 PeekNamedPipeとReadFileの順序を巧く管理しないと止まるので注意。 じゃぁ、約束のおっぱいをうpしてね
- 302 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:26:03 ]
- (・) (・)
- 303 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:29:15 ]
- D / ∩___∩ \_WW/
・ ≪ | ノ ヽ ≫ D ≪ V ≪ / ● ● | ≫ ・ ≪ ・ ≪ | ///( _●_)//ミ ≫V ≪ D ≪ 彡、 |∪| 、`\ ≫ ・ ≪ ! ≪ / \ ヽノ /_> / ≫ D ≪ ≪ \| ・ ・ / / ≫ ! ≪ MMM\ | / ̄ /MMM\ | /\ \ | / ) ) ∪ ( \ \_)
- 304 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:30:10 ]
- >>300
ワイルドカード絡みなのかな? 下のコードをそれぞれのコンパイラでコンパイルして 「ちゃんと動かない」ときの引数を与えて比較してみればおk #include <stdio.h> int main(int argc, char *argv[]) { int i; for(i=1;i<argc;i++) printf("argv[%d]=%s\n", i, argv[i]); return 0; }
- 305 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:31:01 ]
- ところでDVDってドメスティックバイオレンスオブダイナミカルなの?
- 306 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:32:05 ]
- >>300
どのディレクトリに対して実行しても結果は同じですか?
- 307 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:35:58 ]
- >>300
OSは?
- 308 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:36:35 ]
- >>300
c:\directory\* c:\\directory\\* じゃねーの?
- 309 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:38:01 ]
- >>300
ワイルドカードが展開されてるんだろ
- 310 名前:デフォルトの名無しさん [2007/04/25(水) 23:41:24 ]
- 見た感じFindNextFileが必ずゼロを返してるような動き。
一個だけ正しく見つけてあとはサヨウナラだな。
- 311 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:43:54 ]
- FindFirstFile に渡される引数の内容(argv[1]) が違うから
表示させてみれば疑問は解決するはず
- 312 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:46:35 ]
- そこで、ダブルクォーテーションですよ
- 313 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 00:24:23 ]
- >>300
GCCに付属してるCRT_noglob.oをリンクすると解決するお 海外での似た質問と解凍: www.cygwin.com/ml/cygwin/1998-11/msg00165.html www.cygwin.com/ml/cygwin/1998-11/msg00235.html
- 314 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 00:48:10 ]
- ぼ・・・僕ハッカー
- 315 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 09:54:11 ]
- WTLでCToolBarCtrlを使ってツールバーを作っています。
manifestを指定してXPスタイルにしているのですが、 そうするとアイコンサイズと比べ、ボタンサイズが大きくなりすぎてしまいます。 どうしても小さくしたいのですが、SetButtonSizeを指定しても無視されてしまい 自動でサイズが決定されてしまいます。 ボタンのサイズを小さくしたいのですが、どうすればできますか。
- 316 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:07:41 ]
- ビットマップを印刷する処理でカラープリンタに出力するとおk、なんですが、
白黒プリンタに印刷すると真っ黒画面(プリンタドライバのメモリ不足でよくおきるヤシ)となります。 Win32APIで、印刷時にビットマップを描くとき、白黒プリンタを意識する指定ってありましたっけ?
- 317 名前:デフォルトの名無しさん [2007/04/26(木) 10:09:59 ]
- ShellExecuteで起動したソフトが起動しきったかどうかを確認する方法を教えてください
- 318 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:14:26 ]
- 起動しきった、の定義は?
メッセージループが回りだしたでいいのかな
- 319 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:28:17 ]
- CreateProcessのほうがいいかもね
- 320 名前:デフォルトの名無しさん [2007/04/26(木) 10:34:52 ]
- >>318
起動してから表示されるまでに時間がかかるソフトがあるので 画面が表示されたらと思っていました。 >>319 ShellExecuteよりShellExecuteExのインスタンスハンドルで何とかなりそうでしょうか?
- 321 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:39:08 ]
- 316もヨロ
- 322 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:43:13 ]
- >>317
FindWindow
- 323 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:44:44 ]
- >>320
ShellExecuteはシェルに命令投げるだけなので実際の起動処理は全部シェルがやる。 だからShellExecuteで起動したプロセスの処理を監視するならフックとかの回り道が必要になるし、 CreateProcessに比べて面倒極まりないから>>319の言うとおり 起動したプロセスの監視をしたいならCreateProcessがよろし。
- 324 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:48:44 ]
- >>316
正解なのかどうなのかわからんが… printerなDCに直接 StretchBlt したときに真っ黒出力されたことがあった。 printer と同じ解像度のメモリDCに一旦StretchBlt して、 そのメモリDCをprinterなDCに BitBlt で回避できた
- 325 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:52:13 ]
- >>317
ShellExecuteExでfMaskにSEE_MASK_NOCLOSEPROCESSを指定すると 起動したプロセスのハンドルがhProcessに返されるので WaitForInputIdleを呼べばいいかと。
- 326 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:55:40 ]
- >>316
GetDeviceCapsで出力APIがサポートされているか調べるとか・・・かな
- 327 名前:デフォルトの名無しさん [2007/04/26(木) 10:57:36 ]
- >>322
予めタイトルとクラス名がわかってればいいんですけどね >>323 CreateProcessですとPROCESS_INFORMATION構造体のhProcessハンドルで 状態をみるとおもうのですが、どのAPIで状態を確認することができるのでしょうか?
- 328 名前:316 mailto:sage [2007/04/26(木) 10:59:45 ]
- サンクス>>324 >>326
そう、その辺りの話ですよね。 自分も、StrechBlt → BitBlt → StretchDrawDIB と変えてきて、 あーこれで解決したーと思ってたんですが、 カラービデオプリンターはおk、白黒ビデオプリンターで真っ黒、見たいな現象。 >GetDeviceCapsで出力APIがサポートされているか調べるとか・・・かな kwsk StrechDrawDIBが動作しないとか???
- 329 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 11:02:13 ]
- 白がちゃんとした白じゃないから黒くなるのでは
StrechBltMode変えたら
- 330 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 11:05:53 ]
- >>328
GetDeviceCapsでRASTERCAPS調べて RC_STRETCHBLTビットが立ってれば、 StreathBltを使って良いとか、そういう話し あと、StretchDrawDIBってMSDNにはないけど・・・? ググっても、自作っぽい関数にしか引っかからないぞw
- 331 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 11:24:47 ]
- >>327
>>325
- 332 名前:316 mailto:sage [2007/04/26(木) 11:26:43 ]
- ラジャー>>329
やってみます。あ、でもプリンタ使えるの昼から。 ゴメンナサイ>>330 実体はこれです。 ↓ procedure TBitmapPrinter.StretchDrawDIB(Canvas: TCanvas; r: TRect); var OldMode: Integer; // StretchMode のセーブ begin OldMode := SetStretchBltMode(Canvas.Handle, COLORONCOLOR); StretchDIBits(Canvas.Handle, r.Left, r.Top, r.Right - r.Left, r.Bottom - r.Top, 0, 0, BitmapInfo^.bmiHeader.biWidth, BitmapInfo^.bmiHeader.biHeight, ImagePtr, BitmapInfo^, DIB_RGB_COLORS, SRCCOPY); SetStretchBltMode(Canvas.Handle, OldMode); end;
- 333 名前:デフォルトの名無しさん [2007/04/26(木) 11:29:35 ]
- >>331
すみません、見落としてました・・・ >>325 ありがとうございます。 それでちゃんとできました。
- 334 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 12:16:27 ]
- >>333
WaitForInputIdleはコンソール不可なので注意ね。
- 335 名前:316 mailto:sage [2007/04/26(木) 12:21:16 ]
- つまり、
>OldMode := SetStretchBltMode(Canvas.Handle, COLORONCOLOR); を、 COLONCOLORから変えればよいんだ。 BLACKONWHITEとWHITEONBLACKって何で2つもあるよ。。。
- 336 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 12:25:35 ]
- >>335
>BLACKONWHITEとWHITEONBLACKって何で2つもあるよ。。。 ANDとORの違い。
- 337 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 12:26:51 ]
- >ANDとORの違い。
普通の印刷ではどちらを使うんですか?
- 338 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 12:32:03 ]
- >>337
普通の印刷はどうかしりませんが、 BLACKONWHITEは 0 & 1 = 0で黒が残る WHITEONBLACKは 0 | 1 = 1で白が残る ただそれだけ。
- 339 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 12:37:49 ]
- まあ両方やってみればわかる
モノクロビットマップにStrechBltして画面表示してみるのもいいかもな
- 340 名前:デフォルトの名無しさん [2007/04/26(木) 13:21:11 ]
- >>334
了解しました! ありがとうございます!!
- 341 名前:デフォルトの名無しさん [2007/04/26(木) 15:39:58 ]
- あるウィンドウを親として、新たに作った子ウィンドウを貼り付けたい(親側をドラッグすると、子ウィンドウもそれに追随するような)のですが、どのように実装したらよいかアドバイスいただけませんでしょうか。
よろしくお願いいたします。
- 342 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 15:41:52 ]
- CreateWindowでWS_CHILD
- 343 名前:316 mailto:sage [2007/04/26(木) 16:22:55 ]
- SetStretchBltModeは関係無いみたいです。
真っ黒に出たり、ちゃんと出たり、不安定。
- 344 名前:316 mailto:sage [2007/04/26(木) 16:53:35 ]
- 連続印刷した場合に、真っ黒になります。
- 345 名前:316 mailto:sage [2007/04/26(木) 16:57:43 ]
- 連続投稿すみません。
自アプリが印刷した結果がWinのスプールにまだ残っているかどうか、判断する方法はありますか?
- 346 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 17:18:50 ]
- 具体的にそうなるコードを出してみては
そもそも真っ黒になるのはプログラムが悪いんだから
- 347 名前:316 mailto:sage [2007/04/26(木) 17:30:29 ]
- 自己解決しました、お騒がせしてすみません。
- 348 名前:316 mailto:sage [2007/04/26(木) 18:30:21 ]
- 347は偽者です。
コードは332です。
- 349 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 18:46:54 ]
- >>348
>>332には、印刷時のページ更新とかないだろ
- 350 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 19:51:02 ]
- StartPageしたあとに毎回SetStretchBltModeしてない
とかいう落ちか?
- 351 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 22:30:22 ]
- いままでの流れ。
>>あーや ・質問 ビットマップを印刷する処理で カラープリンタ→出力おk 白黒プリンタ→真っ黒画面 なんで? >>324 → あーや プリンタのDCに直接StretchBltした時、真っ黒出力経験あり。 キャッシュDCを作成してStretchBlt→BitBltの提案。 >>326 → あーや GetDeviceCapsでプリンタ能力も調べろと提案。 >>あーや >>324の方法でカラーはおk。白黒プリンターはやっぱりダメ。 >>326のいうGetDeviceCapsに初耳。 >>329 → あーや 白≒黒より、StrechBltModeの設定を推測。 >>330 → あーや GetDeviceCapsのRC_STRETCHBLTフラグの意味を教える。
- 352 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 22:30:53 ]
- (つづき)
>>あーや → 329 昼飯はトンカツ定食にしようか悩みつつ返信。 >>あーや → 330 GetDeviceCapsを理解。 お昼だけにソースをさらしてみる。 >>あーや SetStretchBltModeのBLACKONWHITEとWHITEONBLACK気付く。 なお、ここで返信した336,338,339は、実は奇遇にも同じ町内。 >>あーや とりあえず、カラープリンタ、白黒プリンタ出力おkっぽいが、 連続印刷した場合、白黒プリンタがやっぱりダメ。 なぜか、StrechBltModeは関係ないと断定。 そして、あーやの興味はスプールへ・・・ >>あーや → 347 少しカチンと来る。 >>349-350 解答発表?
- 353 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 01:55:35 ]
- ダイアログボックスを作って、初期のフォーカスをダイアログボックス内のエディットコントロールに
SetForcusで配置したいのですが、ダイアログボックス内のエディットコントロールのハンドルが 分からないので出来ません。というよりも、ダイアログボックス内のウィンドウにはどのように ハンドルをつければいいのでしょうか?
- 354 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 02:14:25 ]
- GetDlgItem
- 355 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 02:21:49 ]
- ダイアログベースでBS_DEFPUSHBUTTONを指定すると
「Enter」を押した時、ボタンを押下できるけど普通にリソースを 使わず(CreateWindow等)で作成したボタンに対して「Enter」は反応を 示さないんだけど。これはどうやって解決すればいいんでしょうか? 因みに「Enter」に反応するのはIDOKでそれ使ってもいいんですが、 できれば自分が指定したコントロールIDに変更できればいいなと思って 探してDM_SETDEFIDなるものを発見してSendMessage使って試したんだけど やっぱりうまくいかなかった。これはダイアログにしか通用しないのかな。 因みにSendMessageはこんな感じ(WM_CREATE内で使ってる) SendMessage(hWnd, DM_SETDEFID, (WPARAM)ID_CONTROL, 0L);
- 356 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 03:20:26 ]
- >>354
ありがとうございました。無事フォーカス設定することができました。 しかし、エディットコントロールにフォーカスを持っていったら何故か ボタンをクリックしても動作しないようになりました(Enterキーでは動作する)。 フォーカス外すと普通にボタンの機能は復活します。これは何が原因なのでしょうか?
- 357 名前:デフォルトの名無しさん [2007/04/27(金) 08:01:56 ]
- 付箋紙ソフトのように、たくさんのウィンドウを表示してもタスクバーに何も表示されないようにするには
どうしたらいいのでしょうか?
- 358 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 08:03:22 ]
- >>356
Enterキー以外の処理(else側)はスルーしてるんじゃないの?
- 359 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 08:05:06 ]
- >>357
いろいろ手法はあるけど? 統括管理ソフトを、時計横のタスクバーに駐在させるとか・・・ 想定するターゲットを詳しく
- 360 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 08:07:38 ]
- >>357
っ不可視の親Window っWS_POPUP
- 361 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 08:12:02 ]
- >>359ー360
試してみます!
- 362 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 08:29:07 ]
- >>355
IsDialogMessageは?
- 363 名前:355 mailto:sage [2007/04/27(金) 12:23:56 ]
- >>362
ダイアログでの作成じゃない場合(メインウィンドウ)の 時どうやってダイアログと同じように実現すればいいのかを知りたい。
- 364 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 12:41:48 ]
- ウィンドウプロシージャでEnterキーをトラップすりゃいいんじゃねぇの?
- 365 名前:355 mailto:sage [2007/04/27(金) 12:43:36 ]
- やっぱそれしかないのかな。
IDOKはデフォルトでEnter拾ってくるから そのIDOKの設定を別IDに変更できるんじゃないかと思ってたんだが
- 366 名前:355 mailto:sage [2007/04/27(金) 12:44:47 ]
- 因みにDM_GETDEFIDやDM_GETDEFIDはダイアログプロシージャにしか
意味無いんだよね?普通にメインウィンドウでやっても何の効果もなかったから
- 367 名前:デフォルトの名無しさん [2007/04/27(金) 14:03:22 ]
- 342さんレスありがとうございます。
>342 CreateWindowでWS_CHILD 試してみたんですが、うまくいかず色々調べていたら、 親のウィンドウの拡張アトリビュートに「WS_EX_LAYERED」が立ってました、 このフラグを消すと正しく動くことからこのフラグが問題かと思うのですが、 「WS_EX_LAYERED」が立ってるウィンドウに対し「WS_CHILD」のような子ウィンドウを作ることは出来ませんでしょうか 重ね重ね申し訳ございませんが、よろしくお願いいたします。
|

|