Win32API 質問箱 Build5
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGやさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。
前スレ
Win32API 質問箱
http://pc.2ch.net/tech/kako/991/991576947.html
Win32API【2】
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API 質問箱 Build3
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API 質問箱 Build4
http://pc3.2ch.net/test/read.cgi/tech/1023361418/
参考
MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/index.html
0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNGなるほど。ありがとうございます。
その方法で試してみます。
0048デフォルトの名無しさん
NGNG嘘だと思うなら、やってみれば。
確かに解像度は変えられるが、戻ったときに「うげ」となるから。
0049デフォルトの名無しさん
NGNGhttp://home7.highway.ne.jp/nomura_y/prog000.htm
0050デフォルトの名無しさん
NGNG各ウィンドウの位置・サイズがおかしくなるみたいですね。
ちなみにうちの98SEの場合は問題ありません。
0051デフォルトの名無しさん
NGNGだからCDS_FULLSCREENがあるんだろ
環境次第だというならうちのWin2kではDirectX使っても
ウィンドウが勝手に移動しますが何か?
0052デフォルトの名無しさん
NGNG> うちのWin2kではDirectX使ってもウィンドウが勝手に移動しますが
後始末はしっかりやってる? 俺の環境でも、後始末のタイミング次第で
ウィンドウサイズが復元されない場合があった。
0053デフォルトの名無しさん
NGNGDependency Walkerで見る限りでは明らかにChangeDisplaySettings
使ってるのにWin2kでもウィンドウサイズおかしくなったりしないんだけど
0054デフォルトの名無しさん
NGNGオーナー描画のコンボボックス(ドロップダウン)を作ったのですが、
リストから選択すると、テキストボックスに変な文字列が表示されます。
恐らくコンボボックスがテキストだと思ってアイテムデータのアドレスを
テキストボックスに渡しているのだと思うのですが、
CBS_HASSTRING をつけると WM_COMPAREITEM 飛んでこないし、
何かいい方法はないでしょうか?
というかそもそも作り方間違ってます?
0055デフォルトの名無しさん
NGNG005654
NGNGうーん、できればリアルタイムにソートしたいんですよね。
表示のたびに挿入し直しは無駄が多いような気がするので。
でも何となく雰囲気的に無理っぽい感じですね。
とりあえずソートしつつ挿入という方式でやろうと思いますが、
もしいい方法があったら引き続き情報お待ちしておりますので
よろしくお願いします。
0057デフォルトの名無しさん
NGNG(ただし、挿入ではなく上書きを使ったけどネ)
0058デフォルトの名無しさん
NGNGかなりレベルの低い質問で恐縮なのですが
ウインドウの背景を青にして
そのウインドウにTEXTOUT関数で文字を出力すると
文字が白い四角の中に表示されてしまいます。
どうすれば青い背景の上に文字を表示できるでしょうか?
よろしかったらお教えください。
0059デフォルトの名無しさん
NGNGSetBkMode( hDC, TRANSPARENT );
0060デフォルトの名無しさん
NGNGなるほど、TRANSPARENTっていう指定が
背景をそのまま残すっていう指定になるんですね。
参考になりました。ありがとうございました。
0061デフォルトの名無しさん
NGNG(エクスプローラで名前の変更で使うみたいな)
エクセルみたいに軽快にEditを使いたいのですが
どうすればいいんでしょうか?
0062デフォルトの名無しさん
NGNGの逆で
パスからIDListに変換するのに
使用するAPIって存在しますか?
あるなら教えていただきたいのですが。
IDListについていまいちきちんと理解していないので、
見当外れなら指摘してもらえると助かります。
よろしくでお願いします。
0063デフォルトの名無しさん
NGNGするにはどうしたらよいのでしょうか?
0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNG006663
NGNG表現が曖昧ですいません。
考え直してみたところ、判断したいのはダイアログではなくて
ウィンドウのサイズ変更ができないアプリであり、これはウィンドウスタイルに
WS_THICKFRAMEが含まれているかどうかを判定することにより解決しました。
0067デフォルトの名無しさん
NGNG単純に、
WNDCLASSEX wcex;
wcex.lpfnWndProc = (WNDPROC)(this->WndProc);
とするとコンパイルエラーになってしまいます。(型変換できないと言われる)
(static関数にすればコンパイルできますが、thisを参照できないので
困ってしまいます)
0068デフォルトの名無しさん
NGNGSetProp()でウィンドウハンドルにthisを登録すれば何とか使えます
WM_CREATEの時点では使えませんけどね
006968
NGNG捕捉、
http://techtips.belution.com/ja/vc/0009/
↑に詳しくのってた
0070デフォルトの名無しさん
NGNGこれでうまくいきそうです。
紹介いただいたサイトもお気に入りに追加しました。
ありがとうございます。
0071デフォルトの名無しさん
NGNGどこかにソース or 情報ありませんか。
(すれ立てるまでもない質問はここでに同じことを書きましたがスレ違い
でした。すんまそ。)
0072ssssss
NGNG0073ssssss
NGNGデバッガを作りたいということ?
VC++使ってりゃデバッグウインドウにそのまま表示されるけど、それじゃだめなの?
0074デフォルトの名無しさん
NGNGその、表示が出るVC++のデバッグウィンドウの部分だけを
独立したソフトとして作りたいのです。
0075デフォルトの名無しさん
NGNGMFCのソースで見たことあるな。
EditWindowを作って、新たに表示させる文字列を
REPLACEなんとかで文章の最後に置き換える形で追加していく。
0076ssssss
NGNGほれ
http://www.anticracking.sk/EliCZ/import/msdn_debug.htm
サンプルビルドしてみたけど、うまくいかん…
がんばってくれ。
0077ssssss
NGNGこれも
http://nps.vnet.ee/ftp/Docs/Asm/IczTutor/tut28.html
0078デフォルトの名無しさん
NGNGありがとうございます。
そろそろ終電だからその資料印刷して帰ろう。。。
007978
NGNGにもヒントがありました。
0080ssssss
NGNG残業中かよ!
0081デフォルトの名無しさん
NGNGIShellFolder::ParseDisplayName()
008262
NGNGありがとうございます。
早速試してみますね。
0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNG008583
NGNGボタンコントロールとかをサブクラス化した場合はサブクラス化ルーチンにWM_COMMANDが飛んでくるのにと思ってました。
激しく勘違い。何をサブクラス化してもWM_COMMANDは来ないのですね。
ところで、なんでサブクラス化ルーチンにWM_COMMANDが来ないのでしょう?
サブクラス化の意味が違う?
0086デフォルトの名無しさん
NGNG0087デフォルトの名無しさん
NGNGその部分を別にリンクする事で可能になります。
世の中にはDelphiとか そういう機能を内在した言語もあります
0088デフォルトの名無しさん
NGNG何でサブクラス化したいん?
0089デフォルトの名無しさん
NGNG009083
NGNG複数のアプリで同一のツールバーを使う場合、ツールバーをDLL化して、ツールバーが押された時の処理もDLL側で行った方がすっきりして良いかと思いまして。
EXE側もツールバーの事を意識しない方が楽ですし。
0091ssssss
NGNGサブクラス化云々の問題よりも、
そもそもWM_COMMANDはボタンコントロール(のウインドウ)に送られるメッセージではなく、
ボタンが押された結果他のウインドウ(親ウインドウ)に送られるメッセージだからでしょ。
だから、ボタンにWM_COMMANDが送られるわけはない。
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNGタイトル名とアイコンを取得しようと思ったのですが、Delphiなどで
作られた一部のアプリケーションは二つのウィンドウが取得されてしまいます。
(例えばクラス名TApplicationとTFormMainの二つ)
しかもこの二つのウィンドウのアイコンが別々です。
そこで、タスクマネージャのように一つだけ取得し、なおかつアプリケーションの
正しいアイコンを取得するにはどうすればよいのでしょうか。
0094デフォルトの名無しさん
NGNGでそれらのウィンドウの関係は?
009583
NGNGサブクラス化って、サブクラス化したウィンドウに関する全てのメッセージを処理するものだと思ってたのです。
WM_COMMANDは仰る通り、考え方が違うのですね。
>>92
主にランチャー機能やタスク切換え機能ですね。
ヘルプ起動とかも行っていますが、これもランチャーに相当すると言えるかも。
あまり深く考えずに親ウィンドウ側でWM_COMMANDを処理してもいいんですが、各EXEに同じようなのを記述するのはいかがなものかと。
その部分だけ別ソースに書き出して工夫するのが良いのでしょうか?
0096デフォルトの名無しさん
NGNGランチャーの機能に関する一連の関数、又はクラスをDLLの方に閉じ込めて
親ウィンドウのProcedureから呼べば?
0097デフォルトの名無しさん
NGNG親から子にメッセージを投げ返せ。
0098デフォルトの名無しさん
NGNG>サブクラス化って、サブクラス化したウィンドウに関する全てのメッセージを処理するものだと思ってたのです。
きみはウィンドウ関数(プロシージャ)というものちゃんとを知らないんだね。
0099デフォルトの名無しさん
NGNGGetWindow(hWnd,GW_OWNER) でゼロを返すほうが真のメインウィンドウ
0100デフォルトの名無しさん
NGNGdbmonのソース。
Platform SDKに入ってると思う
010183
NGNG親で受け取ったWM_COMMANDがツールバーのものなのか判定するというのがいかがなものかと思いまして。
>>97
REFLECT_NOTIFICATIONで解決かと思ったのですが、使い方が分かりません。
しかしプラットフォームSDKの標準ヘッダーでは定義されていないですね。
MSDNを見ていたらATLマクロだということは分かりましたが、SDKなプログラムにREFLECT_NOTIFICATIONのみを実行させることは可能なのでしょうか?
>>98
はい。残念ながら知らないようです。
私の抱える問題を解消出来るような方法は御存じないでしょうか?
010383
NGNG複数のEXEで同様な判定処理を行う事になるからです。
大した事ではありませんが、見た目上、同じツールバーを備えるEXEでも、EXE側での処理如何ではツールバーの動作が異なる可能性が出てくるためです。
今回、私の作っているツールバーでは、主にランチャー機能を持たせる訳ですから、EXE側にとってはツールバーの処理は無関係な訳です。
今のところ、ツールバーをサブクラス化したルーチンで、WM_LBUTTONUPの処理時にTB_ISBUTTONPRESSEDを使ってツールバーのどのボタンが押されたか調べる事が出来ましたので、他に良案が無ければこの方法でいこうかなと思います。
010483
NGNGちょっと書き方に不備がありましたね。すみません。
>複数のEXEで同様な判定処理を行う事になるからです。
つまり結局の所、[各EXEのWM_COMMANDでLOWORD(wparam)==ツールバーのボタンか?]の処理が必要になるのが如何なものか? ということです。
0105102
NGNG私個人としては、
「ウィンドウプロシージャに飛んで来るWM_COMMANDの振り分け」自体面倒な処理では無いと思うが..
case WM_COMMAND:
switch (LOWORD(wp)) {
case ID_TOOLBAR:
OnToolBarMsg(hWnd, msg, wp, lp);
break;
....
とかじゃダメなの?
WM_LBUTTONUPだとウィンドウ外でクリック->ホールド->ツールバーの上でリリース
でもイベントトリガーに...
0106デフォルトの名無しさん
NGNGだから、REFLECT_NOTIFICATIONマクロと
実質的に等価なコードをかけや。
010783
NGNGcase WM_COMMAND:
switch (LOWORD(wp)) {
case ID_TOOLBAR:
この場合、LOWORD(wp)にはツールバーリソースIDではなくてボタンIDが入りますので、ボタンが複数あるとcase文を増やさねばなりません。
もちろん、面倒ではないですが。
>WM_LBUTTONUPだとウィンドウ外でクリック->ホールド->ツールバーの上でリリース
>でもイベントトリガーに...
ある意味、そのような操作をすると無駄なイベントは発生してしまいますが、TB_ISBUTTONPRESSEDを使ってツールバーのどのボタンが押されたか調べているので、実質的には問題は無いでしょう。
>>106
そのマクロと等価なコードがどんなものなのか分からないのです。
単にWM_COMMANDをツールバーに投げるだけですか?
DLLでツールバーとその親ウィンドウを作って、EXEには
親ウィンドウを張り付けりゃいいんでないの?
010983
NGNGそういう手がありましたね。一番素直な組み方かも。
フローティングツールバーみたくする時も、この方が応用が効いて良さそうです。
ありがとうございます。
0110デフォルトの名無しさん
NGNG011183
NGNG0112デフォルトの名無しさん
NGNG0113112
NGNG0114CRect
NGNG#include <windows.h>
#include "StdAfx.h" だけだと
CRect
が”定義されてません”のエラーになるんですが,
これは何をインクルードすれば使えるんでしょうか。
--------------------構成: a7 - Win32 Debug--------------------
コンパイル中...
a7.cpp
C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\MyProjects\a7\a7.cpp(24) : error C2065: 'CRect' : 定義されていない識別子です。
0115デフォルトの名無しさん
NGNG0116デフォルトの名無しさん
NGNGMSDNに載ってるぞ
0117デフォルトの名無しさん
NGNG0118CRect
NGNGそれつかうんならSDKじゃないとやっと気付いた私。ごめ。
0119デフォルトの名無しさん
NGNGコンソールアプリ作る分には windows.h 読んどきゃ OK っぽいけど...
0120デフォルトの名無しさん
NGNG0121デフォルトの名無しさん
NGNGプリコンパイル済みヘッダファイル作成用だと思う
0122デフォルトの名無しさん
NGNGリストとエディットを作ったんだけど、その二つは横に並べるのね。
そんでお互いに接してる部分だけサイズ変更ってどうやるんでしょう?
↑エクスプローラのフォルダ表示エリアとファイル表示エリアみたいな関係にしたいのです。
フォルダ表示エリアの幅を広げると、ファイル表示エリアの幅が狭くなるって感じで。
CreateWindowのスタイルでWS_SIZEBOXとかやると、
4辺全部変えられるようになっちゃうし。
教えて下さいー。
0123デフォルトの名無しさん
NGNGIEのフレームみたいなのか?
あれはMFCではできるけどAPIだと自力でどうにかしろだったと思うが。
0124デフォルトの名無しさん
NGNGを作り、それぞれのウィンドウのサイズやZオーダーを変更したり最小化・最大化しようとして
それぞれのウィンドウへSendMessageしたのですが、最小化などはできるのですが
サイズ変更やZオーダーは変更できないウィンドウがあります。
具体的にはDelphi製のソフトが該当するようなのですが、
Zオーダーなどの変更方法としてこの方法は間違っているのでしょうか?
間違っているのならどのような方法をとればよいのでしょうか?
0125デフォルトの名無しさん
NGNGその上にもう一つウインドウがある。
0126デフォルトの名無しさん
NGNGメインフォームという構造になってる
たぶんその関係では?
0128124
NGNG取得するにはどうすればよいのでしょうか?
0129デフォルトの名無しさん
NGNG0130124
NGNG不可視ウィンドウとはクラス名TApplicationというやつぽいですが
これ以外の同キャプションをメインフォームと判断するのは
ちょっと乱暴なやり方でしょうか・・
0131デフォルトの名無しさん
NGNGLogonUser( TEXT( "Administrator" ), TEXT( "." ), TEXT( "password" ),
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken );
こんな感じなんですが、どうですか?
0132デフォルトの名無しさん
NGNGそうですねー。
IEのフレームみたいなやつ。
APIでは対応してないのですかー・・・
MFCってさっぱりわからんのであきらめますかな・・・
どーもでした。
0133122
NGNGしつれーい。
0134デフォルトの名無しさん
NGNG左右のウィンドウの間にフレーム用のウィンドウを作る。
そのウィンドウがドラッグされたら左右のウィンドウのサイズを調整。
0135デフォルトの名無しさん
NGNG列挙して不可視ウィンドウがオーナーになってる奴を探す
0136デフォルトの名無しさん
NGNG起動元のユーザーはTCB特権を持っていますか?
0137デフォルトの名無しさん
NGNGTCB特権って何ですか?
調べてみたんですけど、それらしいものがでません。。。
0138デフォルトの名無しさん
NGNGこれじゃないの? 手元の MSDN Library だと LogonUser() API の解説に
書いてあったんだが。
> LogonUser 関数を呼び出すプロセスは、SE_TCB_NAME 特権を備えて
> いなければなりません。
ついでにサポート技術情報から。
> 注意: ユーザー マネージャ [原則] - [ユーザーの権利] で、高度なユーザー権利の
> [オペレーティングシステムの一部として機能] をユーザーに許可することで
> 上記の権限をユーザーに持たせられます。
0139デフォルトの名無しさん
NGNGSE_TCB_NAMEを付加するくらいだったら最初からAdministrators
与えとけよというくらい危険
0140138
NGNG話が逸れるんだが、Win32 の特権について詳解している書籍とかって知ってる?
MSDN Library にはパラパラとは書いてあるんだが、全体像を把握しかねてて。
0141デフォルトの名無しさん
NGNG0142デフォルトの名無しさん
NGNGSleep関数の精度っていうのはどの程度なのでしょうか?
どうも1ミリ秒単位で正確ではないようなのですが。
やはり正確さを取るには
for(dwTime=timeGetTime()+10; timeGetTime()<dwTime; Sleep(0));
のようにするか、for文の中でQueryPerformanceCounterを回して
時間の差を判定するしかないのでしょうか。
でも、こうするとやたら重くなるのでできればSleepのような軽い関数が
あればいいなぁ・・・
0143デフォルトの名無しさん
NGNG0144ssssss
NGNG今回の場合に使えるかどうか分からないけど、
WM_NCHITTESTを処理すれば、
特定の辺だけサイズ変更できる(マウスでドラッグできる)
ってことができるんじゃないかと思います。
0145デフォルトの名無しさん
NGNG正確な時間を何の為に欲しいの?
Win32アプリだと QueryPerformanceCounterを使っても スレッドが割り込まれると駄目だしさ
■ このスレッドは過去ログ倉庫に格納されています