- 1 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 02:40:03 ]
- スレ立てるまでもない、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 【前スレ】 61 ttp://pc11.2ch.net/test/read.cgi/tech/1199514664/
- 520 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:51:37 ]
- >>518
このスレだからやるんじゃないか 他所でやられるほうがウザい
- 521 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:56:37 ]
- >>518
大して難しい話でもないだろ charだと一文字1バイト、TCHARだと一文字2バイトってだけの話じゃないか
- 522 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:05:25 ]
- >>519
BCCでも、Win32 APIを直接使うなら関係ある話だろ?
- 523 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:07:58 ]
- >>521
なにいってんだ? TCHARは1バイトかもしんないぞ。
- 524 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:16:39 ]
- テーチャラは、チャラー型かヲチャラーテー型の切り替え用マクーロだろ
- 525 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:17:20 ]
- てーちゃらてーちゃら
- 526 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:23:40 ]
- ブチャラーテイに見えた
- 527 名前:デフォルトの名無しさん [2008/02/17(日) 16:37:35 ]
- 質問です。
タイトルバー以外のところをドラッグしてウィンドウを動かすために、WM_NCHITTEST で、 return DefWindowProc() == HTCLOSE ? HTCLOSE : HTCAPTION; ってやってるウィンドウで、ドラッグし終わったときを捉えたいのだけどどのイベントが飛んでくるのか判りません。 WM_LBUTTONUP と WM_NCLBUTTONUP かなーとか思って捕捉のためのイベントハンドラを作ったのだけど、 捕捉できず、Spy++ で何が飛んでくるのか確かめようと思ったらシステム全体が落ちてしまいます。 どなたか教えてください。 開発環境は VC2008EE + SDK + ATL/WTL で、VS2005proの include ディレクトリも include しています。
- 528 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:59:37 ]
- >>527
WM_MOVEじゃダメ?
- 529 名前:デフォルトの名無しさん [2008/02/17(日) 18:06:57 ]
- CoCreateInstance関数がちゃんと動いてくれません><
どうしてか理由が分からないです。 error C2115: 'function' : 互換性のない型が含まれています。 warning C4024: 'CoCreateInstance' : の型が 1 の仮引数および実引数と異なります。 error C2115: 'function' : 互換性のない型が含まれています。 warning C4024: 'CoCreateInstance' : の型が 4 の仮引数および実引数と異なります。 となります。 #include <windows.h> #include <mstask.h> HRESULT hr ITaskScheduler *pITS; hr = CoCreateInstance(CLSID_CTaskScheduler, NULL, CLSCTX_INPROC_SERVER, IID_ITaskScheduler, (void **) &pITS); どこかおかしいところがありますか?
- 530 名前:デフォルトの名無しさん [2008/02/17(日) 18:07:36 ]
- CoCreateInstanceの前に
CoInitialize(NULL); があります。忘れました><
- 531 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:08:13 ]
- WM_EXITSIZEMOVEとか?
- 532 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:08:50 ]
- >>529
CとC++の違い
- 533 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:12:48 ]
- >>529
まずは、REFCLSIDとREFIIDの定義確認。
- 534 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:19:00 ]
- >>529
CTaskScheuler 用のヘッダファイルインクルードして無いじゃん。
- 535 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:28:46 ]
- >>527
Spy++使わなくても自分のWndProcなんだから、どんなイベントが飛んでくるか分かるっしょ。 DebugConsoleに吐きまくれ。
- 536 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:59:34 ]
- 拡張子をcppに変えればいいだけなのにね
- 537 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 20:51:08 ]
- ここは敢えて ->lpVtbl->
- 538 名前:527 [2008/02/17(日) 21:49:19 ]
- WM_EXITSIZEMOVE でいけましたー。ありがとうございました。
ところで、UINT uMsg の値から WM_〜 とかに変換してくれるライブラリとかありませんか? 変換がしんどかったのでw
- 539 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:59:55 ]
- 変換も何もそのまんまだろ
- 540 名前:デフォルトの名無しさん [2008/02/17(日) 22:03:55 ]
- あ、欲しいのは文字列です
- 541 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:05:53 ]
- WM_ のあるヘッダからテーブルを生成するプログラムを書いた気がする。
- 542 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:13:08 ]
- 文字列にしたいってことでしょ
- 543 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:15:16 ]
- だから文字列テーブルを作るんだよ
- 544 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:37:50 ]
- ラップされて、電子レンジに入れられてしまった子猫の事かと思ってたんだが違ったのか・・・。
- 545 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:40:28 ]
- >>544
まだその話してたんかいw
- 546 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 23:36:41 ]
- VC++のデバッガならウォッチ式にuMsg,wmとか書いてWM_が表示できた気がする
- 547 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 00:16:11 ]
- >>546
試してみたらほんとだった。 素直に感謝します。
- 548 名前:デフォルトの名無しさん [2008/02/18(月) 00:21:23 ]
- FindItem関連で質問があります。
仮想リストビューである文字列と文字列が一致した場合、アイテムを削除する処理を作ろうと思ってます。 lvfi.flags = LVFI_STRING; lvfi.psz = "ab"; int nItem = ListView_FindItem(cListView.hListReserve, -1, &lvfi); ListView_DeleteItem(cListView.hListReserve, nItem); 現在、一致する場合もしない場合もnItemには0しか戻ってきません。 仮想リストビューでは、ListView_FindItemは使えないのでしょうか? 回答よろしくお願いします。 環境はVC.NET + SDKです
- 549 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 00:26:01 ]
- コントロール側がデータを持っていたら、そもそも仮想の意味がないだろ。
- 550 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 01:33:20 ]
- アプリケーションを作成したのですが、
CPU使用率が高いです Orz どこが悪いのでしょうか?
- 551 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 01:46:25 ]
- お前の脳みそ
- 552 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 07:49:23 ]
- >>550
ループしてる場所にSleepを入れる
- 553 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 11:07:41 ]
- なあなあ
CreateWindowExした直後にSetClipboardViewerするとウィンドウ無効で失敗するんだけどなんで? もちろんCreateWindowExは成功してる ちなみに CreateWindowExとSetClipboardViewerの間にSendMessage(hWnd,WM_NULL,0,0);挟んだら動いた MSDNにも何も書いてないんだけど… ttp://msdn2.microsoft.com/en-us/library/ms649052.aspx
- 554 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 11:11:00 ]
- >>553
UpdateWindowは?
- 555 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 12:23:23 ]
- WM_CREATEくるまで駄目とか。
- 556 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 13:29:54 ]
- いや、CreateWindowExから戻ったときは、
既にWM_CREATEからの応答も帰ってきた後。
- 557 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 13:36:57 ]
- メッセージループまで行ってないうちにってことか。
SendMessage挟んだら動いたのはたまたまかもなあ
- 558 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 13:49:16 ]
- >>555
CreateWindowEx→WindowProc(WM_CREATE)→SetClipboardViewerになるからそれはない WM_CREATE内でSetClipboardViewer呼んでるってんなら話は別だが
- 559 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 15:19:47 ]
- WM_CHANGECBCHAINやWM_DRAWCLIPBOARDを正しく処理してないんじゃないの?
ここ見る限りだとSetClipboardViewerの返値にSendMessageしてるみたいだけど。 ttp://msdn2.microsoft.com/en-us/library/ms649016.aspx
- 560 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 15:23:15 ]
- 質問です
TextOut等で描画する文字の下にドロップシャドウを描画したいのですが、何か良い方法はありますか? やはり、自分でシャドウを作らないといけないでしょうか? 宜しくお願いします
- 561 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 15:25:26 ]
- 数ドットほど右下にTextOutで灰色か黒の文字を描いておけば影に見えないこともない
- 562 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 15:27:47 ]
- DrawShadowText
- 563 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 16:12:50 ]
- VistaならDrawThemeTextにあった気がする
- 564 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 16:48:01 ]
- スレ違いかな?
縁取り文字の一番気持ちいい実装ってどんなの? 8方向に1pxずつずらした白文字、最後にまんなかに黒文字ってやってるんだけど ちょっと馬鹿っぽい。。
- 565 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 17:21:39 ]
- >>561
>>562 >>563 それらを参考にもう一度調べてみますね 情報ありがとうございました
- 566 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 17:35:47 ]
- >>564
BeginPath→DrawText→EndPath→PathToRegion→FrameRgn
- 567 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:01:37 ]
- PathとかRegionだと12ptくらいの小さい文字はつぶれるな
- 568 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:44:41 ]
- >>564
あらかじめ表示させたいフォントをビットマプとして保存しといて BitBlt・・ あんま変なAPI使うと古いOSで動かなかったりするんで。
- 569 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:54:14 ]
- 便乗で質問だけど、このスレ的にはどのOSから切り捨てるのが主流?
さすがにXPより前はサポートしません とかはないだろうけど 9x系とNT4.0はもういいかなとか個人的には思ってる
- 570 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:57:47 ]
- Vista x64より前
- 571 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:58:28 ]
- 9x捨てるならウニコードにしたほうがパフォーマンスはよくなるのかな?
- 572 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 22:02:41 ]
- 2000から切り捨てるとかなり楽
- 573 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 22:29:43 ]
- 俺は2000以降をサポるようにしてる。WINVERの指定も0x0500。
なぜなら、俺の環境では2000が現役だから・・・
- 574 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 22:30:54 ]
- サボると読んで混乱するおいら。
- 575 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 22:33:44 ]
- 古いWindowsでも動かしたいと思うときで、
IE4.01以上など各種アップデートを施したWindows 95/NT4ということにしている。
- 576 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 22:40:13 ]
- 2000より前なんて俺の中では存在しない
98以前はネットに繋ぐなカス
- 577 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 22:42:10 ]
- コンパイラはまさかVC6?
- 578 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 22:53:08 ]
- >>571
実測して差が出るかどうかはわからないけど、理屈の上では変換のコストがなくなるので若干良くなる wchar_tにするとboostがイミフなエラー出したりすることもあるけど。。。
- 579 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 23:39:35 ]
- W<->A変換速度についてはダンゴさんの意見を聞きたいところだ
- 580 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 02:52:14 ]
- >>577
VC6現役で使ってるが何か?
- 581 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 02:54:44 ]
- VS2005 で素直にダイアログのフォントを使っています。
9x は切り捨て
- 582 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 03:01:39 ]
- 暮れに突如DLLラッパー書きたくなって2008Express落としたが重すぎ。
VC6探し出してインスコした。 これアカデミック版なんだよなー、歳は食いたくねぇ。
- 583 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 09:11:20 ]
- msdn2.microsoft.com/en-us/library/
しばらく前から検索すると503になるんだが、俺だけか? 左のツリーからは目的のページには行けるんだが、検索できないと面倒でしかたない。
- 584 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 10:31:57 ]
- GetGlyphOutlineの使い方に関する質問です
www7a.biglobe.ne.jp/~lshen/EternalWindows/Graphics/Bitmap/Bitmap14.html ここのサイトのソースで アンチエイリアスを施すフォントにFW_BOLDを指定すると、 このソースではlp[0] = (GetBValue(cr))で例外が発生して、 アプリケーションが落ちてしまいます このソースに手を加えなければ正常に動く様です どの辺りが悪いのでしょうか? よろしくお願いします。
- 585 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 10:39:30 ]
- CreateFont(32, 0, 0, 0, 0,
を CreateFont(32, 0, 0, 0, FW_BOLD, にしたってこと? 落ちないけどなー
- 586 名前:デフォルトの名無しさん [2008/02/19(火) 10:44:04 ]
- 教えてください
GetDesktopWindowでハンドルとって GetDCで デスクトップの画像 取得しているんですが ログイン画面を取るときには たしかモニターの選択か なにかしければならないんですよね? 昔何かで観て、必要になったんだけど 見つからない・・・・ よろしくお願いします
- 587 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 11:46:12 ]
- ウィンドウステーション?
- 588 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 11:58:30 ]
- ウィンドウステーションだったかデスクトップだったか
ログイン画面撮るのは難しそうな気もするけど頑張って下さい
- 589 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 12:02:15 ]
- >>586
スレ違いの回答だけど ログイン画面のキャプチャが欲しいだけなら、VirtualPCとかでOS立ち上げれば良い
- 590 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 13:02:05 ]
- >>585
はい、その通りです 落ちませんか... もう一度、一から確認し直してみます ありがとうございました
- 591 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 14:07:52 ]
- エディットコントロールのカーソルが何行目かしりたいのですが
どうすればよいでしょうか? あと今表示されている一番上と一番下が何行目か知るには どうすればよいでしょうか?
- 592 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 14:50:25 ]
- >>586>>588
XPまでならサービスで作っておけばできなくもない。 しかしVistaから実現は厳しくなった。
- 593 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 14:53:11 ]
- >>591
カーソル位置は、EM_LINEFROMCHAR 表示のほうは、EM_CHARFROMPOS とかでどうかなあ
- 594 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 14:55:06 ]
- あ、表示は行位置か。EM_CHARFROMPOS と EM_LINEFROMCHAR の組み合わせだな。
- 595 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 17:20:22 ]
- c:\foo.txt, c:\bar.bmpといった存在するファイルのパスを渡すと
Explorerで表示されるアイコンと同じイメージを取得できる関数ってなんですか?
- 596 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 17:30:36 ]
- SHGetFileInfo でした
- 597 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 17:57:58 ]
- >>591
EM_GETFIRSTVISIBLELINE等々 っていうか、ヘルプのEM_で始まるメッセージは全部チェックしる
- 598 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 21:52:56 ]
- >>592
セッション0、か
- 599 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:00:33 ]
- 質問です
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win13.html ここのサンプルプログラムをVC++2005EEでコンパイルしてみたところ MessageBoxを呼び出すところで error C2065: 'LlpcsWnd' : 定義されていない識別子です といわれコンパイルできません どうも宣言した変数がlpcsWndなのにLlpcsWndと認識されてしまってるみたいです ためしにTEXTマクロの中身以外のlpcsWndをLlpcsWndと修正してみたところ コンパイルに成功し、実行できたのですがこんな修正をせずとも コンパイルを成功させ実行させる方法とかはありませんか? ひょっとしたらスレ違いかもしれませんがよろしくおねがいします
- 600 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:04:23 ]
- >>599
>>463
- 601 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:05:50 ]
- >>599
>TEXT(lpcsWnd->lpszName) TEXT( ) いらないよそこ
- 602 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:06:12 ]
- >>599
ShiftJIS でおk ってかサイトの方が TEXT マクロの使い方を間違ってる
- 603 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:12:59 ]
- >>600-602
早い返答ありがとうございます TEXTマクロの使い方が間違っている・・・ですか まずはネットで大まかにやった後本を買って足りないところを補おうと考えていたのですが やっぱり一冊は買っておくべきですね・・・
- 604 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:29:54 ]
- こういうサイトに載ってるコードって、無意識的に正しいと思っちゃうよね。
- 605 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:52:14 ]
- その考えは危険
- 606 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 03:12:04 ]
- MSのサンプルでも偶に間違ってるしな
- 607 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 03:12:59 ]
- モーダルダイアログのプロシージャ内で、
親ウインドウのハンドル(DialogBoxのhWndParentに渡したハンドル)を知るにはどうしたらいいですか? GetParentとかGetAncestorとかGetWindowとか試したんですが、どれも違うようです。
- 608 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 03:27:44 ]
- GetWindowLongPtr()
- 609 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 10:01:25 ]
- >>604
まあいくらなんでも、実際にコンパイル、実行してると思うわな
- 610 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 10:14:53 ]
- >>587,588
徹夜明けで返事が遅れてしまいました ヒント頂いてありがとうございます。 これからがんばってみます
- 611 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 10:47:09 ]
- >>606
ttp://watch.impress.co.jp/game%2Fdocs/20070927/wv.htm この記事おもいだした
- 612 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 12:25:40 ]
- >>609
tchar の型によっては全く問題なくコンパイルできる
- 613 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 12:25:54 ]
- サンプルコードはとりあえずAPIが正常終了返す条件を教えてもらう程度にしか見ないほうがいいよな。
- 614 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 12:31:53 ]
- >>612
あーそっか。
- 615 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 14:35:06 ]
- C言語を初めて覚えるのに「猫でも」で痛い目を見たから
どこのサンプルでも一行ずつチェックして確かめてるわ。
- 616 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 16:34:14 ]
- ある文字列stringを描画したときに一定の幅にstringの何文字目まで収まるかを知りたいんだけど、
プロポーショナルフォントも考慮した場合GetTextExtentPoint32()あたりで1文字ずつ のばしていくしか方法無いかな? 要はテキストの折り返し処理をしたいんだけど、↑の方法だと行数が多いときに遅くなっちゃって。
- 617 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 16:43:26 ]
- 無いと思う
- 618 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 16:45:52 ]
- GetTextExtentExPointってのはどう?
- 619 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 16:48:16 ]
- >>616
>ある文字列stringを描画したときに一定の幅にstringの何文字目まで収まるかを知りたいんだけど DrawTextEx を DT_SINGLELINE で呼び出して、DRAWTEXTPARAMSのuiLengthDrawnを見る。
- 620 名前:616 mailto:sage [2008/02/20(水) 17:28:18 ]
- GetTextExtentExPointとDrawTextExググってみた感じどっちでもいけそうだな。
つか、レス早すぎだろwその知識はうらやましいわ。 ホントありがとう。
|

|