[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 06/01 23:03 / Filesize : 190 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build66



1 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:33:42 ]
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

過去スレ、関連リンクは>>2-10くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

- Win32API質問箱 wiki
wiki.livedoor.jp/program1/d/FrontPage

Win32API質問箱 Build65
pc11.2ch.net/test/read.cgi/tech/1208847084/

237 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:27:58 ]
GetGlyphIndices()という、文字列からグリフインデックスに変換するAPIがありますが、
この逆のことをするAPI、つまりグリフインデックスから文字列に変換する方法って解りますか?

238 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:28:29 ]
バッファ足りなくてもバッファサイズまでコピーする仕様なの?
そうだとしても戻り値にNULL文字は数えないって書いてあるから
指定サイズ==戻り値ならあふれてるのでは。

239 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:31:24 ]
>>238
馬鹿丸出し

240 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:37:47 ]
>>236
しかし長さを調べた直後には別のウィンドウタイトルに変わっているかもしれない
そのアプリケーションがどう振舞うか想定できない

241 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:50:52 ]
そんな事を気にするなら他プロセスのテキスト取得なんて考えないことだ

(そろそろフックネタ出す奴が現れる頃か)

242 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:50:58 ]
仮にバッファ長が100だったとして、GetWindowTextLength()が99を返した後GetWindowText()が99を返しても、
その間にタイトルが書き換わっていたら溢れたかどうかは判らないのね。

243 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 19:10:58 ]
>>240>>242
必要十分なサイズのバッファを渡せば溢れる可能性は無くなる。

LPTSTR buffer = (LPTSTR)malloc(sizeof(TCHAR) * 0x7fffffff);
if (buffer == NULL) {
  MessageBox(NULL, _T("この環境では使用できません"), _T("メモリ買いましょう"), 0);
  exit(-1);
}
GetWindowText(hwnd, buffer, 0x7fffffff);

244 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 20:36:32 ]
32bit環境だと/3GBスイッチ使っても厳しそうだ。
VirtualAllocのMEM_RESERVEでアドレスだけ確保して、
SEHで動的にメモリを割り当てるのが現実解だな。

245 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 20:59:09 ]
ヒント:APIフック



246 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:19:35 ]
>>245
ヒント:お前は馬鹿

247 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:23:10 ]
たまにはブローとかアッパーとかさぁ

248 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:34:08 ]
まずはジャブから

249 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:51:37 ]
このスレの質が低下したのは、優秀な人は.NETに移ったからかもな。

250 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:58:09 ]
正解

251 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 22:06:48 ]
今頃気付いたのか

252 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 22:25:19 ]
Advanced Windowsの著者だって.NETの本を書くこんな世の中じゃ

253 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 23:38:50 ]
poizun

254 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 23:47:16 ]
poison

255 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 23:49:58 ]
prison



256 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 23:57:59 ]
ぬるぽ

257 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 00:07:37 ]
ga

258 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 00:35:25 ]
てか、sizeof(title_buf)-1を最後の引数に指定してるから、
溢れる可能性など皆無だが?
溢れるとかなに言ってるんだ?

259 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 00:47:09 ]
↑理解していない何か

260 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 06:45:56 ]
↑話を理解している天才

261 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 10:20:45 ]
↑流れを読む天才

262 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 10:22:11 ]
↓通常の流れに戻すという偉業を成し遂げた天才

263 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 10:30:46 ]
#include<stdio.h>
#include<windows.h>

int main(void)
{
/**/MSG msg;

/**/while(0 < GetMessage(&msg,NULL,0,0)){
/******/switch(msg.message){
/**********/case WM_KEYDOWN:
/**************/puts("keydown");
/**************/break;
/******/}
/**/}
/**/return 0;
}

これで何かkey押してもダメなんだけどどうすればいい?

264 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 11:01:41 ]
ウィンドウが無いじゃんか

265 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 11:06:59 ]
コンソールに表示させたいん



266 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 11:52:02 ]
な ん で ( ´∀` ) や ね ん !

267 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 12:31:48 ]
プロシージャならメッセきたら処理するけど
コンソールの場合はどうやるのか気になって

268 名前:デフォルトの名無しさん [2008/05/23(金) 13:12:02 ]
CreateWindowでスタティックテキストを作りました。
テキストの背景色を透過したいんだけど、いい方法ありませんか?

hStatic = CreateWindowEx(0, "STATIC", cString, WS_VISIBLE | WS_CHILD | SS_SIMPLE,
X, Y, Width, Height, hWnd, (HMENU)Static, (HINSTANCE)hInst, NULL);

269 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 13:20:55 ]
WS_EX_TRANSPARENTじゃダメ?

270 名前:268 mailto:sage [2008/05/23(金) 13:31:00 ]
>>269
ダメでした。。
レバーコントロールに入れたツールバーにスタティックテキスト置いてます。

hStatic = CreateWindowEx(WS_EX_TRANSPARENT, "STATIC", cString, WS_VISIBLE | WS_CHILD | SS_SIMPLE,
X, Y, Width, Height, hWnd, (HMENU)Static, (HINSTANCE)hInst, NULL);

271 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 13:39:40 ]
ツールバー、もしくはメニューの背景にブラシを使う事は出来ますか?

272 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 13:40:07 ]
WM_CTLCOLORSTATICでNULL_BRUSHを返す

273 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:12:15 ]
あるプロセスが、自分を起動したプロセス(親プロセス)を知る方法はありますか。

274 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:20:00 ]
ある

275 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:21:19 ]
レバーじゃなくてリバーだと思う



276 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:23:18 ]
"レバーコントロール" の検索結果 約 1,270 件中 1 - 10 件目 (0.13 秒)
"リバーコントロール" の検索結果 約 185 件中 1 - 10 件目 (0.13 秒)


277 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:27:41 ]
>>276
それ「レバー」「コントロール」別単語として検索した結果だから

278 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:27:45 ]
どっちもすくな!

279 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:28:42 ]
リバーコントロールでググると

もしかして: レバーコントロール
と出るなw

280 名前:268 mailto:sage [2008/05/23(金) 14:28:43 ]
>>272
どうも。WM_CTLCOLORSTATICメッセージ勉強してみます。

281 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:41:49 ]
>>277
馬鹿

282 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:02:53 ]
レバー ReBar に一致する日本語のページ 約 268 件中 1 - 30 件目 (0.03 秒)
リバー ReBar に一致する日本語のページ 約 277 件中 1 - 30 件目 (0.24 秒)

283 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:28:05 ]
rebarの発音はrí:bà:rだからリバーと読む方が実際の発音に近い
つまりレバーと読みたいならパーチーとかボデーとか言ってろってこった

284 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:33:15 ]
↑アホ

285 名前:デフォルトの名無しさん [2008/05/23(金) 15:35:16 ]
↑話を理解してない馬鹿



286 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:36:33 ]
ReBarをレバーっていうのは斬新だなw

287 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:39:09 ]
↑馬鹿

288 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:40:32 ]
>>281=>>284=>>287=大馬鹿

289 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:41:46 ]
↑はずれ

290 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:43:10 ]
>>281,>>284,>>287∈大馬鹿
という意味だろ

さすが大馬鹿

291 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:45:37 ]
レバーという表現は日本語としても定着してるんだからいんじゃね?

292 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:49:00 ]
>>290
はずれ

293 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:51:19 ]
意味が通じるなら、それでおk。

294 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:59:11 ]
>>291
定着していません。
ほとんどの日本人はレバーと聞くと肝臓の事だと認識します。

295 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:05:50 ]
取っ手(lever)と認識する人も居るよ




296 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:09:36 ]
ReをReTryとかのReって解釈する人もいる

297 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:11:51 ]
Win API ReBar レバー 11件
Win API ReBar リバー 100件

Yahoo

298 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:13:41 ]
↑全角数字馬鹿

299 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:17:03 ]
>>296
語源的には同じ

300 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:17:51 ]
うーん、、、全角数字の時点で言い訳できないな

301 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:19:22 ]
ほとんどの日本人はリバーと聞くと川の事だと認識します。

302 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:23:40 ]
ReBarって書けばいいんだよ
カタカナ読みに拘ると面倒事になるだけだ

303 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:27:03 ]
このスレで「リバー」だとriverよりはrebarだろう。
このスレで「レバー」だとliverやleverよりは「rebarのことなんだろうなぁ」だろう。

304 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:27:55 ]
↑話を理解してない馬鹿

305 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:35:18 ]
え?あれ取っ手付いてるからレバーなんだと思ってたよ
別モノだったのかw



306 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:44:39 ]
msdn.microsoft.com/ja-jp/library/cc399282.aspx
では一応「リバー コントロール」でも他のページに見当たらない

307 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:44:40 ]
BitBltやStretchBltで表示した画像が解像度を変更すると消えてしまい困っています。
WM_DISPLAYCHANGEでWM_PAINTを投げたりInvalidateRectを投げたりしましたが再描画されません。
SW_MINIMIZEとSW_NORMALを立て続けに投げる方法は表示される時とされない時があり駄目なようです。
どうすれば解像度変更直後にきちんと再描画出来るようになるのでしょうか。

308 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:52:59 ]
おっ!質問きたぞ
雑談はこれまでだ

309 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:55:21 ]
>>307
WM_PAINTで描画してるんだよな?
再描画されないことは無いと思うが、いったいどうやってんの?
再描画されないとは具体的にどうなんのの?
>WM_PAINTを投げたり
まあこれ見て怪しいのはわかるが。

310 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:01:56 ]
InvalidateRectの後にUpdateWindow呼んでる?

311 名前:309 mailto:sage [2008/05/23(金) 17:02:18 ]
一応書いておくけど
WM_PAINTを投げたくなったら、
InvalidateRect → UpdateWindow のコンボで。

InvalidateRect自体は投げてるみたいだから、この場合は解決策じゃないけど。

312 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:10:39 ]
>>311
RedrawWindowにRDW_UPDATENOWを指定すればいい

313 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:17:34 ]
なんちゃってAI作った人いる?

314 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:21:43 ]
>>313
const char* msg[] = {
"↑話を理解してない馬鹿",
"知らないならレスしないでください",
"それぐらい察してほしかったってのが本音"
};
for(;;) post2ch(msg[rand()%3]);

315 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:32:59 ]
>>313
スレタイ



316 名前:307 mailto:sage [2008/05/23(金) 18:17:10 ]
InvalidateRect(hWnd, NULL, FALSE);
UpdateWindow(hWnd);
RedrawWindow(hWnd, NULL, NULL, RDW_UPDATENOW);
これらを投げても駄目でした。

画像のみを表示するソースはウィンドウを透過すれば(SetLayeredWindowAttributes)特に何もしなくても表示されました。
透過しないとやはり何も表示されません。

CreateWindowExでボタン、ステータスバー、ツールチップを追加している問題のソースではこれらコントロールは再描画されるのに画像が表示される場所はまるで非表示にしたかのように背景色のみになっています。
もう訳が分からないですo...rz。

もしかしたらウィンドウプロシージャの書き方に問題があるのかも知れませんが、以下の各caseのbreak;をreturn 0;に書き換えると何故かウィンドウの挙動も表示もおかしくなり、CPU使用率も100%になってしまいます。
因みに今回の場合はreturn 0;に書き換えても症状は改善しません。

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch (msg)
{
(中略)
case WM_PAINT:
SetStretchBltMode(hDC, STRETCH_DELETESCANS);
StretchBlt(hDC, 10, 10, 256, 192, hCompatDC, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);
break;
(中略)
}
return DefWindowProc(hWnd, msg, wp, lp);
}

317 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 18:25:29 ]
>>316
・・・BeginPaintとEndPaintは・・?
hDCはどこからきたの?

318 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 18:28:02 ]
やはり怪しかったのね

319 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 18:34:01 ]
>>317が正解だな
的を射ている

320 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 18:44:10 ]
WM_PAINTでBegin/EndPaint忘れって上にもあるし前スレにもあったな
いったい何を見て勉強してるんだ?

321 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 18:45:07 ]
猫だろ。どうせ。

322 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:04:37 ]
犬希望

323 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:18:07 ]
WM_PAINTワンBeginPaintワンワン

324 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:19:40 ]
MFC使えとまでは言わないけど、コンストラクタ・デストラクタでBegin/EndPaintをラップした
クラス程度は作っておくと便利よ。

325 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:27:38 ]
それならOnPaintをオーバーライドするだけで描画できるクラスを作った方が遥かに便利



326 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:30:54 ]
CpaintDC と OnDraw ですね

327 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:33:07 ]
つうか今時MFCやWTLを使わずに素のWin32SDKでアプリ作る奴なんているの?
死ぬほど面倒じゃん

328 名前:316 mailto:sage [2008/05/23(金) 19:39:21 ]
static PAINTSTRUCT ps;
(中略)
BeginPaint(hWnd, &ps);
SetStretchBltMode(hDC, STRETCH_DELETESCANS);
StretchBlt(hDC, 10, 10, 256, 192, hCompatDC, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);
EndPaint(hWnd, &ps);
return 0;

にしたら正常に表示されました。本当にありがとうございました。
一見正常に動いていたのはDefWindowProcに処理を回していたからなんですね。

因みに参考にしたサイトはこちらです。

Programing Place
ttp://www.geocities.jp/ky_webid/index.html

>>324-327
VC++2008EEでC及びC++の勉強中です。
まだC++はまともに使えないのでクラスの使い方も(VB.NETやC#はともかく)分かりません。
今後の課題としてクラスの勉強を始めようと思います。

329 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:43:13 ]
そのサイトにも、
>描画の処理を行うとき、必ずBeginPaint()とEndPaint()を使って、描画処理を挟み込む形を取っていましたが、これは必ずそうしなければなりません。
って書いてるじゃん

330 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:44:22 ]
>>328
そこ、前スレにもトンデモサイトとして出てたよ
特にこれ
ttp://www.geocities.jp/ky_webid/win32c/022.html


以下を次スレからテンプレ化キボン

●参考すべきでない所
Programing Place
ttp://www.geocities.jp/ky_webid/index.html

331 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:44:23 ]
>>328
志村!足りない!足りない!

332 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:45:32 ]
と思ったら、BitBltのあたりでいきなりはしょってるなw

333 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:46:42 ]
"Programing"の時点で糞確定だけどな

334 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:47:04 ]
>>328
hDCはBeginpaintの戻り値かps.hdc 使う

335 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 06:15:24 ]
本当の所、BeginPaintを必ず使わなければいけないという決まりはない。
ただ、これ一回の呼び出しで行われる処理内容を考慮すると、使わない理由が無いな。



336 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 07:17:06 ]
>>330
それよりお勧めサイト書いてくれたほうがうれしい

337 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 07:52:52 ]
>>336
英語版MSDN






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<190KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef