■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API質問箱 Build15
251 名前:デフォルトの名無しさん :03/11/29 00:15
>>249
検索、置換のダイアログはある。
少し手を加える必要はあるけど。
http://www.bekkoame.ne.jp/~ilgg/VBMain/VB/Dialog/FindText.html


252 名前:デフォルトの名無しさん :03/11/29 01:27
自分で作った方が早いような。

253 名前:デフォルトの名無しさん :03/11/29 03:25
んなもん10分もありゃできそうなもんだがなぁ

254 名前:デフォルトの名無しさん :03/11/29 05:53
アドレス バーみたいなやつか?
あれ拡張コンボボックスだろ

255 名前:デフォルトの名無しさん :03/11/29 10:05
InputBox

InputBox は,ユーザーが文字列を入力できる入力ダイアログボックスを表示します。

#include <Dialogs.hpp>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString InputString = InputBox("Input Box", "Prompt", "Default string");
}

256 名前:デフォルトの名無しさん :03/11/29 10:31
スタティックコントロールにSetWindowTextを使用して文字列を設定したところ
強制終了してしまいました。
(実行は成功しているが、メインウィンドウに処理が戻るといきなり落ちる)
文字列を短く設定したところ、強制終了しませんでした。
設定する文字列の長さに限界があるんでしょうか?

257 名前:デフォルトの名無しさん :03/11/29 11:32
32KBあたりじゃない?

258 名前:デフォルトの名無しさん :03/11/29 11:38
>>256
予期しない領域を破壊していると言う落ちはないか?

259 名前:デフォルトの名無しさん :03/11/29 13:26
void fusianasan()
{
char sage[]="age";
SetWindowText(aborn,sage);
}


260 名前:デフォルトの名無しさん :03/11/29 13:58
デスクトップなどの特殊フォルダのアイコンを取得したいのですが、
SHGetFileInfoでできるでしょうか…いろいろやったんですが出来なかったので
よろしければご教授お願いします

261 名前:デフォルトの名無しさん :03/11/29 14:29
ドラッグアンドドロップでファイル名を取得してソレからアイコンの部分だけ抜き出すって事?


262 名前:デフォルトの名無しさん :03/11/29 15:56
簡単に言うとデスクトップやマイコンピュータのアイコンが
含まれているファイルと、アイコンのインデックスを取得したいです。
SHGetFileInfoで取得すると普通のフォルダのアイコンのインデックスが戻ってくるので…
レジストリ読んだ方が早いのかな…

263 名前:デフォルトの名無しさん :03/11/29 16:17
フォントの名前からファイル名(Arial.ttfとか)を得るAPI、
もしくはフォントファイル名からフォントの名前を得るようなAPIはあるでしょうか?
RemoveFontResourceでフォントを削除したいのですがファイル名が分からない状態なのです。
ご教示くだされば幸いです。

264 名前:263 :03/11/29 16:25
あっ、レジストリを参照すればいいのか…
解決しそうです すみませんでした_| ̄|○

265 名前:デフォルトの名無しさん :03/11/29 16:31
>>262
SHELL32.dllをアイコン関係のツールで解析するのはだめか?


266 名前:デフォルトの名無しさん :03/11/29 17:07
>>262

特殊フォルダのアイコンが入ってるファイルを
取得する方法はわかりませんが、アイコンを
取得するだけなら SHGetSpecialFolderLocation で
特殊フォルダのPIDL取得して、
 pszPath = そのPIDL
 uFlags = SHGFI_PIDL | SHGFI_ICON
としてSHGetFileInfoを呼び出せば取得できると思います。

特殊フォルダのアイコンが入ってるファイルを
取得しないといけない、ということならすみません。


267 名前:デフォルトの名無しさん :03/11/29 17:19
>>256
まさにその通りでした。
たかだか3つの数字と10文字にも満たない文字を表示するだけなので
charバッファを50も取ってりゃ十分だろ。と考えたが実際は、60ちょっとあった…。
まさか仮に取ったバッファがオーバーしてるとは…鬱だ。_| ̄|○≡

>>259
そんな感じ。
ただ、charの宣言の仕方が私の場合
char sage[50];
ってなってた。

>>257
ほんとにあったのか…限界…。

レスくださった >>257-259 さんありがとうございました。m(_ _)m

268 名前:デフォルトの名無しさん :03/11/29 17:47
>>265
どうもです。それも考えましたがOSごとに一定かどうかわからなかったので…

>>266
できました。どうもありがとうございます

269 名前:いなむらきよし :03/11/29 18:01
キケー!

270 名前:デフォルトの名無しさん :03/11/29 20:56
左ボタンを押すと、「左ボタン」と表示され
右ボタンを押すと、「右ボタン」と表示され
左キーを押すと…
右キーを押すと…
という風にしたいのですが
キーを先に押した場合は、右キー・左キーと表示されるのですが
ボタンを押してしまうと、もう一度キーを押しても右キー・左キーと
表示されなくなってしまいます。

WM_KEYDOWNとWM_COMMANDをひっくり返してみても
return 0をbreakにしてみたりしたのですが、結果は同じです。
下のソースでどこかおかしいところがあったら指摘してほしいのです。
改行多すぎでエラーが出るので、ソースは次のレス番号に乗せます
よろしくお願いいたします。



271 名前:270 :03/11/29 21:00
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_COMMAND:
switch(LOWORD(wp))
{
case 1:
user_sentaku = TEXT("左ボタン");
hyouji();
break;
case 2:
user_sentaku = TEXT("右ボタン");
hyouji();
break;
}
return 0;
case WM_KEYDOWN:
switch(wp)
{
case VK_LEFT:
user_sentaku = TEXT("左キー");
hyouji();
break;
case VK_RIGHT:
user_sentaku = TEXT("右キー");
hyouji();
break;
}
return 0;
これも改行多すぎですエラーがでたので、できる限り削りました。
ウィンドウプロシージャの中に記述されているものです。

272 名前:デフォルトの名無しさん :03/11/29 21:03
hyouji()は何してるの?

273 名前:270 :03/11/29 21:07
>>272
hyoujiは、押されるごとに、右キー、左キー、右ボタン、左ボタン
と画面に表示する関数です。

void hyouji()
{
HDC hdc;
hdc = GetDC(hwnd);
SetTextColor(hdc , RGB(255 , 0 , 0));
SetBkColor(hdc , RGB(255 , 255 , 255));
TextOut(hdc , 30 , 30 , user_sentaku , lstrlen(user_sentaku));
ReleaseDC(hwnd , hdc);

}


274 名前:デフォルトの名無しさん :03/11/29 21:23
クリックした場所が悪いとか・・・

275 名前:デフォルトの名無しさん :03/11/29 21:28
>>273
ボタンのプロシージャにWM_KEYDOWN:が行ってる。

SetFocusやサブクラス化でググレ

276 名前:274 :03/11/29 21:40
ああマウスのボタンじゃないのか・・・
じゃあ、ボタンのメッセージ処理した後に
SetFocus(自分のhWnd) でいいと思われ。

277 名前:デフォルトの名無しさん :03/11/29 21:41
ソースが悪いな…>>276(専用ブラウザでソース参照用)
case WM_COMMAND:
switch(LOWORD(wp))
{
case 1:
user_sentaku = TEXT("左ボタン");
hyouji(user_sentaku);
return 0; // こっちをリターンする
case 2:
user_sentaku = TEXT("右ボタン");
hyouji(user_sentaku);
return 0; // こっちもね
}
break; // ここは必ず返しましょう
case WM_KEYDOWN:
switch(wp)
{
case VK_LEFT:
user_sentaku = TEXT("左キー");
hyouji(user_sentaku);
break;
case VK_RIGHT:
user_sentaku = TEXT("右キー");
hyouji(user_sentaku);
break;
}
break;
こんな感じでいい?
あと user_sentaku はグローバル変数なの?
関数の引数にしようべ

278 名前:デフォルトの名無しさん :03/11/29 21:42
>>277(ソース参照用)
リロードすりゃよかった・・・鬱

279 名前:270 :03/11/29 22:01
皆さん、たくさんのレスありがとうございます。
Setfocusをやってみたところ、見事解決しました。
どうもありがとうございます。
switch文をif文に変えてみたり、意味のないことをいろいろやって
お手上げだったので大変助かりました。
基本的なことがよく理解できてないようなのでそこのところを
きちんと勉強しようと思います。

>>277
user_sentakuはグローバル変数にしてました。
user_sentakuは関数の中に記述した方が、わかりやすいですね。
アドバイスありがとうございます。

皆さん、どうもありがとうございました。助かりました。ありがとう。

280 名前:デフォルトの名無しさん :03/11/30 11:28
vb.netで
ウィンドウにtabを送ってフォーカスの移動を行いたいのですが
sendmessage(hwnd, wm_keydown, vk_tab, 0)
だとフォーカス移動が発生しません。
postmessage(hwnd, wm_keydown, vk_tab, 0)
ですとフォーカス移動が起こるのですが
発生するタイミングが違うので困ってます。

sendmessageでtabを送る方法か、若しくは
postmessage処理の終了を待って、次の処理に取り掛かる方法
というのがありましたら教えて頂けますでしょうか。

281 名前:デフォルトの名無しさん :03/11/30 11:47
WM_NEXTDLGCTLじゃあかんのか

282 名前:280 :03/11/30 12:23
ありがとうございます。

Public Const WM_NEXTDLGCTL = &H28
SendMessage_int(hwnd, WM_NEXTDLGCTL, 0, 0)
これで試してみたのですが、フォーカスの移動が発生しません。
なにか間違っているでしょうか?
IE中のリンクやテキストボックスのフォーカスを移動したいのですが。

283 名前:デフォルトの名無しさん :03/11/30 13:02
>>280
質問するなら、IEのウィンドウだとちゃんと書け。
SendMessage()やWM_NEXTDLGCTLは使えない。
APIのkeybd_event()を使え。あと、WM_KEYDOWNの後にWM_KEYUPもちゃんと書け。


284 名前:デフォルトの名無しさん :03/11/30 13:05
>>283
IEのウインドウの中のリンクやテキストが標準のウインドウとは違うと
思いつくほうが少ないだろ。

IEの中は特殊だとちゃんと書け。
SendMessageやWM_NEXTDLGCTLが使えない理由をちゃんと書け。

285 名前:280 :03/11/30 13:30
>283
keybd_eventだと
sendmessage(hwnd, wm_char, *, 0)
keybd_event(vk_tab, 0, 0, 0)
sendmessage(hwnd, wm_char, *, 0)
とした場合、文字入力が終わった後にtabが起こります。
postmessageと同じく、意図したタイミングで起こってくれないんです。
postmessageやkeybd_eventの終了を待つ方法ってあるのでしょうか?

286 名前:デフォルトの名無しさん :03/11/30 14:29
自分のプログラムのウィンドウでなく
別に起動してる他のアプリのウィンドウで
現在マウスカーソルがどこのメニューの上にあるとか
判断することはできるのでしょうか?

例えば
自分のプログラムがバックグラウンドで動作していて
ユーザはペイントを起動して使ってるとすると
ペイントの「ファイル」の上にマウスカーソルが来てるときに
その情報をバックグラウンドで動作してるプログラムの方で
認識することはできるでしょうか?
メニューの選択後でなく,ただマウスカーソルが上に来た時です

287 名前:デフォルトの名無しさん :03/11/30 16:51
ttp://www.google.com/search?num=50&hl=ja&ie=Shift_JIS&q=%83%7D%83E%83X+%88%CA%92u+%8E%E6%93%BE+VC&lr=lang_ja

288 名前:デフォルトの名無しさん :03/11/30 17:45
 うちのじいちゃんが言うには、戦争が起こる前から三国人の犯罪は多かったらしい。
8月15日を境に、奴らは戦勝国のごとく、略奪や強姦、放火を繰り返していったという。

 「幼なじみのゲンさん(親切で人思いの人だった)は、駅の近くに住んでいた。
終戦後、家の修理や片づけをしている最中に、奴らは集団でやってきた。
家に入ってくるなり大声を上げて、目の前で家に火を放った。
 ゲンさんは、「おどりゃー、なんしょんなら!」と叫びながら、バケツの水でその火
を消そうとすると、奴らは数人がかりで押さえ込み、そばにあった縄でそのまま柱に縛
り付けた。奴らは安全な場所に離れて、ゲンさんが叫びながら生きたまま焼かれる姿
を笑いながら見ていたという。
 その後、奴らはゲンさんから奪ったその土地にバラックを建て、終戦直後不足してい
た煙草や、密造酒、三国人の仲間が略奪した食料などを売っていたらしい。

 現在、その場所は、大きなパチンコ店になっており、焼肉店が並ぶ。

289 名前:286 :03/11/30 18:30
>>287
すいません
マウスの位置座標取得はわかるんです.
今悩んでるのはそのマウス位置が
別プログラムのウィンドウ内にあるって判断だけじゃなく
別プログラムのメニューやボタンのどの上にあるのか
って情報が取得できるのかってことなんです



290 名前:デフォルトの名無しさん :03/11/30 18:47
すみません。
リストボックスの特定項目の文字列を変更するにはどうすればよいのでしょう。
LB_DELETESTRING してから LB_INSERTSTRING すると選択が解除されて不自然になってしまいます。

291 名前:デフォルトの名無しさん :03/11/30 19:00
>>290
それ、俺も悩んで15分くらいいろんな事やってわっかんねーって検索かけたりした
(つまり質問していいほどのレベルじゃないかなと思ったから

んでどうやればいいかというと

GetWindowText


292 名前:デフォルトの名無しさん :03/11/30 19:07
>>286
ChildWindowFromPoint(Ex)
GetWindowRect
ScreenToClient

これで、云々すれば、いけるとおもわれ。

293 名前:デフォルトの名無しさん :03/11/30 19:17
>>291
GetWindowTextはウインドウの文字列のコピーを取得する関数で、直接のポインタじゃなかった記憶があります。
すみません。わかりません。
とりあえずは選択項目のインデックスを保存しておいて除去挿入後に再選択という方法を取ったのですがスマートではありません。

294 名前:デフォルトの名無しさん :03/11/30 19:19
>>293
すまそ、質問の意味とりちがえた

特定のっていうのは選択したときってこと?

295 名前:デフォルトの名無しさん :03/11/30 19:19
できたならそれでいいんじゃないかなぁ

296 名前:293 :03/11/30 19:21
>>294
選択されているときと、選択されていないとき両方の場合が考えられますが、ただ特定の項目の文字列を変更したいということです。

297 名前:デフォルトの名無しさん :03/11/30 19:24
挿入した物を選択したいの?
なら挿入した番号を取得して
LB_FINDSTRINGメッセージとか
LB_SETCURSELとか?

298 名前:286 :03/11/30 20:09
>>292
ありがとうございます
けど別プログラムのウィンドウを子ウィンドウとして取れるんですか?

299 名前:292 :03/11/30 20:39
>>286
ChildWindowFromPoint を使った事ないから正直よくわからんが、
親ウィンドウに NULL、もしくは GetDesktopWindow() を指定すれば、
デスクトップを親に持つ「親ウィンドウ」のハンドルが取得できる気がするぞ。

親ウィンドウのハンドルが取得できれば、あとは煮るなり焼くなり。

300 名前:デフォルトの名無しさん :03/11/30 21:54
boost::thread::yield() の実装って Sleep(0) なんすね。
確かに MSDN にも,Sleep(0) すると他のスレッドに実行権を
引き渡すような事が書かれてありました。
でも実際に while(1) Sleep(0); とすると CPU 使用率が 100% になります。
`yield ' ってのはこんなもんでいいんすか?

301 名前:デフォルトの名無しさん :03/11/30 22:23
>>300
他に動かすべきスレッドが無ければ自分に戻ってくる

302 名前:デフォルトの名無しさん :03/11/30 22:42
他のスレッドに実行権を引き渡すのにもCPUを使用するわけだが。

303 名前:300 :03/12/01 00:38
ああ,さりげなく300getしてたんだ……
>>301>>302
お二方ともサンクスコ。とりあえず"当たり前だ"という事で了解しました。
いまいち `yield' の一般的な存在意義が分かってないんだけど,
マタリと修行しますわん。。。

304 名前:デフォルトの名無しさん :03/12/01 00:52
すいませんが、教えてください。

タスクトレイの通知エリア(MSDNだと"Status Area")に
外部アプリのアイコンが表示されているか調べる方法が
わかりません。
アイコンが消えて、プロセスだけが残るという症状があるので
これを検知したいのです。
いろいろ調べても良くわかりません。
ググッタ時にタスクバーをキャプチャしてBMPで調べている人も
いるようですが、いまいちのようです。
FindWindow()で取得したハンドルで、やりたいのですが・・・

よろしく、お願いします。

305 名前:304 :03/12/01 00:53
すいません。ageてしまいました。

306 名前:デフォルトの名無しさん :03/12/01 01:12
質問はageてもいいと思うけど

307 名前:デフォルトの名無しさん :03/12/01 01:29
>>306
無駄なレスするな、この腐れ甘納豆やろうが

308 名前:デフォルトの名無しさん :03/12/01 01:32
>>307
無駄なレスするな、この腐れ甘納豆やろうが

309 名前:デフォルトの名無しさん :03/12/01 01:37
>>308
無駄なレスするな、この腐れ甘納豆やろうが

310 名前:デフォルトの名無しさん :03/12/01 01:44
甘納豆(゚д゚)ウマー

311 名前:デフォルトの名無しさん :03/12/01 03:08
無駄なこともいいかもw

312 名前:デフォルトの名無しさん :03/12/01 12:00
>>311
無駄な事をたくさんする事はスピッツ公認です

313 名前:デフォルトの名無しさん :03/12/01 16:58
今、32bitOSで動くメモリサーチツール作ッてるんだけど
あるプロセスのメモリを全部参照するには、ぶら下ってるモジュール毎にToolhelp32ReadProcessMemoryで取得しれば全部取れますか?
この方法ではグローバル変数とか漏れますか?
教えてエライ人

314 名前:デフォルトの名無しさん :03/12/01 19:13
それ使うとwindows以外ではサーチできないよ

315 名前:デフォルトの名無しさん :03/12/01 19:15
> windows
9x系?


316 名前:デフォルトの名無しさん :03/12/01 19:19
win32APIだからいいんじゃね?

317 名前:デフォルトの名無しさん :03/12/01 21:49
わかっていること。
元のプログラムはinetd をつかったサーバで、
ファイルやネットワークの読み書きは標準入出力を使っています。

これをwinxp + borland c++ 5 で動くようにしたい。
自分の開発環境にはflock や lockf や fcntlはありまえん。

とりあえずファイルの排他処理をやろうと思っています。
io.h の中にそれらしき関数を見つけました。
lock, locking, unlock。
lockとunlockを使えばうまく処理できそうなのですが。
代案はありますか? よろしくお願いします。

318 名前:デフォルトの名無しさん :03/12/01 21:57
次の人どうぞー

319 名前:デフォルトの名無しさん :03/12/01 21:58
>>313
全部参照するなら、VirtualQueryExでヒープ情報を取得してから、その領域
に対してReadProcessMemoryって感じ。
詳しくはMSのWalkerっていうサンプル(VC++6.0にも付いてくる)でも見てくれ。

320 名前:デフォルトの名無しさん :03/12/02 00:14
>>317
普通にCreateFile()で排他制御できると思うが。


321 名前:デフォルトの名無しさん :03/12/02 02:54
だれかSDKでのブラウザの作り方教えてくれー.
関連するAPIだけでもいいんで.
MFCならCHtmlViewを使えばええみたいやけど.


322 名前:デフォルトの名無しさん :03/12/02 03:44
IWebBrowser2

323 名前:デフォルトの名無しさん :03/12/02 08:14
Donutのソース嫁

324 名前:313 :03/12/02 09:32
>>319
ありがと〜
その辺で調べてみます

325 名前:デフォルトの名無しさん :03/12/02 12:13
Win2k VC++6.0 で OLE によるドラッグ&ドロップを実現させようとしていて、
サンプルソースをネットで見つけたもののC++環境でコンパイルが通らなくて困っています。

oleidl.h の IDropTargetVtbl型の変数を .cppのソースで宣言した時に、
oleidl.h に IDropTargetVtbl構造体の定義がしてあるにもかかわらず、
コンパイル時にIDropTargetVtbl型が定義されてないというエラーがでます。

oleidl.hのIDropTargetVtblの定義の前には、/* C style interface */というコメントがあり、
これは、Cからしか呼び出せないのでは?と思っています。
どうにかして、C++から呼び出す方法はないのでしょうか?
APIの質問というよりかは、C++言語の質問だと思われますが、
よろしくお願いします。

ちなみに、OLEのサンプルソースは
http://www.nakka.com/lib/ の OLEドラッグ&ドロップ にあります。

326 名前:デフォルトの名無しさん :03/12/02 12:18
わからないけど

extern (C)とかやってみたら?
あてずっぽでごめん

327 名前:デフォルトの名無しさん :03/12/02 12:22
VC++ならIDLをimportして継承したほうが楽でいいと思うが。

328 名前:デフォルトの名無しさん :03/12/02 13:20
C++ならVtblはいらない。
直接メソッドを呼び出せる。


329 名前:デフォルトの名無しさん :03/12/02 13:38
>>326 ありがとうございます。やってみたけどダメでした。
>>327 ありがとうございます。もっと、簡単な方法を探してみます。
>>328 ありがとうございます。
>直接メソッドを呼び出せる。
多分これでしょうか?
ttp://www.alles.or.jp/~baron/drag.html
このサンプルプログラムでも、方法がよくわからないです。( ´Д⊂
わかりやすいサンプルかなんかないでしょうか?

330 名前:313 :03/12/02 13:57
>今、32bitOSで動くメモリサーチツール作ッてるんだけど
>あるプロセスのメモリを全部参照するには、ぶら下ってるモジュール毎にToolhelp32ReadProcessMemoryで取得しれば全部取れますか?
>この方法ではグローバル変数とか漏れますか?
>教えてエライ人

もっと根本的な問題があるのです。
プロセスに割当てられたメモリで参照可能な領域の
開始アドレスとサイズを取得する方法が欲しいのです。
(0x00000000 〜 0x7FFFFFFFで内で参照可能/不可能な領域がある)
モジュール単位で検索した場合、一応クリアできると思っていたのですが
その様な情報を取得できる関数などありませんでしょうか?
動作環境はwin98/win2000です

331 名前:デフォルトの名無しさん :03/12/02 14:02
>>330
めもりくりーなーのサンプルプログラムがどこかにあったと思う
探してみては?

332 名前:デフォルトの名無しさん :03/12/02 14:58
現在、explorerのタイトルバーからフルパスを取得しています。
しかし、この方法ではフォルダオプションの設定でフルパス表示になっている
必要があります。この設定に関係なく、explorerウインドウのフルパスを取得
することは可能なのでしょうか?


333 名前:デフォルトの名無しさん :03/12/02 15:15
yes/no で答えられるからやり方について質問したほうがいい(とアドバイス

334 名前:332 :03/12/02 15:30
332です。
可能であればやり方をおしえてください。
SHGetSetSettingsあたりか、レジストリを変更してフルパスを得てから元に戻す
というのも考えましたが、勝手に設定をいじるというのは避けたいと考えています。
よろしくお願いします。

335 名前:デフォルトの名無しさん :03/12/02 16:09
キーロガーを作成してるのですが
win起動時に立ち上げるためスタートアップにショートカットを作成しています。
これだとばれてしまうのでスタートアップに入れないで起動させるには
どのようにすればよいでしょうか?

336 名前:デフォルトの名無しさん :03/12/02 16:10
run keyでも使え

337 名前:デフォルトの名無しさん :03/12/02 16:17
>>336
thx.レジストリだね!

338 名前:デフォルトの名無しさん :03/12/02 16:55
エクスプローラ等でファイルのプロパティの、
選択できるラベルみたいのを実装したいのですが、どうしたらいいですか?

EM_SETREADONLY を送ればリードオンリになり色もそれらしくなるのですが枠線が消えてくれません。

よろしくお願いします。



339 名前:デフォルトの名無しさん :03/12/02 17:09
>>338
いまいちよく分からんがダイアログに貼り付けたエディットコントロールの
枠を消したいってことか?

340 名前:338 :03/12/02 17:13
そうです。
わかりますか?


341 名前:デフォルトの名無しさん :03/12/02 17:16
エディットコントロール貼り付ける段階でウィンドウスタイルから枠の表示を消しとけ。

342 名前:338 :03/12/02 18:23
WS_BORDER とは違う枠線みたいです。


343 名前:デフォルトの名無しさん :03/12/02 18:26
通常は枠がないんじゃないの?

344 名前:デフォルトの名無しさん :03/12/02 18:29
WS_EX_CLIENTEDGEあたりじゃないか?

345 名前:デフォルトの名無しさん :03/12/02 19:03
CreateDIBSection()でつくるHBITMAPの、
ピクセルフォーマットを、R5 G6 B5 にする方法しってたら偉いから、教えて。
または、HBITMAPのピクセルのアドレスを取得する方法。


346 名前:デフォルトの名無しさん :03/12/02 19:46
R5 G6 B5フォーマットってあるの?

347 名前:329 :03/12/02 19:54
解決しました。
ありがとうございました。

348 名前:304 :03/12/02 19:55
すいません。レスがつかないんで・・・
やっぱり、
>>304
は難しいですかね。通知領域のサイズを調べれば、アイコンの数くらいは
わかるんですけど

349 名前:デフォルトの名無しさん :03/12/02 19:56
>>345
CreateDIBSectionにポインターのアドレス渡すだろ?
そいつにDIBピクセルの先頭が入る。

350 名前:デフォルトの名無しさん :03/12/02 20:36
>346
あるよ。おれの16ビットモードは、565。
>349
それだと555になってしまうのよ。
565にする方法を教えて教えて教えて教えて教えて教えて教えて教えて教えて教えて

351 名前:デフォルトの名無しさん :03/12/02 20:38
教えて君に変貌したので無視推奨

>>350
そんなに知りたければ自分で調べつくしてください

352 名前:デフォルトの名無しさん :03/12/02 20:44
荒らしの>>351は無視推奨

353 名前:デフォルトの名無しさん :03/12/02 20:49
普通に演算して変換してやりゃいいだろうに……
プログラマーならだれでも出来るだろ。最適化できるかどうかはともかく。


354 名前:319 :03/12/02 20:54
>>330
>プロセスに割当てられたメモリで参照可能な領域の
>開始アドレスとサイズを取得する方法が欲しいのです。

だからその領域を取得するのがVirtualQueryExだっちゅーの

355 名前:デフォルトの名無しさん :03/12/02 20:59
>>345
BITMAPV4HEADERかBITMAPV5HEADER

>>350
349はR5G6B5のことじゃなくて
>または、HBITMAPのピクセルのアドレスを取得する方法。
これに対する回答だと思うが。

356 名前:デフォルトの名無しさん :03/12/02 21:18
>304
タスクバーは再起動すると、もっかいアイコン入れてね〜ってメッセージを
トップレベルのウィンドウに送ってくるよ。

357 名前:デフォルトの名無しさん :03/12/02 23:34
ここみればハッシュばっちり分かるというサイトは無いものか・・・

358 名前:デフォルトの名無しさん :03/12/03 00:05
>>335
Autoexec.bat に入れるといいよ。

359 名前:デフォルトの名無しさん :03/12/03 00:10
>>356
> 外部アプリのアイコンが表示されているか調べる
だから、それは違うんじゃないかと。

360 名前:304 :03/12/03 00:58
>>356, 359 さん
レスありがとうございます。

>>359さんの書かれている通りです。
外部アプリが、自作ものならそれなりに対応はあるんですが、
市販のものなので無理です。
取り合えず、通知領域のハンドルは

HWND hTaskBar = ::FindWindowEx(0, 0, "Shell_TrayWnd", NULL);
HWND hTaskTray= ::FindWindowEx(hTaskBar, 0, "TrayNotifyWnd", NULL);
HWND hPager = ::FindWindowEx(hTaskTray, 0, "SysPager",NULL);
HWND hChild = ::FindWindowEx(hPager,0,"ToolBarWindow32","通知領域");

とすれば、得ることができ、そのサイズを調べれば、アイコンがいくつ
表示されているかわかります。
と、今のところここまでなんです・・・・

361 名前:デフォルトの名無しさん :03/12/03 01:12
>>360
タスクバーが縦になっててもサイズから分かるのか。

362 名前:304 :03/12/03 01:27
>>361
確かに縦になって、2列以上になるとわかりませんね。

363 名前:デフォルトの名無しさん :03/12/03 07:37
>355
サンクス。
BITMAPV4HEADER使ってできた。Googleで調べて、
ttp://www3.alpha-net.ne.jp/users/walther/kkclock/points.htm
を参照した。
これで、ピクセルフォーマットの違いを吸収できるぞ。ニヤリ

364 名前:デフォルトの名無しさん :03/12/03 11:25
任意ファイルをウインドウにドロップしたら、ウインドウプロシージャ内で、
ダイアログボックス(DialogBox()を使って)開くようにしているんですが、
そのウインドウプロシージャ内の変数の内容を、ダイアログプロシージャに
送ることは出来ませんか?

出来ないとしたら何か良い方法は無いでしょうか?
今、やり方が分からなくてのでグローバル変数を使っているのですが
辛くなってきて・・・

365 名前:デフォルトの名無しさん :03/12/03 11:35
>>364
構造体にして DialogBox の時に送れば?

構造体を関数が保管して

Kouzou* Saved (Kouzou* kz)
{
static Kouzou* MyKouzou;
return MyKouzou = ((kz==NULL)?MyKouzou : kz);
}

とすれば NULL を送れば現在の構造体を受け取れるようにもできるのかなと思う

366 名前:デフォルトの名無しさん :03/12/03 11:36
>>365
一行目と3行目以降は全く関係ないです(紛らわしくてゴメンナサイ

367 名前:デフォルトの名無しさん :03/12/03 11:37
任意のウィンドウメッセージ(WM_APP+n)を定義して渡せば?
ある程度の量があるなら構造体なりクラスなりにしてポインタを。

368 名前:デフォルトの名無しさん :03/12/03 12:40
↑っていうよりまずモードレス使わなきゃなんじゃないの…?

369 名前:デフォルトの名無しさん :03/12/03 12:43
>>368
関数に保管しておけば

WM_INITDIALOGの部分で読み取れるから大丈夫

370 名前:デフォルトの名無しさん :03/12/03 12:46
>>364
DialogBoxParam を使うのが定石です。

371 名前:デフォルトの名無しさん :03/12/03 16:02
ホットキーを使っていつでもウインドウを呼び出せるようにしたいのですが、
SetForegroundWindow() だと メッセージボックスが表示されていた場合に
メッセージボックスの親ウインドウがアクティブになってしまって
あまりうれしくありません。ALT+CTRLで切り替えたときのように、
メッセージボックスが出てればそちらがアクティブになるような方法は
ありませんでしょうか?

OSはMe/2000/XPですが、最低XPでさえ動けば。。。

372 名前:デフォルトの名無しさん :03/12/03 16:37
>>371
事故解決しますた。
GetParent(GW_ENABLEDPOPUP)
で逝けました。
こっちの方がいいYO!という方法がありましたらご教授いただけましたら幸いです。

373 名前:デフォルトの名無しさん :03/12/03 21:09
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpwinui/html/_win32_insendmessageex.asp

同じプロレスって言うのは同じ団体ってことでしょうか。

374 名前:364 :03/12/04 10:57
>365-370
レスありがとうございます。
構造体にデータを入れて、ダイアログプロシージャに送る事で
解決できました。
他のことにも応用できそうで勉強になりました。
本当にありがとうございました。

375 名前:デフォルトの名無しさん :03/12/04 21:26
WM_INITDIALOGでSendMessageで親に問い合わせるとか

376 名前:デフォルトの名無しさん :03/12/05 13:19
InsertMenuItemアイテムでシステムメニューに追加するとき
最後に追加する方法が知りたいのでお願いします。

377 名前:デフォルトの名無しさん :03/12/05 13:33
質問時はあげないと誰も気づかないぞー

>InsertMenuItemアイテムでシステムメニューに追加するとき
>最後に追加する方法が知りたいのでお願いします。
この最後って「最後尾」って事でいいんだよね?

某書籍のサンプル
hMenu = GetSystemMenu (hwnd, FALSE);

AppendMenu (hMenu, MF_SEPARATOR, 0, NULL);
AppendMenu (hMenu, MF_STRING, IDM_SYS_ABOUT, TEXT ("About..."));
AppendMenu (hMenu, MF_STRING, IDM_SYS_HELP, TEXT ("Help..."));
AppendMenu (hMenu, MF_STRING, IDM_SYS_REMOVE, TEXT ("Remove Additions"));


378 名前:デフォルトの名無しさん :03/12/05 13:38
>>377
さんくす。
MSDNに
この関数は InsertMenuItem 関数に取って代わられましたが、まだ使用できます。
ってあったから使わないほうがいいかと思ったのですが・・
その辺、どうなんでしょう。

379 名前:377 :03/12/05 13:41
MSDNって聞いて早速 MSDN で調べたら
GetMenuItemCount
こんなものが出たぞ、俺も知らなかったが直感っていいもんだな

詳しくは自分でMSDNみてみそ

380 名前:デフォルトの名無しさん :03/12/05 13:44
>>379
どもっ!
自分もやってみたんですけど
InsertMenuItem(hMenu, -1, TRUE, &mi);
ってやったら最後に追加されました。これって裏技かな

381 名前:デフォルトの名無しさん :03/12/05 13:46
CreateFile
ReadFile
CloseHandle

を使用して「一行だけ」文字列を抜き出す方法ってありますか?
fgetsなら一行、もしくは指定した文字数だけ受け取れますがReadFileだとファイルから全部抜き出して、
改行の部分まで for や while でループしながら探索しなくちゃでき無そうなんですけど…

やっぱりfgetsを使ったほうがいいでしょうか?
何か一行だけファイルから抜き出すいい方法があれば教えてください。


382 名前:デフォルトの名無しさん :03/12/05 13:47
>>380
さぁ?
仕様じゃないのかな
ListBoxでも -1 指定して Insert すると最後になるぽ

383 名前:デフォルトの名無しさん :03/12/05 13:50
>>382
でも、キモイので教えていただいた方法でやります。
ありがとうございました。

384 名前:381 :03/12/05 13:51
質問ageし忘れた…鬱

385 名前:デフォルトの名無しさん :03/12/05 14:00
>>381
ReadFileで1byteずつ読んで処理するのが面倒ならC/C++標準ライブラリ
使っとけ。そのためのライブラリだ。

俺ならstd::getline()使うが。

386 名前:デフォルトの名無しさん :03/12/05 14:03
>>385
わかりました、ありがとうございます。

getline()はC++ですよね。
C++はやってないので調べてみて使ってみたいと思います

387 名前:デフォルトの名無しさん :03/12/05 15:43
質問させていただきます。
CreateProcessで起動したコンソールアプリケーションの標準出力を、別のところに出す方法を模索しています。
(hello.exeは、printf("hello");だけ行うコンソールアプリケーションです)
色々検索などして調べました結果、下記のようにしてファイルへの出力はできたのですが、
最終的にはダイアログのエディットボックスに出力したいのです。

残念ながら
sui.hStdOutput = GetDlgItem(hWnd, IDC_MAIN_EDIT);
にするだけでは出力されませんでした。
何か知恵をお貸しいただければ幸いです。

388 名前:デフォルトの名無しさん :03/12/05 15:44
HANDLE hWrite;
SECURITY_ATTRIBUTES sa;
STARTUPINFO sui;

sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
hWrite = CreateFile("out.txt", GENERIC_WRITE, FILE_SHARE_READ, &sa, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
ZeroMemory(&sui, sizeof(sui));
sui.cb = sizeof(STARTUPINFO);
sui.dwFlags = STARTF_USESTDHANDLES;
sui.hStdInput = NULL;
sui.hStdOutput = hWrite;
sui.hStdError = NULL;
CreateProcess("hello.exe", "", NULL, NULL, TRUE, 0, NULL, NULL, &sui, &pinfo );
CloseHandle(hWrite);

389 名前:デフォルトの名無しさん :03/12/05 15:55
>>380
裏技もなにも、第2引数の型が…

390 名前:デフォルトの名無しさん :03/12/05 16:02
>387
パイプを作れ。
説明は面倒なので自分で調べるか、他に親切な人を捜せ。

391 名前:デフォルトの名無しさん :03/12/05 16:02
>>389
あぁ、そういうことか
なるほろw

392 名前:デフォルトの名無しさん :03/12/05 16:18
>390
ありがとうございました。解決しました!

393 名前:デフォルトの名無しさん :03/12/06 10:23
エディットコントロールを使っています。
入力を10進数に限定するのは ES_NUMBER でできました。
入力を16進数に限定するにはどうすればよいのでしょうか?
よろしくお願いします。


394 名前:デフォルトの名無しさん :03/12/06 10:32
サブクラス化したら?

395 名前:デフォルトの名無しさん :03/12/06 11:33
他のアプリがMIDI鳴らしている時に、
それをプログラムを終了せずに、強制的に止めさせて、
自分の鳴らしたいMIDIを鳴らす方法はありますか?

SDKの方は英語しか見つからなかったので、
よく分からないもので。

396 名前:デフォルトの名無しさん :03/12/06 11:46
沢村か?

397 名前:デフォルトの名無しさん :03/12/06 12:00
 マウスが、自分のウィンドウ上になくても、マウスカーソルを変えたいのですが、
どうしたらいいでしょうか?


398 名前:デフォルトの名無しさん :03/12/06 12:01
コントロールパネルのマウスの設定でお好みのマウスカーソルをお選びください

399 名前:デフォルトの名無しさん :03/12/06 12:03
>>398
解決しました。

400 名前:デフォルトの名無しさん :03/12/06 12:05
 いえ、プログラムで、一時的にマウスカーソルをかえたいんです。

401 名前:デフォルトの名無しさん :03/12/06 12:12
>>395
そのアプリにそのためのAPIが用意されてないと難しいだろ。
試しにDDEでopenコマンドでも送ってみたら?


402 名前:デフォルトの名無しさん :03/12/06 12:45
割り込んですいません。DDEの話がでていたので

SDIで作成したアプリを、ある拡張子に関連付けしたのですが、
フォルダオプションのファイルの種類で確認すると詳細設定がでて
こないんです。
InitInstance()は、自動生成したものを使っていますが、何か
特別なことをするのでしょうか?

ご存知でしたら、教えてください

403 名前:デフォルトの名無しさん :03/12/06 14:02
2ch関係のツールを作っています。

コテハンA・・・・☆☆☆☆
コテハンB・・・・☆☆☆☆

このような感じでエディットボックスなどに出力して
それをコピペで2chに貼り付けできるような仕組みを
考えています。コテハンの長さにあわせその後の・の数を変えて
見やすいようにしたいのですが、任意の文字列の幅を調べるには
どうすればよいのでしょうか?

404 名前:デフォルトの名無しさん :03/12/06 14:08
GetTextExtentPoint32
GetCharABCWidths

405 名前:403 :03/12/06 15:16
>>404
ありがとうございました。

406 名前:デフォルトの名無しさん :03/12/06 17:34
>>402
CLSID レジストリ 拡張子


407 名前:デフォルトの名無しさん :03/12/06 17:35
起動しているだけで他のプロセスが出力したOutputDebugStringの内容を
受け取るソフトウェアがあるのですが、それはどうやっているのでしょうか?

googleで検索してみたのですが、
exeを起動してそのexeだけの出力を受け取る方法しか見つかりませんでした。

408 名前:402 :03/12/06 17:46
>>406
ありがとうございます。 ヒントを元に、ググッてみます。

409 名前:デフォルトの名無しさん :03/12/06 19:07
>>407
その方法がのってたページを晒せ

410 名前:デフォルトの名無しさん :03/12/06 23:42
>>409
知りたい? 知りたい?


教えてあ〜げないw

411 名前:デフォルトの名無しさん :03/12/07 01:38
キーフックについての質問っすー.

int SetHook()
{
hHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyHookProc, hInst, NULL);

if (hHook == NULL) {
MessageBox(NULL, "SetWindowsHookEx失敗です", "Error", MB_OK);
return FALSE;
} else {
bHook = TRUE;
return TRUE;
}
}
int EndHook()
{
DWORD dwError;
if (UnhookWindowsHookEx(hHook) == TRUE) {
bHook = FALSE;
return TRUE;
} else {
dwError = GetLastError();

MessageBox(NULL, "UnhookWindowsHookEx失敗です", "Error", MB_OK);
return FALSE;
}
}
SetHookして,hHookはNULLでない値をもらってフックできているはずなんですが,
EndHook時に,UnhookWindowsHookExがTRUEを返さず,失敗します.
GetLastErrorでエラーコードを調べたところ「無効なフックハンドラだ」といわれました.
何が原因なんでしょうか?


412 名前:デフォルトの名無しさん :03/12/07 02:08
>>411
とりあえず UnhookWindowsHookEx() は成功時に非 0 を返すとなってるから TRUE との比較は邪魔。
で、それをはずしても失敗している場合だけど、hHook が DLL 内のグローバル変数で、かつ
SetHook() したプロセスと違うプロセスから EndHook() したりとかしてない?

413 名前:デフォルトの名無しさん :03/12/07 06:47
リストビューをサブクラス化している。
アプリケーション終了時にはプロシージャを元どうりにして
サブクラス化を解除しないでも問題ないよな??
詳しく知らないので誰か教えて・・・

414 名前:デフォルトの名無しさん :03/12/07 06:50
s/元どうり/元どおり/g

415 名前:デフォルトの名無しさん :03/12/07 07:50
>>413
アプリ終了とWM_NCDESTROYはどっちが先?

416 名前:413 :03/12/07 14:18
>>413
レス遅れてすいません。
良くわからないのですがWM_CLOSE
またはWM_DESTROYで元に戻すと思います。

417 名前:415 :03/12/07 14:51
DispatchMessageされる時点でGWL_WNDPROCが指し示す先に
関数の実体がなくなっているとSTOPダイアログなわけだが
最後にDispatchMessageされるのと、関数がアンロードされるのは
どっちが先だと聞いたつもりなんだが
SendMessageしかり

418 名前:415 :03/12/07 14:52
もしかしてウインドウではなくウインドウクラスを書き換えているつもりか?

419 名前:413 :03/12/07 15:19
質問が意味不明で済みません。

WM_CREATEで
Org_Proc=(WNDPROC)SetWindowLong(hListView, GWL_WNDPROC, MyListViewProc);
としたのを
WM_CLOSEで
SetWindowLong(hListView, GWL_WNDPROC, Org_Proc);

として、もとに戻しさないでも問題ないのかということです。

個の場合ウインドウを書換えてるのでしょうか?

420 名前:デフォルトの名無しさん :03/12/07 15:43
基本的なことですいませんが、
方向キーを押してもWM_CHARが発生しません。
方向キーが押されたときになにか処理するためにはどうしたらいいですか?

けっこうぐぐったんですけど見つからず…。

421 名前:デフォルトの名無しさん :03/12/07 15:46
WM_KEYDOWN
wParamに仮想キーコードが入る

422 名前:420 :03/12/07 15:53
A〜ZとかはWM_KEYDOWN→TranslateMessage→WM_CHARだけど、
方向キーはWM_KEYDOWNでやらないとだめってことですか。

どのキーならWM_CHARがくるのか…は自分で調べますわ。
ありがとうございますた。

423 名前:420 :03/12/07 16:03
後から見た人が間違えるといけないので…

>wParamに仮想キーコードが入る
仮想キーコードはHIWORD(lParam)でした。

424 名前:デフォルトの名無しさん :03/12/07 17:21
>>423
>>wParamに仮想キーコードが入る
で正しくないか?
WM_CHARは、SHIFT押しながら押したりIME入力で確定したときにも送られるので、注意が必要。


425 名前:デフォルトの名無しさん :03/12/07 18:20
ShellExecuteで起動したプロセスの終了待ちってどうやればいいんですか?
WaitForSingleObjectにHandle渡しても怒られます。

426 名前:デフォルトの名無しさん :03/12/07 18:30
>>425

>WaitForSingleObjectにHandle渡しても怒られます。

変な表現使わずどうなったのか正確に書きなさい。

427 名前:デフォルトの名無しさん :03/12/07 18:34
VC++6.0 でプログラムを作っているのですが、
毎回メモリ監視ソフトで見ていると実行終了時に必ず2kbずつリソースが減っています。
これはメモリの開放し忘れが原因なんでしょうか?
デバッグ時もリリース時も同じ状態です。でもエラーは全く出ていません。

428 名前:デフォルトの名無しさん :03/12/07 19:22
>>427
お漏らしとはそういうもんです。


429 名前:415 :03/12/07 19:31
>>419
SetClassLongという関数を知っているか?

430 名前:名無し@沢村 :03/12/07 20:04
>>425
ShellExecuteEx()

431 名前:デフォルトの名無しさん :03/12/08 12:28
まさかとは思うけど,っていうか,この問題は私が別の OS を買って
その上でソフトを動かせばきっと解決するとは思うんだけど……

他プロセスが持ってるファイルハンドルを強制的にフラッシュさせるか,
WriteFile() でバッファリングさせない方法とかがあったりしますか?

とある市販 USB 機器からデータを転送してくるソフトがありますが,
私の OS の USB ドライバ周辺が不安定なせいか (多分このせい…WinMe だし)
データの転送が終わったはずなのに,猶もデータを待ち続けているようなのです。
ソフトには「中断」ボタンがあるんだけど,押しても機能していないっぽいし。
結局ソフトを強制終了させるしかなく,当然,ファイルハンドルは正常に
クローズされず,バッファに残ったデータはファイルに書き出されません。

ソフト自身が独自にバッファを持っていたら,それはもう仕方がないとしても
この問題を解決する方法とかはあったりするもんでしょうか?

432 名前:デフォルトの名無しさん :03/12/08 12:30
>>431
保存先をフロッピーとかにしたら?

433 名前:デフォルトの名無しさん :03/12/08 12:32
メーカーに聞け

434 名前:431 :03/12/08 12:33
>>432
あ,すいまそん。
ファイルサイズは 600MiBytes〜1GiBytes です。ごめなさい。

435 名前:431 :03/12/08 12:39
>>433
そか,それが一番かも分からんですね。
「中断」ボタソが利かないのはソフトのバグだろうし。
ありがとうです。

436 名前:デフォルトの名無しさん :03/12/08 13:36
マイコンピュータ→プロパティ→パフォーマンス→ファイルシステム→
トラブルシューティング→すべてのドライブに遅延書き込みを行わない

437 名前:デフォルトの名無しさん :03/12/08 15:47
>>431
>他プロセスが持ってるファイルハンドルを強制的にフラッシュさせる
ヴォリュームをアンマウントすると強制的にフラッシュされるはずだが

>WriteFile() でバッファリングさせない方法とかがあったりしますか?
WriteFile()というかCreateFile()でFILE_FLAG_WRITE_THROUGH

438 名前:デフォルトの名無しさん :03/12/08 16:51
オープンソースなドライバじゃないんだから
そんな細かい話したってどうにもならないだろ。

439 名前:デフォルトの名無しさん :03/12/08 18:43
すまんかった

440 名前:デフォルトの名無しさん :03/12/08 18:56
俺も変わりに謝ろう

         < ̄ ̄)
            ) (
           /====ヽ
          (  す  )ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           ヽ__/y )ヽ、 < うわーそれで見逃して〜
          (´Д`;/ / , ヽ、 \___________
           |`ヽ/ / /`  )
           .し(、__/〉 彡 ノ
                /_ 〈
               ノ ̄|ス|~\
             / /|マ|、 \
            / / ,ヘ|ソ| \  \_____      ┌──┐  
             (__,_|/  ̄   \_ |___ (     └──┘  
                            \_)       ↑

                                     諭吉 



441 名前:デフォルトの名無しさん :03/12/08 19:45
>>412
レス遅れてすいません!!
ありがとうございますー.試してみます!!

442 名前:431 :03/12/08 21:29
>>436
どうもです。
あ,それかっ!?……と思ったら,既にその設定になっていました。

ところで,WriteFile() を少し行って強制終了させるという実験を
してみたんだけど,きちんとフラッシュされますね。
やはり例のソフトは自分でバッファを持ってるのかも知れません……

>>437
どうもです。興味深いです。
アンマウントというと,FSCTL_DISMOUNT_VOLUME あたりでしょうか。
脳内会議により週末に新しく HDD と Win2000 を購入する事が決まったので
いろいろ実験してみたいと思います。

レスくれた皆様,サンクスコです。

443 名前:デフォルトの名無しさん :03/12/08 22:57
>>442
それって AVI ファイルとか書いてたりしますか?

444 名前:デフォルトの名無しさん :03/12/09 01:59
WNDCLASSEX構造体で質問です。

hbrBackgroundメンバに関してですが、これへの代入方法として

wndclass.hbrBackground = (HBRUSH) GetStockObject (GRAY_BRUSH);

という方法でブラシのハンドルを渡す方法と、MSDNのリファレンスにある
color value を直接代入する方法があるようですが、後者の方は
the value 1 must be added to the chosen color という但し書きが
あるのですが、これは実際に使用するときは1を加算せよということ
なんでしょうか?

×間違い?
wndclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

○正しい?
wndclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND+1;

下の使い方が正しいということなんでしょうか?
実際にやってみると、どちらでも色に違いがないので、
よくわからんなぁと思っているのですが。


445 名前:デフォルトの名無しさん :03/12/09 02:02
>>444追伸
COLOR_SCROLLBARの場合は+1をしないと
NULLブラシのようになってしまうようです。
ということはやっぱ+1が必要なのかな。

446 名前:デフォルトの名無しさん :03/12/09 11:39
>>445
×間違い
wndclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
wndclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND+1;
○正しい
wndclass.hbrBackground = (HBRUSH) (COLOR_BACKGROUND+1);

447 名前:デフォルトの名無しさん :03/12/09 11:44
リストビューに、3列3行の項目を作ったのですが、
一番左のセルしか選択できません。
全てのセルに対して、クリックして選択できるようにするには
どうしたらいいんでしょうか?

448 名前:デフォルトの名無しさん :03/12/09 12:53
1列3行のリストビューを3つ作ればよい

449 名前:447 :03/12/09 13:52
>>448
マ、マジですか?
そーいった力技以外に方法は無いのでしょうか?


450 名前:デフォルトの名無しさん :03/12/09 13:55
>>449
CListCtrl *listctrl=(CListCtrl*)GetDlgItem(IDC_LIST1);
listctrl->SetExtendedStyle(LVS_EX_FULLROWSELECT);

451 名前:デフォルトの名無しさん :03/12/09 14:09
 マウスの動作を検出したいのですが、以下のコードだと画面上の
座標は取得できました。マウスポインタの動作とは関係なくマウス
そのものの移動量を取得したいのですが何か方法はないのでしょうか?

現在の画面上の座標を求めるコード:
case WM_MOUSEMOVE:
c_x = LOWORD(lParam);
c_y = HIWORD(lParam);


452 名前:デフォルトの名無しさん :03/12/09 14:43
DirectInput なんかが良いのでは>>451


453 名前:デフォルトの名無しさん :03/12/09 14:45
>>451
マウスそのものの移動量?
俺のマウスはコードレスだからどこまででも移動できるぞ


454 名前:デフォルトの名無しさん :03/12/09 14:45
>>452
あ・・・(゜0゜;)DirectInputの範囲なのですね。
やってみます。

455 名前:デフォルトの名無しさん :03/12/09 14:46
>>453
どこまでも移動できる事を検知したいのです...

456 名前:デフォルトの名無しさん :03/12/09 14:51
マウスメッセージじゃ駄目だろ

457 名前:452 :03/12/09 15:14
ついでに↓

お絵描きソフトなんかでマウスやペンの移動履歴を高精度で
取りたい場合には GetMouseMovePointsEx ね。

458 名前:452 :03/12/09 15:15
(追伸↑は画面内での移動に限られるから、451的用途には使えない)


459 名前:デフォルトの名無しさん :03/12/09 15:17
>>454
お手軽に済ませるなら、SetCursorPos で画面の真ん中に移動して、
WM_MOUSEMOVE でどれだけ移動したかを検出して自前で積算する、
って手もあるよ。マウスカーソル表示しないならこれでも十分。

460 名前:デフォルトの名無しさん :03/12/09 18:48
>>446
そういうもんですか。どもども!



461 名前:442=431 :03/12/09 19:29
>>443
"それ" とは,私が USB 機器からダウソしているファイルでしょうか?
ファイルは m2t,MPEG-2 Transport 形式ファイルです。
もっと言えば,その USB 機器とは日本デジタル家電の「ロクラク」です。
細かなトラブルもあったりするけど,なかなかいいヤシです。

462 名前:デフォルトの名無しさん :03/12/09 22:03
>>460
wndclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND+1;
wndclass.hbrBackground = (HBRUSH) (COLOR_BACKGROUND+1);

この2つの違いを理解してないな。


463 名前:デフォルトの名無しさん :03/12/09 23:08
>>461
なるほど。TS ならAP等ハングしても受信できてた部分だけで使えますね。
多少アレな手段ですけど、apihijack (google で引いて) で CerateFile を
フックしてFILE_FLAG_WRITE_THROUGHを立てるなんて手もあります
(apihijack のhookは単一の coff ファイルにしか出来ないので、loadlibrary
や cocreateinstance もフックしてロードされたdllをさらにフックする必要も
あるかも知れません)。 MS の "Detours" っていうAPIフックライブラリでも
同様のことが出来そうですが、こちらは使ったことがありません。


464 名前:デフォルトの名無しさん :03/12/10 11:39
>>463
どうもです。apihijack について早速 codeproject のページを眺めてみました。
なんとも過激ですね(笑い)。オラなんだかワクワクしてきました。
ありがとうです。

465 名前:デフォルトの名無しさん :03/12/10 16:19
VC++.NETで、
ウインドウプロシージャの中で、
MessageBoxをたくさん呼び出した後に、
PostQuitMessageを呼び出してもプログラムが終了されないのですが何故でしょうか?

466 名前:デフォルトの名無しさん :03/12/10 16:44
MessageBoxはモーダルじゃないの?
プロシージャから戻らないとか・・

467 名前:デフォルトの名無しさん :03/12/10 17:19
>>465
たくさんというのが、どういう状況か想像できない。
>>466の言うとおり、基本的にモーダルじゃないっけか?

468 名前:デフォルトの名無しさん :03/12/10 19:44
あるウィンドウParentがあって、Parentに対してウィンドウプロシージャParentProcが
関連付けられています。そのウィンドウを親ウィンドウとするウィンドウChildで
発生するメッセージはParentProcで捕まえられますが、ウィンドウChildを
親ウィンドウとするGrandChild

469 名前:続き :03/12/10 19:48
で発生するメッセージはParentProcでは捕まえられません。
この場合、ウィンドウGrandChildで発生するメッセージはどのように捕まえれば
いいのでしょうか?
ウィンドウParentのウィンドウクラスはプログラムの開始時に登録したもので、
ウィンドウChildとウィンドウGrandChildのウィンドウクラスは最初から登録されている
STATICです。つまり、ウィンドウChildとウィンドウGrandChildはスタティックコントロール
です

470 名前:デフォルトの名無しさん :03/12/10 19:49
age

471 名前:デフォルトの名無しさん :03/12/10 20:19
ageるな!ぼけ!

472 名前:デフォルトの名無しさん :03/12/10 20:29
>>468
そのメッセージってSTN_系のか?
もしそうなら、Childのプローシージャでしか
捕まえられないのでは?


473 名前:468 :03/12/10 20:55
>>472
>そのメッセージってSTN_系のか?

そうです。STN_CLICKEDを取得したいのですが。

>もしそうなら、Childのプローシージャでしか
>捕まえられないのでは?

やっぱりそうなんでしょうか。_| ̄|○
SetWindowLong関数でChildのウィンドウプロシージャのアドレスをParentのそれに
変えてみたりもしたんですが、これだとGrandChildのメッセージは一応取得できるけど、
なんか描画がヘンです(Childが再描画されない)

474 名前:デフォルトの名無しさん :03/12/10 21:05
検索してやったぞ、あとはガンバレ
http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&q=%83T%83u%83N%83%89%83X%89%BB%81@%83v%83%8D%83V%81%5B%83W%83%83&lr=


475 名前:デフォルトの名無しさん :03/12/10 21:09
> ChildのウィンドウプロシージャのアドレスをParentのそれに

無茶すなよ(w

476 名前:468 :03/12/10 22:52
>>474
ありがとうございます。コントロールのサブクラス化によって解決できそうな感じ
だったのですが、やはりChildの再描画部分がうまくいかないです。

結局やりたいことは

親ウィンドウ(WS_OVERLAPPEDWINDOW)に大小のスタティックコントロールが
貼り付けてあり、大きいほうが下、小さいほうが上という上下関係で重なっていて、
大きいほうがクリックされたときのSTN_CLICKEDメッセージと小さいほうが
クリックされたときのSTN_CLICKEDを区別したいのです。
現状だと先に読み込んだほうが大きければ、後から読み込んだほうをクリックしても
大きいほうと重なっていればそちらが認識されるようです。

この上下関係を常に大きいほうが下、小さいほうが上という上下関係を確実にするため
子ウィンドウと孫ウィンドウという方法を取ったのですが、両方とも子ウィンドウにして
かつ、両者の上下関係を確実に管理する方法はあるのでしょうか?

477 名前:デフォルトの名無しさん :03/12/10 22:57
>現状だと先に読み込んだほうが大きければ、後から読み込んだほうをクリックしても
>大きいほうと重なっていればそちらが認識されるようです。

若干訂正

現状だとコントロールが重なっている部分をクリックした場合、見た目の上下関係は
関係なく、先にCreateWindowしたコントロールが優先されるようです。

478 名前:デフォルトの名無しさん :03/12/10 23:00
WS_CLIPSIBLINGSじゃないかな?

479 名前:デフォルトの名無しさん :03/12/10 23:17
スタティック程度なら自分でウインドウクラス定義しちゃえば?

480 名前:468 :03/12/11 00:07
デキタ━━━━(゜∀゜)━━━━!!!!

大小のコントロールボックスを両方とも子ウィンドウにして、どちらかに(実際どっちが正しいんだろう)
WS_CLIPBLINGSを指定して、小さいほうのみSetWindowPos関数でHWND_TOPを指定すると
狙っていた挙動になることがわかりました。
ちょっと難しく考えすぎていたようです。

皆さんレスありがとうございました。

481 名前:デフォルトの名無しさん :03/12/11 06:46
キーボードからの入力について教えてください
普通はWM_CHARを使うと思うのですが、カーソルキーなどの入力を得たいときには
WM_KEYDOWNを使って仮想キーコード(VK_*)で受け取りますよね。

このときデバイスに依存するのは、スキャンコードだけで
キーコードは非依存と思っていいのでしょうか?

実はアスキーと非アスキーの入力をすべて受け取りたいのですが、
VK_*の割り当てられていない通常のボタンのキーコードを、
TranslateMessageを通さずに解釈して、ABC...Z等と解釈していいのか判断できないんです。
やっぱり、アスキー、非アスキーはWM_KEYDOWNとWM_CHARに分けて二度解釈するのが正しいのでしょうか?


482 名前:デフォルトの名無しさん :03/12/11 15:48

VC6.0 + Win2K の環境なのですが、
MSDNのGetStockObjectの英文リファレンスを
読むと、GetStockObject(DC_BRUSH) という
値があるんですが、実際にこれを使うと定義されていない
というコンパイラエラーがでます。

DC_BRUSHは Device Context のブラシと思いますが、
これは GetDCBrushColor関数やSetDCBrushColor関数
で、取得や設定ができるようですが、こちらの2つの関数
も定義されていないとコンパイラエラーとなります。

この値は日本文リファレンスには載っていないのですが
実装されていないのでしょうか?

wingdh.h で宣言されているというので、windows.h を
includeしています。 wingdi.h を独自に include しても
変化なしでした。



483 名前:デフォルトの名無しさん :03/12/11 15:50
>>482
GetDCBrushColorには
[This is preliminary documentation and subject to change.]
とあるので削除されたということなのかな。

484 名前:デフォルトの名無しさん :03/12/11 16:01
知らんけど

#define _WIN32_IE0x0500
#define _WIN32_WINNT0x0500

みたいなんが必要ってことはない?

485 名前:デフォルトの名無しさん :03/12/11 17:17
>>484
その辺りの詳細はよくわからないのですが、
一応、簡単なWindowアプリで実験しています。
だからその辺りも defineされてないのかな。

486 名前:デフォルトの名無しさん :03/12/11 17:23
>>484
#include <windows.h>
の前に、その2つを define してみましたが、
やはり定義されてないと表示されますね。

まあ、ダメならダメでいいんですが。

487 名前:デフォルトの名無しさん :03/12/11 17:30
>>486
ごめん、タブが消えてた。それでじゃない?

wingdi.h で確かに

#if (_WIN32_WINNT >= 0x0500)
#define DC_BRUSH 18
#define DC_PEN 19
#endif

って定義されてたよ。だから

#define _WIN32_WINNT 0x0500

でいいと思う。

488 名前:デフォルトの名無しさん :03/12/11 17:58
>>487
どもども。そのように定義したらちゃんとコンパイルできました。
しかしSetDCBrushColor関数を使っても、ブラシを変化させら
れなかったようです。なんでかなぁ。



489 名前:デフォルトの名無しさん :03/12/11 18:11
>>488
ウインドウクラスの背景に
hbrBackground = (HBRUSH) GetStockObject(DC_BRUSH);
と渡したのですが、たとえば
ダブルクリックメッセージを拾って、その中で
hdc = GetDC(hwnd)
SetDCBrushColor(hdc, RGB(0xff, 0, 0));
ReleaseDC(hwnd, hdc)
などとしてみても、背景色には変化ないみたい。

ウインドウプロシージャが終了するか、デバイスコンテキストが
終了するとDC_BRUSHもデフォルトになってしまうのかな。

背景色を好きな色で塗るにはやっぱWM_ERASEBKGNDを
処理するのが一般的でしょうか? GetStockObjectだと、
グレイ、白、黒くらいしか選択できないので。


490 名前:デフォルトの名無しさん :03/12/11 18:13
CS_OWNDC

491 名前:デフォルトの名無しさん :03/12/11 18:14
>>489
つーか、GetStockObject(DC_BRUSH)の結果はチェックしてみたのかよ

492 名前:デフォルトの名無しさん :03/12/11 18:26
自分以外のアプリのタイトルバーを変更したいんですが、
ウィンドウのタイトルバーの表示とタスクバーの表示を違うようにしたいのです。

例えば かちゅ〜しゃ のように。
タイトルバーには「かちゅ〜しゃ Ver x.xx [全既得スレ]」と
見えますが、タスクバー上は「かしゅ〜しゃ」という感じです。

SetWindowText ではタスクバー上も変わってしまうのでダメでした。
SendMessage で WM_SETTEXT を飛ばしても同様にダメでした。
これを実現するにはどうすればいいでしょうか?
ヒントだけでも宜しくお願いします。

493 名前:デフォルトの名無しさん :03/12/11 18:27
>>490
CS_OWNDC を指定したらできますた。
ありがとうございます。

>>491
動作はしていたようです。どもども。

494 名前:デフォルトの名無しさん :03/12/11 18:37
>>492
OpenJaneもタスクバーとウィンドウタイトルの文字列が違うが
Spy++で見てみるとメインウィンドウに、サイズ0の見えない親があって
そのウィンドウがタスクバーに表示されていた。


495 名前:  :03/12/11 21:26
GetMessageってなんで戻り値がBOOLなのに-1が帰ってくるんですか?

496 名前:d :03/12/11 21:30
おまんこに勃起したペニスを突っ込む

497 名前:デフォルトの名無しさん :03/12/11 21:30
BOOLにした奴が馬鹿だった。

498 名前:名無し@沢村 :03/12/11 22:52
>>495
BOOLはintだから

499 名前:デフォルトの名無しさん :03/12/11 23:23
自分のアプリ起動中に他のアプリがRegisterHotKeyなんかで
設定してるホットキーを無効にする事ってできますか?

500 名前:デフォルトの名無しさん :03/12/11 23:25
>>498
booleanを返すということは
if(GetMessage(...)){}やif(!GetMessage(...)){}を期待しているってことじゃないの?
その書き方が間違ってるってのはどうよ。


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.