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/
char *p = "hello"; を書くと、「型 const char * の値を使用して型 char * のエンティティを初期化することはできません 」 と表示されるんだが、どうすればいいんだ? CQ出版社の『Win32 API完璧マスタ』189ページにも書いてある構文なのに・・・ char q[] = "hello"; char *p = q; そんなのはCスレで聞けよ char p[] = "hello"; こうか char q[] = "hello"; char *p = (char *)q; これをTextOutしたいんだが・・・ TextOut(hdc,10,10, p, strlen(p) ); と書いてもエラーになってしまうし、 pをqに変えてもエラーが出る >>513 「型 char * の引数は型 LPCWSFR のパラーメータと互換性がありません BOOL TextOutW(HDC,int,intLPCWSTR,)int: 引数 4 を char[6] から LPCWSTR へ変換できません。」 って出てしまう。 CQ出版社の本には、 「TextOut(ps.hdc,10,10, p, strlen(p) ); 」って書いてあるのに。 >>513 >508のエラーなのか TextOut のエラーなのか あー、面倒なので正確には調べないが、文字コードセットかソースファイルのコードを調べて 全部マルチバイト文字にでも統一すれ コンパイラのオプションでユニコードを使うを無効化しろ もしくはTCHARとかTextOutWとかTextOutAとかその辺でぐぐれ >>515 TextOutの際に、いちいち TextOut(hdc, 10, 10, TEXT("hello"), 5); と文字列と字数を毎回入力したくないし、 表示文字を"good morning"とか "good bye" とか違う字数の文字列にも置き換えたいんだ。 だから、変数を使って文字列をpとかqとかに置き換えたいんだけど、そこで 型 char * の引数は型 LPCWSFR のパラーメータと互換性がありません 」 とかのエラーが出てしまう。 charは1バイト文字の型 LPCWSTRは2バイト文字の型 ものが違うんだよ ってかwin32の本ならそのくらい書いてあるだろ。もし書いてないならゴミだから捨てろw TCHAR p[] = TEXT("hello"); TextOut(hdc, 10, 10, p ,lstrlen(p)); >>518 後から文字列を変更するのであれば、初期化の時に配列の要素数に注意 #define MAX_LENGTH 256; // 要素数に注意 TCHAR p[MAX_LENGTH] = TEXT("hello"); >>516-517 今から覚える人に非推奨のMBCS版を勧めるのはどうかと。 VSでも2015辺りからMBCS版のバグを治さず放置してたりするのだし。 「TCHAR p[MAX_LENGTH] = TEXT("hello");」 で「式が必要です」ってエラーが出てしまうし。 「TCHAR p[256] = TEXT("hello");」って直接に数値指定するとエラーメッセージが消えるから、 なんかdefineが働いてないっぽい >>523 すまんね 流石に気付くだろうと思って黙ってたけど、define文の末尾にうっかり余計なセミコロン付けてしまっているので注意してね とりあえずいまどきの環境なら、charはTCHAR、char *はLPTSTR、const char *はLPCTSTRを使い、リテラルはTEXTマクロで囲って 文字列操作関数はl付きの関数strlenならlstrlen、strcpyならlstrcmpなどに置き換えればほとんど問題はないよ いろいろと教えてもらい、スレの皆様、ありがとうございます。 自分、最終的にゲームっぽいのを作りたくって、 それで会話メッセージが何百個もあるから、どうしても文字列を変数にする必要があるんです。 エラーコード↓です。 「 TCHAR p[256] = TEXT("hello"); TextOut(hdc, 10, 10, p, lstrlen(p)); p = TEXT("good morning"); TextOut(hdc, 30, 30, p, lstrlen(p)); 」 こんな感じで、1つのpを使いまわしたいんです。 strcpyかとも思ったんですけど、「strcpy(p, TEXT("good morning") );」でも 「char*のパラメーターと互換性がありません」ってエラーが出て、なんか違いそうだし・・・ ググッても、Win32APIで1つの文字列変数を複数の文字列に何度も書き換える事例が見つからなくて、困ってます。 >>525 でstrcpyとstrcmpがごっちゃになってた、訂正 >>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の設定としてあるならそれを知りたいです。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる