Win32API質問箱 Build124
■ このスレッドは過去ログ倉庫に格納されています
Win32APIについての質問はこちらへどうぞ。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。 英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで ■過去スレ Win32API質問箱 Build123 http://mevius.2ch.net/test/read.cgi/tech/1475897582/ Win32API質問箱 Build122 http://echo.2ch.net/test/read.cgi/tech/1451988219/ Win32API質問箱 Build121 http://echo.2ch.net/test/read.cgi/tech/1438695290/ Win32API質問箱 Build120 http://echo.2ch.net/test/read.cgi/tech/1428570962/ ■関連スレ Visual Studio 2017 Part4 http://mevius.2ch.net/test/read.cgi/tech/1509244956/ 【C++】 DirectX初心者質問スレ Part40 【C】 http://mevius.2ch.net/test/read.cgi/tech/1474782237/ >>522 でもなこのレベルだとstrcpyすらできずに詰むぞw >>527 私なら(char *) にキャストしてしまいますね…これは悪手ですが 解決しました!こうですね 「 TCHAR p[MAX_LENGTH] = TEXT("hello"); TextOut(hdc, 10, 10, p, lstrlen(p)); lstrcpy(p, TEXT("good morning") ); TextOut(hdc, 30, 30, p, lstrlen(p)); 」 じぶん "lstrcpy" の存在を知りませんでした。 買ってたCQ出版社の本が2001年の本で古くって、 それで、ここら辺の話題が見当たらなくって、地元書店にWin32APIの本が無くって、 困ってました。月曜日に、銀行からカネを引き出して、都会の本屋に買い物に行こうかと思ってたところです。 質問に回答してくださった皆様、ありがとうございます。 >>527 中身を直接書き換えないならLPCTSTRで十分 LPCTSTR p = TEXT("hello"); p = TEXT("good morning"); >>533 LPTSTRなら可能だけどLPCTSTRだと無理じゃないかな >>513 TextOutA使え お前にTextOut/TextOutWはまだ早い >>534 無理と決め付ける前に、まずは試してみるべきじゃないかな。 >>507 やっぱり自前ですか。 ベースにコモンコントロールのタブコントロール使ってるかと思ったら どのブラウザも完全にオリジナルのタブコントロールを作ってる みたいなんですよね。 これだけで一仕事だ、せめて手を抜く方法が無いものか。 コモンコントロールでつくりゃいい 何も真似することないでしょ >>508 レスをつけてたここの住人はある意味、意地悪だなw 508よ、VS2017とか使ってるなら、プロジェクトのプロパティから、 構成プロパティ -> C/C++ -> 言語 の画面に、準拠モードという項目があるので、準拠モードをオフにしてみろ。 コンパイラが悪さしているだけだw たとえば、準拠モードONだとこのコードは、こんなエラーになる。オフなら無事コンパイルできる。 #include <stdio.h> int main(){ char *p = "hoge\n"; printf(p); return 0; } 1>------ ビルド開始: プロジェクト: test0001, 構成: Debug Win32 ------ 1>test0001.cpp 1>d:\test0001\test0001\test0001.cpp(3): error C2440: '初期化中': 'const char [6]' から 'char *' に変換できません。 1>d:\test0001\test0001\test0001.cpp(3): note: 文字列リテラルからの変換では const 修飾子が失われます (/Zc:strictStrings を参照) 1>プロジェクト "test0001.vcxproj" のビルドが終了しました -- 失敗。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== マルチバイト文字の設定しろって書き忘れた。 構成プロパティ -> 全般 -> 文字セット マルチバイト文字セットを使用する の項目をセットしておけ。 古い本ベースで作るならそっちで十分だ。 慣れて来たらunicode文字セットにしてwchar_tとか使えばいいよ。 >>541 本読んでる初心者相手に、難しいこと言って混乱させるよりはいいだろう。 まずは動くようにするのが先じゃね?w コンパイラとか言う野郎最悪だな そんなもんに頼むなよ >>542 意地悪も何も、そのレスをとっくにしとるんだが cygwin/mingw-gcc で文句がでなければ、ほぼ問題ない、としています 成功した時に返り値が0になることがあるのに、失敗したら0を返しますとか言ってるAPIって何なんだよクソ野郎め もちろんそんなの知ってるけど、GoがWindows API用に生成してくれるコードが返り値をチェックしちゃっててしばらくハマった >成功した時に返り値が0になることがあるのに、失敗したら0を返しますとか言ってるAPI ちなみにどのAPI? Goがクソなだけじゃん リファレンス読んでコード生成しろよバーカ >>549-550 「失敗が返って来たときは関数を呼びます」 だっけ >>549 「失敗したら0を返します」の対偶は「非ゼロが返ったら成功している」だ。 「成功したら非ゼロを返す」ではない これが分からない人には if文は書けない >関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。 これな >>557 >>拡張エラー情報を取得するには、 関数を使います。 これがわからない人には、プログラムは書けない >>554-555 >リファレンス読んでコード生成しろよバーカ >失敗が返って来たときは関数を呼びます しばしば、動詞の主語がないせいで誰が対象なのか、わからないことが多い。 バカなのは誰なのか。 関数を呼ぶのは誰なのか、関数が関数を勝手に呼んでくれるのか。 的な。 まさかと思うけど英語読めないとか? 戻り値 関数が成功すると、要求した値が返ります。 関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。 https://msdn.microsoft.com/ja-jp/library/cc364638.aspx Return value Type: ULONG_PTR If the function succeeds, the return value is the requested value. If the function fails, the return value is zero. To get extended error information, call GetLastError. https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms633581 (v=vs.85).aspx ダークサイドの貧乏マは、インターネットのどこかにWin*2 Pr*gramm*rs' Refer*nceというヘルプファイルがあるから、別に。。。まあ、できる奴はサプスクリプションをイッチャッテ。 >>561 このひどい訳文はテンプレのようになってて このGetClassLongPtr()の例だけじゃなく Win32APIのいたるところで見るんだが ほんとうにやめてほしい >>562 , >>565 訳が酷いと言うよりなぜかわからんが関数名(GetLastError)が無くなってるって話だろ GetClassLongPtrのように値だけ返すやつは、失敗時ややこしいってのはAPIに限ったことじゃなく関数作ったことあればだれでも知ってること MSDNの日本語ページはの罠は無数にあるから少しでもWindowsプログラミングしたことあれば英語ページ見ることになる どっちも超初心者じゃないとひっかからない罠 昨日のニュース 日本国内でのプログラミング言語別の年収ランキング、中央値1位は「Go」 http://www.itmedia.co.jp/news/articles/1808/07/news087.html みんな間抜けなんでマジレスするけど、SetLastError(0)でクリアしてから呼ばないと、成功したのか失敗したのかわからん仕様です。 >>569 周回遅れ乙 >>570 みんなそんなことは分かってるだろ 普通に考えたら失敗/成功をBOOLで返して取得した値はポインタ経由で返せばいいのに って思ってる人は多いと思う >>566 これを見るたびに何でどうしたらこんなことになるのかと考え込んで作業が中断してしまうのだ スナップできるのはどういうウィンドウかあるいはどういう条件なのか、具体的な要件の一覧ってどこかで見られますか。 自作デスクトップアプリケーションのウィンドウがスナップ機能の対象になってないことに気づいて、少しプログラムをいじってみたところ すぐにウィンドウスタイルによってスナップ機能が働かないことがあるのはわかりました。 具体的にはWS_MAXIMIZEBOXが無いとスナップできません。 で、他のスタイルやスタイル以外の条件もあるかもしれないと思い、 まずはウィンドウスタイルとスナップの関係性から調べてみましたがスナップ機能の条件についての情報は見つけられませんでした。 よろしくお願いします。 スナップなんてOSの設定で最初に切る項目だぞ 気にするな ついでに質問だけど win10あたりからウィンドウの枠のちょっと外まで(影なしにしてても) ウィンドウのリサイズとかマウスアイコン⇔の判定に使われてるみたいで ウィンドウの下のウィンドウを上にもって来たくてクリックしたつもりが 違うウィンドウが上に来てしまうことが多くて困ってる これなんとかする設定どこにある? このスレ的な解決だとFrameRectをフックして少し大きめの枠に変えちゃえばいいのかな > 具体的にはWS_MAXIMIZEBOXが無いとスナップできません。 win7 WS_MAXIMIZEBOXなしのタイトルバーをマウスでつまんで desktopの上辺に移動してマウスを放すと、 タイトルバーが完全に表示されるように再移動される これもsnapではないのか >>581 そうですね。即席で調べただけなので見落としてました。 いずれにせよ、スナップ操作時にどういったウィンドウならばどういう作用が起こるのか、 逆に特定のスナップの効果が欲しい場合にどういうウィンドウをセットアップすればよいのか みたいなことがわかる情報を探しています。 実行中のGUIアプリケーションのコントロールを取得して表示させたいのですが良い方法はありますか? hwnd検索するだけの質問だったのか てっきりインジェクトして中身奪い取るとかそんなのかと思ったわww そっちならAppInit_DLLsの勉強しなされ ってのが回答かな >>589 素直にわからないって言えよ >>588 の「先」は、「自分のプロセスに貼ったコントロールを、そのまま残しつつさらに別プロセスのウインドウに貼り付けて表示する」ということだからな >>590 なんでそんなことするのか全然わからん。 >そのまま残しつつ >貼り付けて >>593 飽きれるほどくだらない揚げ足取りだな 「パスワードを奪い取る」の考えてみろ。残さないとは限らないんだよ >>594 飽きれるほど下手な例えだな パスワードは残さないと使えないだろ パスワードはいただいた 返して欲しければ1BC用意しろ パスワード変えずに「パスワードはいただいた」って? それ何の脅しにもならんやん 元の持ち主が別のに変更して終わり え?おもしろいとでも思ってたの? もしかして渾身のギャグなの? 恥ずかしくないの? 程度が同じじゃないとジョークは通じないらしい ただ今回はガキとバカだからどちらも等しく低いように見えるな 昔のゲームのコードを弄ってて困った事があります。 ウィンドウの大きさを変えると一緒に表示中の画面も引き延ばされるのですが 引き延ばされた時に粗くなって美しくないです。内部のバッファをウィンドウを最大化された時の大きさで確保しておき ゲームの処理の方でフィルタ処理を施せば上手く行きますが出来れば小さいバッファのままで ウィンドウのリサイズ時にAPI側でフィルタ処理できないでしょうか? あと気になるのが環境によっては上記の処理を勝手にやってくれている環境もあります(ディスプレイドライバによるのかもしれません)。 出来れば確実にこちらで処理できるようになれば嬉しいです。 >>604 普通、WM_SIZEの都度ゲームのフレームバッファを再作成するもんじゃねえの? >>605 出来ればバッファの大きさは固定で行きたいんです。 最大化された時にいかにも拡大してフィルタリングされた感じを出したいので。 環境によってはウィンドウがリサイズされると勝手にフィルタリングしてくれて ぼやっとした画面になるので出来ればそれを確実にやりたい感じです。 何か設定でもあるんでしょうか。OSの設定としてあるならそれを知りたいです。 >>607 良さげですね!試してみます。ありがとうございます。 どのタイミングでStreachBltを呼び出してるのかわからない… ウィンドウを制御するクラスの中のWM_PAINTは空だし。 初期化時にDirectXのAPIにhWndを渡してるので勝手にDirectX内部で呼び出してるのかな? リサイズされた時にhWndを元にHDC作ってそこでStreachBltとか。その後HDC破棄みたいな。 そうなると手出しできないってこと? それともウィンドウ作成時のスタイル設定などで リサイズに合わせてスケーリングをどうするのかみたいな設定があるのかな。 それだとそこの設定でどうにかなりそうな気もするけどよく分からない。 ちなみにウィンドウ制御クラスの中のWM_PAINTでは動画などのスケーリングは自前でやってた。 なので少なくともWM_PAINTの中では自分でウィンドウ内部の他の表示のスケーリングはやってない。 ここ見たらたぶん同じような症状で困ってた人がいて http://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=past& ;no=1506 基本的に手出しができず綺麗に拡大されるかはドライバによるという事らしい… え〜やだやだ〜 納得できない。やっすいPCでも綺麗に拡大されてるのに 家の高いPC(ドライバも新しい)で汚いなんて納得できないよ〜! > 現状ではコーラさんがお書き込みになられた方法しかありません あるって書いてあるじゃn >>612 うん。そうだけど、たっかいグラボ積んでる家のマシンで汚く表示されて やっすい3万くらいのPCで綺麗に表示されるのが納得いかないの。 >>612 あ、ごめん見間違った。 方法はあるんだけどバッファの大きさは固定でやりたいの。 なんか意味不明な質問だなと思ったら、それWin32じゃなくてDXライブラリとかいう よくわからんライブラリの話やん。 拡大した時に粗くなる→最初から内部のバッファの解像度を上げておけばよくね? ってのはナシで。 あくまでも内部のバッファの大きさは今のままでウィンドウが拡大された時に 勝手にドライバがやる部分をどうにかしたい。けど無理そうだね… 納得いかないのは、やっすいPCでは綺麗に表示されてるのに たっかいPCで汚く表示されてしまうこと… 逆なら納得したのにこれはないよな〜 >>616 いやDXライブラリでも制御できない部分なので Win32APIの方でなんとかならないのかなと思って。でも無理なのかな。 ここの人ならなんか解決法わかるかなと思ってたけど。 win32でやるならSetStretchBltMode おまえがやるべきなのは小さい画面サイズのでいいからそのDCを取り出すこと それしたらあとは表示するだけ >>619 要するにそれは内部バッファのHDCを取り出して SetStretchBltModeを設定し、その後ウィンドウのクライアント領域に自前で StretchBltで描画しろってことになるかな?まあそれしかないのかやっぱ。 さすがに自前でやったらGDI+使っても速度が全然でなかった(毎フレーム描画しないといけないので)。 諦めます〜 なんか基本的な部分から盛大に勘違いしてそうだな Direct3D使ってるならドライバ依存になるのはスワップチェインのバックバッファが ターゲットウィンドウのサイズとかみ合わない場合に Presentの呼び出しでウィンドウにフィットするように自動でスケーリングされる部分だ ドライバ依存の挙動を回避したいならバックバッファをウィンドウに合わせてリサイズするのは必須なの 逆に、バックバッファの解像度をゲームの解像度と考える必要も無い バックバッファがどんなサイズであれゲーム自体は固定サイズのレンダーターゲット用テクスチャにレンダリングし バックバッファへはそのテクスチャをスプライトとして張り付けるだけ 拡縮フィルタリングをニアレストにするのもバイリニアにするのもアプリでしっかり管理できる なんならシェーダでLanczosにしても良い >>622 なるほど〜バッファをリサイズしないと必ずドライバ依存のスケーリングになってしまうってことね。 その辺りをもうちょい考えてどう対処するか検討してみるよ。ありがとう。 >>623 まだまだ諦めんぜえ〜ww CreateFile()で取得したハンドルをGetMailslotInfo()に渡していいものでしょうか? CreateFile()の第1引数には、別プロセスでCreateMailslot()したときの第1引数と同じ です。 リストビューでマウスドラッグで範囲選択をしているとき、 その選択範囲の矩形座標を取得する仕組みは無いのでしょうか。 範囲選択開始時のLVN_MARQUEEBEGINしか見つからないのですが。 メインウィンドウのメッセージループからマウス系イベント拾ってくるのが楽で良い ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.0 2024/04/24 Walang Kapalit ★ | Donguri System Team 5ちゃんねる