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
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を使っても スレッドが割り込まれると駄目だしさ
0146YahooBB237224045.bbtec.net
NGNGする段取を初心者用に
書いたアーティクルはないもんでしょうか.
「猫でもわかる」その他検索しましたが見つけられません.
スージプラグインとか必須ですか?
0147142
NGNG違います。
timeGetTime()は1ミリ秒ですが
Sleepは最低5ミリ秒くらいの精度になります。
>>145
ある一定の間隔でポートから出力したいんです。
±0.1ミリ秒程度の精度が欲しいのですが、やはり無理なのでしょうか。
0148デフォルトの名無しさん
NGNGRDTSC
0149デフォルトの名無しさん
NGNGhttp://www.google.co.jp/search?q=StretchDIBits+jpeg
>>147
殆ど使われてない マザーのbeep機能を使ったらどう?
0151デフォルトの名無しさん
NGNG要求サイズを変更すればいいんでしょうか?
その場合元のメモリの内容は保障されてるのでしょうか?
よろしくお願いします。
0152デフォルトの名無しさん
NGNG01531
NGNG0154デフォルトの名無しさん
NGNGJPEGは特許がやばいからやめとけ。
悪いことは言わないから、おとなしくmalloc/freeを使っとけ。
0156DELL
NGNGVBの場合ならshape1.move x,y でできましたが、
APIはRectangle(hdc,x,y,x+10,y+10);
をどこのプロシージャで使えばいいか分かりません。
しかも上記のアルゴリズムでは移動するということではなく、
次々と新規に描かれていくように思えます。
だれか図形を移動させる方法教えてください。
0157デフォルトの名無しさん
NGNGVirtualProtectってCなの?
C++ならnew/deleteだと思われ
0158デフォルトの名無しさん
NGNGきみはこのスレで何を言ってるのかね
0159デフォルトの名無しさん
NGNGもしそうだと case WM_PAINT: でこれをつかったら
∞ループにはまりますよね.
0160デフォルトの名無しさん
NGNGhttp://www.matsusaka-u.ac.jp/~okumura/compression/jpegpat.html
0161151
NGNGいぢわるしないで教えてください。
malloc/free に当たる処理を作りたいんです。
>>157
realloc に当たる処理が無いですけどね < new/free
普通は std::vector 使うから。
というか VirtualAlloc が成功しないです…。
何が悪いんだろう…
とりあえず某 VB のサイトにあった引数を参考にして試してるのですが…。
VirtualAlloc (NULL, 4096, MEM_COMMIT, PAGE_READWRITE | PAGE_NOCACHE );
環境は Windows2k です。
アドバイスお願いします。
0162デフォルトの名無しさん
NGNGもしかしたら、NT系/非NT系によりますか?
0163デフォルトの名無しさん
NGNG最後のパラメータを false にすると発生しないと思う
> もしそうだと case WM_PAINT: でこれをつかったら
普通、そんなに頻繁にウィンドウリージョンを設定しないだろ
0164デフォルトの名無しさん
NGNG普通そんなこと誰もしない=誰も知らないバグが残ってる可能性がある
やめとけ。
0165デフォルトの名無しさん
NGNGノーキャッシュをはずしたらどうよ?
0166デフォルトの名無しさん
NGNGPAGE_NOCACHE
が怪しい。こんなものはまず使わん。
0167166
NGNG0169151
NGNGケコーンおめでとうございます。
ちょっと簡略化の為に嘘書いてました。
要求サイズをページサイズ分に切り上げる処理を書き間違ってて
中途半端なサイズを要求していた事が原因でした。
で、やっぱり VirtualProtect でサイズを変えることは出来ないんでしょうか?
0170コギャルとHな出会い
NGNG朝までから騒ぎ!!
小中高生
コギャル〜熟女まで
メル友
i/j/PC/対応
女性の子もたくさん来てね
小中高生大歓迎です
全国デ−トスポット情報も有ります。
全国エステ&ネイル情報あります。
激安携帯情報あります。
どうやっても無理。おとなしくmalloc/free使っとけって。
0172デフォルトの名無しさん
NGNG自分ででっかいプールをつくったら?
0173151
NGNGやっぱり Heap系じゃないと増分は無理なんですか?
そういう書き方だと教えてくれてるのか煽りなのか区別がつかないもので…。
>>172
でっかいプールを作るのに VirtualAlloc を使いたいんですよねー
0174デフォルトの名無しさん
NGNGグラフを書きたいといって、
右端で直線を引きながら
BitBlt(memdc, 0, 0, 520, 460, memdc, 1, 0, SRCCOPY);
(memdcは裏画面のデバイスコンテキスト)
というようにすれば右から左に流れるような直線が書けると
教えていただいたのですが、これだとやはり時間がかかってしまいます。
何か高速な画面の移動の方法は無いでしょうか。
0175デフォルトの名無しさん
NGNGXOR
0176デフォルトの名無しさん
NGNGなるほろ.
しかしそれではせっかく設定したリージョンが..
0177デフォルトの名無しさん
NGNG早レスありがとうございます。
XORっていうのは、
LineToを呼んで、背景色と色AのXORの色Bで直線を描画して、
今度は色Bの上から色Aで描画すれば背景色に戻る
っていうので合ってるでしょうか?
LineToを何度も呼ぶことになると思いますが、その方が高速なんでしょうか。
煽っているつもりは全くないのだが。
VirtualProtectはメモリの保護モードを変更するものなので、
サイズを変更することはできない(てか、ヘルプ読めよ)。
unixのbrkのような使い方をしたいのであれば、
あらかじめVirtualAllocで巨大な領域をreserveしておいて、
必要になった時点でcommitすることで、似たような動作にすることはできる。
■ このスレッドは過去ログ倉庫に格納されています