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


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

Win32API質問箱 Build23
501 名前:374 :04/10/10 21:05:57
>>432
>>491
うまくいかなかったのは、新しいDLLをコピーし忘れ、古いDLLの方をロードしたためです。
いい加減なレスをして申し訳ありませんでした。(^_^;)

502 名前:デフォルトの名無しさん :04/10/11 17:55:32
PostMessage(hfw,WM_KEYDOWN,VK_SPACE,0);

のように、キー入力メッセージを渡したいのですが、
Ctrl+A(コントロールを押しながらAキーを押す)入力メッセージを
渡すにはどうすればいいでしょうか?

503 名前:デフォルトの名無しさん :04/10/11 18:34:44
keybd_eventにしたら?

504 名前:デフォルトの名無しさん :04/10/11 18:38:38
ウィンドウの終了処理について×ボタンを押すてもexeが終了せず、
ビルドを再度行うと、LINK : fatal error LNK1168: 書き込みモードで Debug/rap.exe を開けません
というエラーが出ます。
以下ソースです。原因分かる方がおりましたらお教え願います。

LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp)
{
switch(msg){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,msg,wp,lp);
}

----------略--------------------

while(GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg);
return msg.wParam;

505 名前:デフォルトの名無しさん :04/10/11 19:07:03
×ボタンについては、WM_CLOSEを処理汁。
で、前のプログラムをちゃんと終了させればエラーも出なくなる。

506 名前:デフォルトの名無しさん :04/10/11 19:08:48
>>504
終了しないプログラム(ファイル)を書き換えることができないのでビルドに失敗する。
何らかの方法で強制終了してからビルドすべし。

507 名前:デフォルトの名無しさん :04/10/11 20:19:56
>>505
WM_CLOSEをDefWindowProcに送ればDestroyWindowされるけど。

508 名前:505 :04/10/11 20:33:43
>>507
そうでしたね。出しゃばってすみません。

509 名前:505 :04/10/11 22:14:35
みなさまレスサンクスです。


WinMain関数中のWNDPROC 型の指定をWndProcでは無くべつ名前にしておりました。
お騒がせ致しました。

510 名前:デフォルトの名無しさん :04/10/12 18:29:35
変数aに読み込んだデータをあるところで区切って改行して下に表示したいのですがどうすればいいですか?

511 名前:デフォルトの名無しさん :04/10/12 18:31:28
1. あるところで区切って改行する
2. 下に表示する

以上

512 名前:デフォルトの名無しさん :04/10/12 18:50:06
いやだからさ、クライアント領域全部に描画しちゃうからさ
1回描画したら2回目以降の表示で前回の表示消えちゃうだろボケが

513 名前:デフォルトの名無しさん :04/10/12 19:18:24
>>512
この文章の意味がわからないのは漏れだけ?

514 名前:デフォルトの名無しさん :04/10/12 19:19:15
お前だけ

515 名前:デフォルトの名無しさん :04/10/12 19:20:10
>>513
書いてある文字は理解できるが内容が理解できん
どこから出てきた話だ、これ?

516 名前:510 :04/10/12 19:26:07
はいはい、わかりましたよ。まずよ、文字描画するときって
変数に貯めてる文字をいっぺんにクライアント領域に描画しますよね。
そうじゃなくて変数に貯めてあるデータを決まったバイト数分ごとに
改行して描画したいのですよ糞ボケが。なので教えてくださいタコが

517 名前:デフォルトの名無しさん :04/10/12 19:29:45
・補足後も情報足りない
・口調が悪い

答える物好きもおるまいて

518 名前:デフォルトの名無しさん :04/10/12 19:30:30
>>516
文字列を任意の位置に表示することはできるの?
だったら改行したい量ごとに文字を分割して
それぞれ任意のy座標に書けばいいだけじゃないか。

519 名前:デフォルトの名無しさん :04/10/12 19:32:56
まあ馬鹿にはわからないだろうがバックバッファ持って横幅文字数に区切った文字列を描画
その文字のサイズ分Yを足して2行目描画
描画実行時にそれをクライアント領域に転送
API以前の問題だな。馬鹿らしい


520 名前:デフォルトの名無しさん :04/10/12 19:39:24
なんでバックバッファが出てくるんだ?

521 名前:デフォルトの名無しさん :04/10/12 19:40:46
>>520
いきなりクライアント領域に2回に分けて書いたらちらつく場合があるからじゃない?

522 名前:510 :04/10/12 20:05:14
バックバッファなんてわかんねぇよチンカス

523 名前:510 :04/10/12 20:06:24
だまれぼけ

524 名前:デフォルトの名無しさん :04/10/12 20:57:45
変数に改行する情報とかって入れれないの?

525 名前:デフォルトの名無しさん :04/10/12 21:09:06
>>510
DrawTextのRECTを設定して描画じゃだめなのか?

526 名前:デフォルトの名無しさん :04/10/12 21:21:18
描画するときはエディットコントロールにEdit_SetTextマクロを使って描画してます。
れくと構造体は使いません

527 名前:デフォルトの名無しさん :04/10/12 21:24:48
普通に改行いれちゃだめのか?

528 名前:デフォルトの名無しさん :04/10/12 21:28:15
普通というと?

529 名前:デフォルトの名無しさん :04/10/12 22:21:34
バカは放置しろよ

530 名前::04/10/12 22:25:58
方法わかる方のみレスをつけてください。バックバッファとか言ってる馬鹿はいりません

531 名前:デフォルトの名無しさん :04/10/12 22:26:35
*NULL='\0';

532 名前:デフォルトの名無しさん :04/10/12 22:36:06
>>518が答えだろ

533 名前:デフォルトの名無しさん :04/10/12 22:38:58
そんなことはできない

534 名前:デフォルトの名無しさん :04/10/12 22:59:41
特定のバイト数分ごとに変数に特定の文字は入れれる。改行ができない

535 名前:デフォルトの名無しさん :04/10/12 23:35:20
dwStyle = WS_CHILD | WS_VISIBLE;
dwExStyle = WS_EX_LAYERED;

だと表示されないんだけど、これは仕様ですか?
MSDN 読んだけど、特に注意書きはないし(´・ω・`)

ちなみに、WS_CHILD をなしにすると、
ちゃんと半透明もしくはカラーキー付きで表示できるのは確認済みです。

536 名前:デフォルトの名無しさん :04/10/12 23:48:33
ttp://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.asp
には
「概要: トップレベル ウィンドウに透明と半透明効果を追加するための効率的な手段」
とある。

537 名前:デフォルトの名無しさん :04/10/12 23:49:31
WS_EX_LAYERED
 Windows 2000/XP: Creates a layered window.
 Note that this cannot be used for child windows.
 Also, this cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.

538 名前:デフォルトの名無しさん :04/10/12 23:51:57
Windows XP: With WS_EX_COMPOSITED
set, all descendants of a window get bottom-to-top painting order using double-buffering.
Bottom-to-top painting order allows a descendent window to have translucency (alpha) and transparency (color-key) effects,
but only if the descendent window also has the WS_EX_TRANSPARENT bit set.
Double-buffering allows the window and its descendents to be painted without flicker.

539 名前:デフォルトの名無しさん :04/10/13 00:00:58
>>536-538
レスサンクスです

> Note that this cannot be used for child windows.

ハッキリ書いてましたね(´・ω・`)
日本語のほうにはこれっぽちも書いてないのにヽ(`Д´)ノ

お騒がせしました。

540 名前:510 :04/10/13 00:27:06
奇跡。改行できた。お前等マジで糞。訳に立たなすぎ(プゲラチョフ
特にバックバッファとか逝ってた糞ボケ。はぁ?アホ?なに?バックバッファって?

541 名前:535 :04/10/13 00:32:02
子ウィンドウはダメっぽいので、WS_POPUPでやることにしました。
フォーカスを親から奪ってしまう点などは、無理矢理SetFocusさせて解決できそうです。
ああ、あと位置も、親のWM_MOVEの時にまとめて修正で行けそうです。

ありがとうございました。

542 名前:デフォルトの名無しさん :04/10/13 02:54:42
Sleep(1)で10ms待たされます。
もっと正確なSleepを使うにはどうすればよいのでしょうか?


543 名前:デフォルトの名無しさん :04/10/13 03:03:20
>>542
そんなSleepありません。マルチメディアタイマーを使っても
そんな精度出るかどうか。

544 名前:デフォルトの名無しさん :04/10/13 03:18:13
戻ってくるまでに 1010ms かかるってこと?


545 名前:デフォルトの名無しさん :04/10/13 03:32:11
>>544
それでは、1ms待ちたいのに、1秒と10ms待たされる事になりますけど…
timeSetEventも駄目でした。
timeGetTimeで測定しているのが駄目なのかもしれないので、
PerformanceCounterで測ってみます。

546 名前:545 :04/10/13 03:47:25
PerformanceCounterだと、20ms待たされる事が一番多かったです。


547 名前:デフォルトの名無しさん :04/10/13 03:53:37
Sleepはタイムスライスを放棄するためのAPIであって一定時間待つためのAPIじゃない。

548 名前:デフォルトの名無しさん :04/10/13 04:10:15
じっけんだ!

SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL)

してから、timeSetEvent したらどうなるのかな?

# マシンが応答しなくなるかもしれんがw


549 名前:545 :04/10/13 04:35:05
>>548
特に重たくはなりませんでした。

timeSetEvent(17, 1, TimeProc, 0, TIME_PERIODIC);
だと、10msか20msにばらけるので使えないと思ったのですが、

timeSetEvent(1, 1, TimeProc, 0, TIME_PERIODIC);
にして、TimeProc内で17ms経過を待ってみます。

550 名前:545 :04/10/13 05:00:32
549のやり方でも10ms単位みたいです。

>548で単純ループ(CPU使用率100%)で時間を数えると、マシンの応答が無くなりました。
これを変えなければ特に遅くはならないので、単純ループで数える事にします。


551 名前:デフォルトの名無しさん :04/10/13 07:54:26
>>545
timeBeginPeriod(1) すると、Sleep() の精度も上がるよ。
どっちにしろ、リアルタイムOSではないので完全に正確にはならないが。

552 名前:デフォルトの名無しさん :04/10/13 09:08:23
PerformanceCounterで10msって・・・どういう環境だよ
あれ普通マイクロ秒とかそういう精度だろ?

553 名前:デフォルトの名無しさん :04/10/13 09:47:02
>>542
何の目的で正確に10ms待つ必用が用途を言った方がいいかも。
>>551で十分かもしれないし、場合によってはドライバ書いたり
別OSじゃないと駄目だったりするから。

あらゆる状況で10msだけ待つことを保障するっていうのは普通
Windowsじゃ無理。

554 名前:デフォルトの名無しさん :04/10/13 13:27:07
zip圧縮をDLL無しで行う方法を教えてください

555 名前:デフォルトの名無しさん :04/10/13 13:28:56
>>554
ファイルを選んで右クリックでコンテキストメニューが出るだろ。

556 名前:デフォルトの名無しさん :04/10/13 13:38:36
>>554
zlibをstatic linkしろ


557 名前:デフォルトの名無しさん :04/10/13 13:40:45
>>556
zlibの入手先やリンク方法を教えてくださ

558 名前:デフォルトの名無しさん :04/10/13 13:43:38
連邦のモビルスーツはグーグルを知らんのか!

559 名前:デフォルトの名無しさん :04/10/13 13:48:44
グーグルはどこで売っているのでしょうか。近所にはGOOしか売ってないです。

560 名前:デフォルトの名無しさん :04/10/13 15:43:01
え?うちの近所じゃinfoseekとlivedoorも打ってたよ

561 名前:デフォルトの名無しさん :04/10/13 16:25:35
安かったから買ってきたんだが、infoseakとJivedoorだった!だまされた!

562 名前:デフォルトの名無しさん :04/10/13 16:56:20
>>552
QueryPerformanceFrequency

>>545
timeBeginPeriodしなきゃtimeGetTimeの精度も上がらないのでは?

563 名前:デフォルトの名無しさん :04/10/13 20:23:46
すみませんが質問させて下さい。

vc6.0+win32環境です。

ツールバーをカスタムドローしてボタンのアイコンを書いています。
NM_CUSTOMDRAWメッセージを処理してNMCUSTOMDRAWのRECTメンバ
からアイコンの位置を取得する時に、ドロップダウンを持つボタンのみ
縦の位置がずれてしまいます(XP環境でテーマ(manifest)を置いている時に限りです)。

何方か位置がずれない方法を知りませんでしょうか?
よろしくお願いします。

564 名前:デフォルトの名無しさん :04/10/13 20:58:02
リストビューのカラムの数はどうやって得るのでしょうか?

565 名前:デフォルトの名無しさん :04/10/13 21:24:07
>564

LVM_GETHEADERと
HDM_GETITEMCOUNTかな

566 名前:名無し~3.EXE :04/10/13 22:02:14
Windows2000のグループ名を取得したいけどどうしたらいい?
MSDNで見つけられなかった・・(つД`)

567 名前:デフォルトの名無しさん :04/10/13 22:20:01
NetWkstaGetInfo

568 名前:名無し~3.EXE :04/10/13 22:28:43
>567
ありがとうございまつ。これで今日寝られる・・・(つД`)


569 名前:デフォルトの名無しさん :04/10/13 23:21:24
ファイルのオープンに関して質問です.
GetOpenFileName()で指定したファイルをオープンできる所まで試しました.
ですが,選択する画面でデフォルトのパスがマイドキュメントになっています.
これを任意のディレクトリに変更するにはどうしたらよいでしょうか?

VC7環境です

570 名前:デフォルトの名無しさん :04/10/13 23:26:21
OPENFILENAMEのメンバかたっぱしから調べろ

571 名前:デフォルトの名無しさん :04/10/13 23:49:00

WindowsXPで
ファンクションF3キーでの「検索結果」ウインドウ
をグローバルフック等で無効化したいのですが、
どのクラスでメッセージを受け取っているのか
分からない状態で困っています。

spy++などで「Shell_TrayWnd」を覗いてみたのですが
「0xC0F2」(登録:ShellFileOpened)のメッセージが
ポストされていて、未処理の様で、ここでは無いみたいです。

どなたかご存知の方いらっしゃいませんでしょうか?



572 名前:545 :04/10/14 00:22:52
>>551
私の環境では、timeBeginPeriod(1)を使ってもSleep(1)は10msかかりました。

>>552
Sleep(1)にかかる時間を測定するために PerformanceCounter を使ったら、
20msかかっていたと言う意味です。

>>553
用途はゲームです。 (最初に言うべきでした)

>>562
timeBeginPeriod(1)でtimeGetTimeの精度が上がるのはNT系のみのようです。
9x系は最初から1ms単位です。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpmltimd/html/_win32_timegettime.asp

timeBeginPeriod(1)とtimeGetTimeで時間の測定は十分正確にできますが、
問題はCPU使用率を下げるために呼び出す Sleep(1) が 10ms も待たされる事です。

結局、Sleep は指定した時間をms単位で待ってはくれるけど、
その時間が過ぎてもタイムスライスの関係ですぐには復帰しないのでしょうかね。

573 名前:デフォルトの名無しさん :04/10/14 01:21:24
少なくとも指定した分だけ待つ、じゃないかなあ。

574 名前:デフォルトの名無しさん :04/10/14 01:25:54
>>572
もしかして、環境は9xなのか? 2000ではそれなりにきっちりSleep()してくれたんだが。

575 名前:デフォルトの名無しさん :04/10/14 01:46:36
sleepは最低これだけ待つというだけだぞ
だから極端な話20秒ウェイトがかかったとしても仕様通り


576 名前:デフォルトの名無しさん :04/10/14 01:51:15
MSDNはちゃんと読もうね。
The Sleep function suspends the execution of the current thread
for "at least" the specified interval.
""内に注目。

577 名前:デフォルトの名無しさん :04/10/14 02:18:21
>>576 ごめんなさい。 これからは英語のも確認します。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/sleep.asp
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdllpro/html/_win32_sleep.asp
>指定された時間にわたって、現在のスレッドの実行を中断します。

578 名前:デフォルトの名無しさん :04/10/14 02:58:26
ほんとに、プログラマめざしてるのか?
最低、2chなんぞ頼るなよボケ、絶対採用しない

579 名前:デフォルトの名無しさん :04/10/14 03:01:57
>>578
間違ってあなたの会社へ行かないようにするため、社名を教えてくれませんか?

580 名前:デフォルトの名無しさん :04/10/14 03:19:44
timeSetEvent まわりの記事
一応、Windows でもっとも正確なタイマーがマルチメディアタイマーということに
なっているが…

http://support.microsoft.com/default.aspx?scid=kb;ja;148404
http://support.microsoft.com/default.aspx?scid=kb;ja;153400

というか、何でそこまで正確に 1ms の時間が必要なんだ?


581 名前:デフォルトの名無しさん :04/10/14 04:13:22
>>580
1ms単位が必要と言うより、10ms単位が困るのです。

10ms単位だと、11ms待ちたい時に20ms待つ事になり、倍時間が変ってきます。
これが、100msと110msとなら気にならないかもしれません。

582 名前:デフォルトの名無しさん :04/10/14 04:16:01
>>579
マイクロソフトです。

583 名前:デフォルトの名無しさん :04/10/14 04:50:50
>>581
それはやっぱり1ms必要ってことじゃん

584 名前:デフォルトの名無しさん :04/10/14 05:08:37
>>582
正確に訳せボケ!

585 名前:デフォルトの名無しさん :04/10/14 09:28:48
>>581
11ms待ちたい時に20ms待つ事になっても大丈夫なように作るのが
Windows流です。

586 名前:デフォルトの名無しさん :04/10/14 10:32:05
Sleepがどんなに正確でも
Sleepから返って来た直後に別スレッドに持ってかれたら意味無いわけで。
マルチタスクOSで正確なウェイトなんて考えるほうがバカ。

587 名前:デフォルトの名無しさん :04/10/14 10:46:08
というか、ゲームでのウェイトにSleep使うな
メインループでぶん回し、メインループから分岐で各処理を呼び出す
ウェイトが必要なら、その処理を空回りさせて処理しろ
うちのプログラムで使ってるそのへんの処理を簡略化して書くとこんな感じだ

// これはメインループから呼び出される関数内
switch( process ){
 case WAIT_START:
  TickCheckStart = GetTickCount();
  oldprocess = process;
  process = WAIT;
  break;
 case WAIT:
  if( (TickCheckStart + 10) > GetTickCount() )
   process = oldprocess;
  break;
 case KEYWAIT:
  // キー待ち処理とか
// あとはこの調子で画面効果とか、スクリプト処理とかを分岐させていく
}
// 画面描画

588 名前:デフォルトの名無しさん :04/10/14 10:55:16
>587
常時CPU使用率が100%になるゲーム、逝ってよし。

Sleepを怖がってWindowsでゲームが作れるか!

589 名前:デフォルトの名無しさん :04/10/14 10:57:28
>>588
あぁ、Sleepは入れるよ
ただ、Winに処理返すために使うのであって、10msきっちりとかは考えない
>>581で言ってるような細かいことにSleep使うのはやるなってこと

590 名前:デフォルトの名無しさん :04/10/14 11:47:08
Sleep(0)じゃCPU使用率が100%になるから意味内

591 名前:デフォルトの名無しさん :04/10/14 12:16:50
WaitForXXXでいいだろ。
Sleepなんか使うな、メッセージへの応答も遅くなるし。

592 名前:デフォルトの名無しさん :04/10/14 18:00:27
ウィンドウメッセージはメインスレッドで処理して、
ゲームループは別スレッドで回すモンじゃないのか?

593 名前:デフォルトの名無しさん :04/10/14 18:12:58
ああああ,11111,うううう,おおおお,22222
カンマ区切りのデータを読み込んで
それぞれのエディットボックスに表示させたいと思っているのですが・・・。

最初はWM_COMMANDメッセージのイベントにANSI Cでstrtokを使用し、
カンマ区切りでデータを分割しようとしたのですが
データに日本語が入っているため、うまくいきませんでした・・・。

こうすれば超簡単とかいうのがございましたらお教え願います。

594 名前:デフォルトの名無しさん :04/10/14 18:23:59
>データに日本語が入っているため、うまくいきませんでした
ダウト

というかWIN32APIの話ではないな。
どーしてもWIN32APIで処理したいなら、ODBCでテキストドライバでも使え。

595 名前:デフォルトの名無しさん :04/10/14 18:46:03
strtok のマニュアルを隅々まで読め。超簡単だろう。


596 名前:デフォルトの名無しさん :04/10/14 18:55:34
>>593
Win32APIじゃないけど_mbstokじゃだめか?

597 名前:デフォルトの名無しさん :04/10/14 19:16:25
レスたいへんありがとうございます。(TT)
日本語をカンマ区切りでテキストに書き込めましたので
読み込みもできると思い込んでおりました。
英数字だけのカンマ区切りのデータの場合の処理の仕方がありましたら
どんなものか概要をお教え頂ければ幸いです。

WinAPIでコントロールをたくさん貼り付けて作成しているので、
こちらで質問させて頂きました。
そもそも、WinAPIにANSI Cを使うことは間違いなのでしょうか。

598 名前:デフォルトの名無しさん :04/10/14 19:18:31
スタティックコントロール内の文字なんですが、縦センタリングって可能なんで
しょうか?
自動的でなくても、表示位置を任意に設定できるならそれを使おうと思うのです
が、どうしても方法が分かりません。



599 名前:デフォルトの名無しさん :04/10/14 19:45:12
> そもそも、WinAPIにANSI Cを使うことは間違いなのでしょうか。
それ自体は間違いでも何でもない。
・ANSI C関数の使い方(選び方)
・このスレの使い方
が間違っている


600 名前:デフォルトの名無しさん :04/10/14 21:51:44
DVD-RAMの空き容量を取得したいのですが、
GetFreespaceEx()で取得できるのでしょうか?




601 名前:600 :04/10/14 21:54:33
重ね重ねでもうしわけないのですが、
DVD-RAMドライブにDVD-RAMを挿入した状態で、
GetDriveType()を行った場合、DRIVE_RAMDISKは返ってきるのでしょうか?

602 名前:デフォルトの名無しさん :04/10/14 21:59:28
>>600
GetDiskFreeSpaceEx()のことかね?

603 名前:デフォルトの名無しさん :04/10/14 22:00:53
>>601
DVD-RAMはあからさまにRAMディスクじゃねえからなあ…

604 名前:600 :04/10/14 22:01:01
>>602
そのとおりです。間違いました、すみません。

605 名前:602 :04/10/14 22:18:55
>>601
Panasonic LF-D201ではGetDriveType()でDRIVE_CDROMが返ってきた。
GetDiskFreeSpaceEx()で空き容量を取得することは出来た。

606 名前:600 :04/10/14 22:24:45
>>602
お手数おかけして、すみませんでした。
試して頂いたおかげで助かりました、どうもありがとうございました。

607 名前:デフォルトの名無しさん :04/10/15 02:20:26
HRESULT hr;
IStream pi;
if( FAILED(hr = SHCreateStreamOnFile("A:\\a.txt", STGM_WRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_DIRECT, &pi)) )
{ /* エラー */ }

const UINT size = 1457665;
LPBYTE buf = new BYTE[size];
ULONG written;

if( FAILED(hr = pi->Write(buf, size, &written)) )
{ /* エラー */ }

空のフロッピーに1457665バイト(空き容量+1バイト)書き込みます。
空き容量より大きいので失敗すると思ったのですが、なぜかS_OKが返ってきます。
writtenにもsizeと同じ値が返ってきてます。
空き容量が足りないはずなのに、なぜ成功してしまうのでしょうか?

608 名前:607 :04/10/15 02:21:55
>>607
>IStream pi;
IStream* pi;
修正

609 名前:607 :04/10/15 02:35:15
あと、実際にフロッピーに作られたファイルは1,454,080バイトでした。>>492


610 名前:デフォルトの名無しさん :04/10/15 02:42:00
>>609
バッファリングされるからWriteではエラーにならないとか?
もっと極端に大きなサイズを書こうとすればエラーになるんじゃない?

611 名前:デフォルトの名無しさん :04/10/15 05:17:39
CPU使用率が100%のまま移行するとCPUが熱くなって、
ノートパソコンだとファンがうるさいそうです。

612 名前:デフォルトの名無しさん :04/10/15 06:52:25
>>609
492 とは?

613 名前:607 :04/10/15 11:01:54
>>610
Commit(STGC_DEFAULT)を呼んだらSTG_E_MEDIUMFULLが返ってきました。
どうやらバッファリングしてるみたいです。1,454,080が512や4096の整数倍だし。
とりあえず最後にCommitすることで解決しました。Writeでエラーにならないのは釈然としないけど…
ありがとうございました。

>>612
なんでもありません。いつのまにか付いてました。


614 名前:デフォルトの名無しさん :04/10/15 12:45:47
>>613
>Writeでエラーにならないのは釈然としないけど
実際に書き出しているわけではないから仕方ないかと。

615 名前:デフォルトの名無しさん :04/10/15 13:43:43
エディットボックスやコンボボックスなどのをコントロールをたくさん作成して
あるお方のお手本通りウインドウプロシージャ内(WinPrco)のWM_CREATEで作成しているのですが
WinMain関数内で作成しないでWM_CREATE内で作成する理由はあるのでしょうか。
また、WM_CREATEは、プログラム起動時に発生するメッセージという認識なのですが
間違っていますでしょうか?

616 名前:デフォルトの名無しさん :04/10/15 14:00:22
>>615
WM_CREATEが来るのはウィンドウ作成中
WinMainでウィンドウ作成後に設定するよりスマート(だと俺は思っている)

WM_CREATEはプログラム開始時ではなく、ウィンドウ作成時。名前の通り

617 名前:デフォルトの名無しさん :04/10/15 15:35:14
ウィンドウプロシージャを再利用する時、そのウィンドウに
関する初期化処理をWM_CREATEに書いておけばウマーとか。

618 名前:デフォルトの名無しさん :04/10/15 16:02:51
最近、ワイド液晶を搭載したノートPCとかが出ていますけど、
こういうモニタの物理的なアスペクト比を取得する手段って
ないでしょうか?

619 名前:デフォルトの名無しさん :04/10/15 16:07:23
レジストリ

620 名前:デフォルトの名無しさん :04/10/15 16:10:17
GetDeviceCaps で取れないか?

621 名前:デフォルトの名無しさん :04/10/15 16:17:41
GetMonitorInfoじゃないか。

622 名前:デフォルトの名無しさん :04/10/15 17:08:34
質問です。

CreateWindowで作成したLISTBOXで
WM_DRAWITEMを使わずに
リストボックスの各項目の背景を任意のビットマップにする方法はあるでしょうか?

なんかうまいことやってるアプリを昔見かけた気がするのですが・・
あれはオーナードローなのかな。

623 名前:デフォルトの名無しさん :04/10/15 17:16:03
>>615
グローバル変数の使用を極力避けるようなプログラミングを心がけている人なら、
自然と WM_CREATE の中で初期化をおこなうようになりますよん。

624 名前:デフォルトの名無しさん :04/10/15 17:22:41
>グローバル変数の使用を極力避けるようなプログラミングを心がけている人なら、

>自然と WM_CREATE の中で初期化をおこなうようになりますよん。


関連性ないよ

625 名前:デフォルトの名無しさん :04/10/15 18:09:17
>>615
もし何らかの理由でコントロールの構築に失敗した場合、
DestroyWindowせずとも-1を返してやるだけでウインドウの作成をキャンセルできるから。

626 名前:デフォルトの名無しさん :04/10/15 21:40:35
>>389
ローカルフックでWM_SETFOCUSのHWNDを保存しる

627 名前:デフォルトの名無しさん :04/10/15 22:47:38
ShellExecuteEx で実行するプログラムに環境変数を設定して渡してやるには
どうしたらいいのでしょう?SEE_MASK_DOENVSUBST フラグを使えばいいよう
気もするんですが、ぐぐってみてもよくわかりませんでした・・・orz

628 名前:デフォルトの名無しさん :04/10/15 23:05:30
>>627
環境変数を渡すにはCreateProcessじゃないと無理。
SEE_MASK_DOENVSUBSTはプログラムのパスやコマンドライン引数の部分で"%WINDIR%"のように指定された環境変数を展開させるためのフラグだったはず。

629 名前:デフォルトの名無しさん :04/10/16 01:48:31
エディットコントロールに文字を転送して表示してるのですが
なぜかアルファベットが2バイト文字のようにすこし大きくなります。
表示された文字を別のメモ帳にコピペするとふつうの1バイト文字になります。なぜでしょうか?


630 名前:デフォルトの名無しさん :04/10/16 01:53:36
転送ってなあに?

631 名前:デフォルトの名無しさん :04/10/16 02:02:00
SendMessageのことです

632 名前:デフォルトの名無しさん :04/10/16 02:03:40
へえ

633 名前:デフォルトの名無しさん :04/10/16 02:04:22
そういうフォントだからだろ

634 名前:デフォルトの名無しさん :04/10/16 02:10:41
そういうフォントというのはエディットコントロールの仕様ということですか?
モーダルダイアログボックスにSendDlgItemMessageで転送するとふつうに表示されるのですが


635 名前:デフォルトの名無しさん :04/10/16 02:12:04
MFCが難しいのでWin32APIでプログラム作成しているのですが

Win32APIの仕事って少ないでしょうか。MFCを使えたほうがよいのでしょうか?

636 名前:デフォルトの名無しさん :04/10/16 02:15:18
とりあえず就職しろ
覚えるのはそれからでも遅くは無い

637 名前:デフォルトの名無しさん :04/10/16 02:21:03
チャットソフトをつくりたいのですが どこか
解説しているようなサイトなどないでしょうか

638 名前:635 :04/10/16 02:44:38
>>636
就職しています。
ANSI Cはできるので、ステップアップと思い、Win32APIをやっているのですが
仕事ってあります?Win32APIでプログラムを作成すると無駄に時間だけが掛かってしまうのは私が馬鹿だからなのでしょうか。。。

639 名前:デフォルトの名無しさん :04/10/16 02:44:46
>>635
新卒ならたいがいのところは大丈夫。
30過ぎてるときついかもしれないけど。

640 名前:デフォルトの名無しさん :04/10/16 02:46:23
>>638
就職先で必要でなければ無理に覚えることは無いでしょう。

641 名前:デフォルトの名無しさん :04/10/16 02:52:53
>>638
MFC使うより格段に仕事が早く高品質にできるのなら
多分あると思いますよ。

642 名前:デフォルトの名無しさん :04/10/16 02:55:18
MFCで組むにしてもDelphi使うにしてもC/C++でベタ書きするにせよ、ネイティブアプリ作ってる限りはWin32API自体は把握できてないとだめ。

それを踏まえた上でどうやってアプリ作るかは好きにすればいい。って言っても仕事だとその辺なかなか自由にはならんだろうが。

643 名前:デフォルトの名無しさん :04/10/16 02:57:12
特にMFCは必要な機能に限ってクラスになってなかったりするんで
APIの知識は無駄にならないと思う

644 名前:デフォルトの名無しさん :04/10/16 02:57:43
>>638
もしWin32APIでCUIアプリケーションを作成しているとしたら、あなたが馬鹿だからです。
GUIアプリケーションを作成しているとしたらそもそも単純に時間を比較すること自体が間違ってます。

645 名前:デフォルトの名無しさん :04/10/16 05:13:54
会社によっては Win32API と独自クラスで開発しているのでは?

646 名前:デフォルトの名無しさん :04/10/16 05:34:05
質問です
グローバルフックで
エディットコントロールのデフォルトのポップアップメニューのハンドルを取得したいのですが
どうやればできるでしょうか?

WH_MOUSEでWM_CONTEXTMENUだとエディットコントロールのハンドルが帰ってきて駄目でした


647 名前:デフォルトの名無しさん :04/10/16 05:52:17
コントロールとポップアップメニューは関係ないから
メニューハンドルを得るのは無理では?

648 名前:デフォルトの名無しさん :04/10/16 07:41:55
>>647
ありがとうございました。

649 名前:デフォルトの名無しさん :04/10/16 12:54:53
>>645
それが正解だな

650 名前:デフォルトの名無しさん :04/10/16 12:57:33
開発効率悪そう・・・

651 名前:デフォルトの名無しさん :04/10/16 13:03:23
だって MFC って 生産性<オーバーヘッド

652 名前:デフォルトの名無しさん :04/10/16 13:04:19
ATL は COM 前提だし

653 名前:デフォルトの名無しさん :04/10/16 13:29:41
そこでWTLですよ

654 名前:デフォルトの名無しさん :04/10/16 14:03:45
bccでも使えるライブラリほしいな

655 名前:デフォルトの名無しさん :04/10/16 15:32:48
>>654
っVCL

656 名前:デフォルトの名無しさん :04/10/16 17:11:04
hoge.h

#define ID_HOGE 1
#define ID_HAGE 2

///////////////////////////
hoge.rc

HOGE MENU {
POPUP "ほげ" {
MENUITEM "はげ", ID_HAGE

//////////////////////////

「POPUP "ほげ"」にID_HOGEを関連付ける方法はなかとですか?

657 名前:デフォルトの名無しさん :04/10/16 17:18:29
#define MENUDEF(name) name MENU { POPUP #name { MENUITEM #name, ID_##name
ではだめか? リソーススクリプトの #define が C と同じプリプロセサ呼び出してるかどうか自信ないが・・・

658 名前:デフォルトの名無しさん :04/10/16 17:38:38
バカか?

659 名前:デフォルトの名無しさん :04/10/16 17:42:38
相手にしない方がいいかも

660 名前:デフォルトの名無しさん :04/10/16 21:01:12
ディレクトリ(フォルダ)を指定して、それ配下のファイルとディレクトリの合計サイズを
取得するAPIってないでしょうか?

661 名前:デフォルトの名無しさん :04/10/16 21:07:08
ない

662 名前:デフォルトの名無しさん :04/10/16 21:08:14
WLX_NOTIFICATION_INFOって構造体はどこに定義してあるんでしょうか?
MSDNによればwinwlx.hに定義してあるらしいんだけど、ヘッダをインクルードしても
「定義されてません」って言われちゃう。で、ファイルの中を見たらそんな構造体ありゃしない。
ググっても外国のページしかヒットしないし、仕方なくそのページを開くと普通に使ってるし。
何か足りないのかな?

663 名前:デフォルトの名無しさん :04/10/16 21:24:27
お前の脳味噌。

664 名前:デフォルトの名無しさん :04/10/16 21:28:37
>>662
ヘッダ読んだ?
#if とかでハネてるケースよくあるよ

665 名前:デフォルトの名無しさん :04/10/16 21:29:10
>>662
SDK は最新にしてある?

666 名前:デフォルトの名無しさん :04/10/16 21:38:15
>>662
私も確認してみた。
VC98のwinwlx.hには、WLX_NOTIFICATION_INFO構造体がないね。
そんなわけで、>>665の助言に従うべきでしょう。

667 名前:デフォルトの名無しさん :04/10/16 21:48:55
[ファイルから検索] もしたほうがいい

668 名前:デフォルトの名無しさん :04/10/16 21:52:43
↑それ便利だけど、実装するとなるとちょっと遠慮したいよね

669 名前:656 :04/10/16 22:48:12
>657
それはちょっと無理です。

>658-659
スレ汚し失礼しました、申し訳ないです。

670 名前:662 :04/10/16 23:21:17
>>663
足りないから補いたいのは山々なんだけどね〜

>>664,667
winwlx.hをエディタで開いて探したよ。
でも見つからなかったんで、「ファイルから検索」で探したよ。
残念ながら見つからなかったさ。

>>665
環境はVC6 SP6 なんだけど、これより新しいのって何だろ?.NET?

671 名前:デフォルトの名無しさん :04/10/16 23:27:49
>>670
>>2

672 名前:デフォルトの名無しさん :04/10/16 23:28:29
VC6には入ってなかった、SDKに入ってた。

673 名前:670 :04/10/17 11:23:50
>>671
いや〜お恥ずかしい。早速インストールしたさ。あったさ。WLX_NOTIFICATION_INFOが。

やっぱり脳が足りないようで…
助かりました。どもです。

674 名前:デフォルトの名無しさん :04/10/17 15:37:16
HeapAlloc()で確保するメモリは、必ず物理メモリ上に確保されると考えていいですか?

675 名前:デフォルトの名無しさん :04/10/17 15:39:17
なぜそう思うんだ?
なぜそれが気になるんだ?

676 名前:674 :04/10/17 15:45:04
もうひとつ。

VirtualLock()はVirtualAlloc()以外の方法で確保したメモリにも使えますか?

677 名前:デフォルトの名無しさん :04/10/17 15:47:29
>>674
ページアウトされないってことなら、どんなメモリ確保も物理メモリ上にある保証はありません。

678 名前:デフォルトの名無しさん :04/10/17 15:48:57
「物理メモリ」を誤解している悪寒

679 名前:デフォルトの名無しさん :04/10/17 15:55:19
>>676
使えません。MSDN嫁

680 名前:674 :04/10/17 15:59:52
>>679
ありがとうございます。

681 名前:デフォルトの名無しさん :04/10/17 23:11:50
韓国から拾ってきたVC7ソースなんですが、
これはEUC-KRでかかれているらしく、リテラル文字列が以下のように終端の"が
なくなってしまいます。

InsertColumn(3,"コクウスセ・,LVCFMT_LEFT,65,3);

日本語環境でclコンパイラにEUC-KRを認識させる方法はないでしょうか?

682 名前:デフォルトの名無しさん :04/10/18 00:06:11
濃く薄せ

683 名前:デフォルトの名無しさん :04/10/18 00:08:10
>>681
ソースファイルを適当なエディタで読み込んで変換するんじゃいけないの?

684 名前:681 :04/10/18 00:42:07
ありがとうございます。
エンコードつき保存で、EUC-KR -> UNICODEでできました。

685 名前:デフォルトの名無しさん :04/10/18 00:53:37
画面遷移を行いたいのですが、定石ありますでしょうか?

画面ごとにexeモジュールを作成しているので
画面の中のコマンドボタンを実行すると
別画面(exe)を呼び出し、元のexeは終了する方法を考えています。


686 名前:デフォルトの名無しさん :04/10/18 01:11:21
>>685
なんでそんな面倒なことするんだ?
リソースで定義したダイアログを順々に表示するんではいかんのか?

687 名前:デフォルトの名無しさん :04/10/18 01:41:16
>>686
レスありがとうございます。
リソースについて調べました。使ってみるつもりです。

リソースで定義したダイアログを呼んでも元ウィンドウは残ったままになってしまいそうなのですが・・・。

688 名前:デフォルトの名無しさん :04/10/18 02:43:21
別に元のウィンドウが残っててもいい気がするが…
元を親ウィンドウとして処理するってのが普通だと思うけど…。

それが嫌なら、元ウィンドウ消してから
別のウィンドウ表示すれば良いのでは?

689 名前:デフォルトの名無しさん :04/10/18 03:32:07
ウィンドウ毎に担当者を分けているとか?
それで別 exe の方がやりやすいとか。

別画面が終わったら元画面に戻したりしないの?
元画面終わらせたらかえって面倒だよ。


690 名前:デフォルトの名無しさん :04/10/18 04:16:38
スレ違いかもしれませんが・・・質問させてください・・・

今、32APIでシューティングゲームを作ってるんですが、
パソコンが壊れてしまったので
新しく買い換えたのですが、
新しいPCの方でいきなり描画処理がおかしくなりました。

カクカクと動くし、
背景以外の透過画像やFPS表示もされない・・・

前のPCはビデオカードがオンボードだったんですが、
今回のPCはこれを期に一気に
RADEON X300 の 128Mを積んだマシンを購入したんですが、
PCI Expressがいけなかったんでしょうか・・・

どなたか解る方いらっしゃいますでしょうか?
よろしくお願いします・・・

691 名前:デフォルトの名無しさん :04/10/18 08:09:33
>>690
もしかしてスレ違いかも? (その場合、ハード板が妥当と思われ)

「積んだ」っていうのがどういう形でかわからんが
特注でつけたパーツが新しすぎると
ドライバが「標準」になってたり
初期ロット系のトラブル抱えてたり
OS 側の処理がタコだったり
つーことは結構あるな

692 名前:デフォルトの名無しさん :04/10/18 09:01:17
>>691
そういうのもあるけど質問の仕方からして、あんまり慣れてない人が
環境依存のコード書いちゃったっつうのもありうる。

>>690
自分で書いたコードならプロファイルとるなりトレースするなりで
どの処理に時間がかかってるのか調べてから相談しても遅くない。
DirectXつかってるならカードごとに対応してる機能に違いがある
んで〜CAPSみたいなのを調べてみる必用もあるかも。

693 名前:685=687 :04/10/18 09:08:51
>>688-689

レスありがとうございます。
リソースで新たな画面を呼び出すと
元のウィンドウが表示されたままになってしまい、
モニター上には元の画面と新しい画面の2画面になってしまわないでしょうか・・。

ってやってみってます。すみません。

exeを作っているのは私一人です。

694 名前:デフォルトの名無しさん :04/10/18 09:29:56
>>693
っ[ ShowWindow ]

695 名前:デフォルトの名無しさん :04/10/18 09:41:53
>>693
だから前のウィンドウはそのつど消せっての

696 名前:685=687=693 :04/10/18 11:17:38
>>694=695レスありがとうございます。m(_ _)m

main.rcを作成しその中に以下の一行を追加
MAIN_RESORCE "NEXT_GAMEN.EXE"

VC6++のワークスペースのResorce Fileにmain.rcを追加。

ビルドをしたら以下のエラーが表示されました。
C:\Program Files\Microsoft Visual Studio\MyProjects\Main\main.rc (3): error RC2135 : file not found: "NEXT_GAMEN.EXE"

NEXT_GAMEN.exeは、今回編集しているソースと同じディレクトリおよびdebugフォルダにも格納しましたが
上記エラーが表示されます。

初歩的なことですみません。
なにかこんな頭の悪い人のためのお勧めのWin32APIの参考書はありますでしょうか。

697 名前:デフォルトの名無しさん :04/10/18 11:27:33
どこから突っ込んでいいのかわからない。

698 名前:690 :04/10/18 12:12:11
>>691様 >>692
スレ違いな質問に答えてくださいましてありがとうございました。

ところで、環境依存のコードとありますが、
現在表示されていないソースでは、
画像の透過処理のTransparentBltを使っているんですが、
ここの処理がうまくいってない様です・・・
これは、環境依存コードなのでしょうか?
よろしければ、ご教授ください。

699 名前:デフォルトの名無しさん :04/10/18 14:18:53
GetAsyncStateを使ってキーの押下状態を取得しているのですが、
何個かのキーを同時に押すとBeep音がします。
これを鳴らないようにする方法はないでしょうか。

700 名前:デフォルトの名無しさん :04/10/18 14:33:52
>>699
スピーカーを引っこ抜く

701 名前:デフォルトの名無しさん :04/10/18 14:34:25
複数行あるファイルから一行ずつ読み取るにはどうしたらよいのでしょか。

ReadFile関数で読み込みましたら、すべての行を一回で読んでしまいました。。
ReadFile(hFile , strFile , GetFileSize(hFile , NULL) , &wReadSize ,NULL)!=0)

702 名前:デフォルトの名無しさん :04/10/18 14:47:24
>>701
そういうAPIはないです

703 名前:デフォルトの名無しさん :04/10/18 16:40:14
>>701
>702なので、改行文字まで一文字ずつ読む必要あり。
#いっそ、全部読んでからばらすのも手かも。

704 名前:デフォルトの名無しさん :04/10/18 16:44:06
ちゅうか、わざわざ API 使って
テキストファイル読むこともなかろうにと思うが。
C/C++のライブラリ使えば済むじゃん。


705 名前:デフォルトの名無しさん :04/10/18 16:49:58
>>704
そういうスレではないです

706 名前:デフォルトの名無しさん :04/10/18 16:51:23
はて?
遠回りを奨めるスレでもないと思うが。

707 名前:デフォルトの名無しさん :04/10/18 16:51:40
>>704
>705なので、スレタイを冷静に読む必要あり。
#いっそPCの電源切って窓から投げ捨てるのも手かも。

708 名前:デフォルトの名無しさん :04/10/18 16:53:11
>>704
APIでオープンしなければならない事情があったときはどうしたら?

709 名前:デフォルトの名無しさん :04/10/18 16:54:04
さすがにC/C++ライブラリくらい知ってんじゃないの。
Win32APIにそれ相当のものがあるか?って質問だろう。

710 名前:デフォルトの名無しさん :04/10/18 17:12:10
>>701この手の質問に答えられる奴がいないだけだろ?
毎回、この質問が出ても質問者を叩いて終るし。
誰かコードアップしたれよ。

711 名前:デフォルトの名無しさん :04/10/18 17:18:26
お前がアップしたれよ。

712 名前:デフォルトの名無しさん :04/10/18 17:19:14
>>710
fgetsのソース読めば済むだろ

713 名前:デフォルトの名無しさん :04/10/18 17:24:49
>>712
fgetsじゃベタだろ。

@FileReadで1バイトづつ読んで、\nで読み込み終了
Aファイルポインタを\nの次に移す。
BEOFまで@を繰り返す

つうソースが欲しいんだと思うぞ。>>701



714 名前:デフォルトの名無しさん :04/10/18 17:27:41
>>712
fgetsの中身なんて改行文字がくるまでfgetcで読み込むような感じだろ。

715 名前:デフォルトの名無しさん :04/10/18 17:28:20
となりのメガネが

アピアピ連呼するんですが

なんとかなりませんか。

716 名前:デフォルトの名無しさん :04/10/18 17:30:04
>>713
'\n'の手前にある'\r'は捨てる処理を入れたほうが良いんじゃないかい?

717 名前:713 :04/10/18 17:33:21
>>716
も、もちろん知ってるよ。
ウ、ウィンドウズの改行マークは"\r\n"だ、だろ?


718 名前:デフォルトの名無しさん :04/10/18 17:33:57
timeGetTimeはNT系の場合精度が5ミリ以上になる場合があるとMSDNに書いてあるので,
関数の前後をtimeBeginPeriodとtimeEndPeriodで挟んで精度を上げているのですが,
これ(timeBeginPeriodとtimeEndPeriod)ってtimeGetTimeを呼ぶたびに
毎回呼ばないと精度を保てないんでしょうか?


719 名前:デフォルトの名無しさん :04/10/18 18:10:43
>>713
いくら API スレだからって、
ReadFile で1バイトづつ読ませるなんて、
非効率的な事は勧められんだろう。
そんなことしたら、fgets 使うのに比べて
何十倍も処理時間掛かるじゃん。


720 名前:デフォルトの名無しさん :04/10/18 18:10:51
>>710
誰も質問者を叩いて無いじゃん。
むしろ叩かれてるのは>>704

721 名前:デフォルトの名無しさん :04/10/18 18:13:02
>>719
fgetsをベタとか言ってる時点でネタだと思うが。
fgetsのソースを見る、でこの質問は終了のはず。

722 名前:デフォルトの名無しさん :04/10/18 18:18:50
>>719
貴様!701が読み込みにMutex使ってたら、どう責任取るつもりだ?



723 名前:デフォルトの名無しさん :04/10/18 18:21:24
なんつーか、質問者が出てこないのに仮定で話を進めるのはこのへんでやめにしないか。
続きは質問者が出てきてからってことで・・・

724 名前:デフォルトの名無しさん :04/10/18 18:46:38
低レベルなファイル「読み込み」関数は使うメリットあるのか?
具体的にいうと_read()とかReadFile()とかなんだけど。

低レベルなファイル「書き込み」関数は使うメリットがそれなりにあると思う。

725 名前:デフォルトの名無しさん :04/10/18 18:53:45
>724
非同期 I/O

726 名前:デフォルトの名無しさん :04/10/18 19:00:28
>>708
_open_osfhandle + fdopen とか。

727 名前:デフォルトの名無しさん :04/10/18 19:03:23
>>724
CreateFile()の引数でシーケンシャルスキャン・ランダムスキャンを指定したいとか、
キャッシュ効かせないようにしたりとか(確かFireFileCopyとかそういう事してた)、
SetEndOfFile()使いたいとか、2GB・4GB超えるようなファイルを扱うとか?

728 名前:デフォルトの名無しさん :04/10/18 19:03:47
C++Builder 5 でユーザーモードから ZwQueryInformationFile() を呼び出すと
ハングアップすることがあるんですが、原因がわかる方いらっしゃいますか?

729 名前:デフォルトの名無しさん :04/10/18 19:10:11
>>728
winternl.h のプロトタイプをそのまま使ってない?
プロトタイプがバグってる(WINAPIが付いてない)から使っちゃだめ

730 名前:デフォルトの名無しさん :04/10/18 19:12:55
WINAPIじゃなくてNTAPIか
まあどっちも__stdcallに展開されるんだけど

731 名前:デフォルトの名無しさん :04/10/18 19:17:55
>729
ありがとうございます。
ヘッダーは DDK に付属のものを使っています。

NTSYSAPI
NTSTATUS
NTAPI
ZwQueryInformationFile(
  IN HANDLE FileHandle,
  OUT PIO_STATUS_BLOCK IoStatusBlock,
  OUT PVOID FileInformation,
  IN ULONG FileInformationLength,
  IN FILE_INFORMATION_CLASS FileInformationClass
  );

どうも、特定のファイルをクエリーするときにだけ、ハングアップするようなのです。
ハングアップするというのは、この API から戻ってこないということです。

732 名前:デフォルトの名無しさん :04/10/18 22:16:09
>>724
ReadFile()はCランタイムライブラリを全く使わないプログラムを作るときに使うんだろう。

733 名前:デフォルトの名無しさん :04/10/18 23:12:33
IMEにユーザー辞書を追加したあと、
WM_IME_COMPOSITION
で変換候補が確定した時にその単語がどの辞書
(標準辞書なのかユーザー辞書なのか)に含まれるか調べたいのですが

どうやって調べればいいんでしょうか

734 名前:デフォルトの名無しさん :04/10/18 23:32:46
よく年月日のテキストボックスの横に上、下に向いている三角形(▼▲)が
あるけど、これってwin32apiでは実装されてないのでしょうか?
▲▼をクリックすると、テキストボックスの日付が変わる機能です。

735 名前:デフォルトの名無しさん :04/10/18 23:44:31
>>734
スピンコントロールでぐぐれ

736 名前:デフォルトの名無しさん :04/10/18 23:44:33
コモンコントロールのUp-Down

737 名前:デフォルトの名無しさん :04/10/19 04:46:18
void TForm1::ShowContextMenu(TObject* Sender, LPITEMIDLIST pIDL)
{
HRESULT hRes;
LPCONTEXTMENU pContMenu;
HMENU hMenu;
POINT pCursor;
int iCommand;
CMINVOKECOMMANDINFO stInvokeInfo;

hRes = m_pDTFolder->GetUIObjectOf(this->Handle, 1, (LPCITEMIDLIST*)pIDL, IID_IContextMenu, 0, (LPVOID*)&pContMenu );
if (hRes != NOERROR) return;
hMenu = CreatePopupMenu();
hRes = pContMenu->QueryContextMenu(hMenu, 0, 1, 0x7FFF, CMF_NORMAL);
if (hRes == NULL) {DestroyMenu(hMenu); return;}

GetCursorPos(&pCursor);
iCommand = TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RETURNCMD | TPM_LEFTBUTTON, pCursor.x, Cursor.y, 0, this->Handle, NULL);

if (iCommand != 0) {
/* stInvokeInfo 処理 */
}
DestroyMenu(hMenu);
pContMenu->Release();
}


738 名前:737 :04/10/19 04:54:01
ちなみにBorland C++ Builder 5 です

pIDLは、「マイコンピュータ / C: (VOLUME) / HOGEHOGE」
のようになっています

この関数を実行すると、メニューは表示されるのですが
メニューの表示項目が必ずマイコンピュータのものになってしまいます

しかし、そこで強引に HOGEHOGE のメニューで
「ショートカットの作成」を行うと、
「ここには作れません、デスクトップに(r」となり
そのできあがったショートカットは HOGEHOGE のものになります

hRes = pContMenu->InvokeCommand( &stInvokeInfo );
を実行する、stInvokeInfo で構造体にpIDLを入れる必要が無い事から
pContMenu には正しくpIDLが入ってるように思うのですが
これは、必ずしもそういうことじゃないのでしょうか?

739 名前:737 :04/10/19 05:01:11
kab-studio の Codian という所を参考にしました

具体的に渡しているpIDLは

// ファイルのIDリスト
HRESULT hRes;
wchar_t lpszDisplayName[MAX_PATH];
m_strFullPath = "C:\\HOGE\\PUNI";
StringToWideChar(m_strFullPath, lpszDisplayName, MAX_PATH);
hRes = Form1->m_pDTFolder->ParseDisplayName( NULL, NULL, lpszDisplayName, NULL, &m_pIDL2, NULL);

// マイコンピュータのIDリスト
SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &m_pIDL1);

これに対し
ttp://www.kab-studio.biz/Programing/Codian/ShellExtension/06.html
のConcatItemIDをそのまま使って

pIDL = ConcatItemID(m_pIDL1, m_pIDL2)

のような形になっております

740 名前:デフォルトの名無しさん :04/10/19 05:07:20
GetUIObjectに渡すItemIDListは、基本的にSingle-Levelでないとだめ。

741 名前:737 :04/10/19 07:59:55
Desktopをつけるのが余計なんでしょうか?
それともファイルのIDリストのm_pIDL2から末尾を取るという事でしょうか?

Desktopをつけなくても、
マイコンピュータからのフルIDLISTが入手できるみたいで
挙動は変わりませんでした

末尾だけをGetUIObjectOfに渡したら
フォルダの場合メニューが出るけど、正しく実行されない
(どうやらデスクトップフォルダ+ファイル名になってるみたい)
ドライブの場合は妙に寂しいメニューしか出ない

って感じで、かなり困ってます。。。

742 名前:デフォルトの名無しさん :04/10/19 08:27:43
ITEMIDLIST* pIDL = ::ILCreateFromPathW(L"C:\\HOGE\\PUNI");
const ITEMIDLIST* pIDLSingleLevel = ::ILClone(::ILFindLastID(pIDL));
::ILRemoveLastID(pIDL));

IShellFolder* pDesktop;
IShellFolder* pFolder;
IContextMenu* pContextMenu;
::CoCreateInstance(CLSID_ShellDesktop, NULL, CLSCTX_INPROC, IID_IShellFolder, (void**)&pDesktop);
pDesktop->BindToObject(pIDL, NULL, IID_IShellFolder, (void**)&pFolder);
pDesktop->Release();
pFolder->GetUIObjectOf(hwnd, 1, &pIDLSingleLevel, IID_IContextMenu, NULL, (void**)&pContextMenu);
pFolder->Release();

なんか();

pContextMenu->Release();
::ILFree(pIDLSingleLevel);
::ILFree(pIDL);

大体こんな感じ。

743 名前:737 :04/10/19 10:38:35
GetUIObjectOfはデスクトップを使えばいいってわけじゃなかったのね
本当にありがとう、なんとかうまく表示されるようになりました

・・・これからIContextMenu2 との戦いっす、ふみゅー

744 名前:デフォルトの名無しさん :04/10/19 14:58:29
テキストボックスとそれの名前(項目名)で100個近くに
コントロールを画面に貼り付ける予定なのですが
座標指定でなにかいい案はありませんでしょうか。

ちょっとずれたらすべて修正なんて気が狂いそうです。

745 名前:デフォルトの名無しさん :04/10/19 15:13:43
>>744
その実装を考え直すことを勧める

リストビューを使うとか、他に方法はあるだろ?

746 名前:デフォルトの名無しさん :04/10/19 15:22:59
>>744
リソースエディタを使わずに、CreateWindow()でセコセコと生成するとか。


747 名前:デフォルトの名無しさん :04/10/19 15:26:34
>>746
多分それが正解だろうな
描画位置とかサイズとかをdefineしておけば変更も簡単だし

748 名前:デフォルトの名無しさん :04/10/19 15:40:38
745が正解だよ。

749 名前:デフォルトの名無しさん :04/10/19 15:46:44
クライアント側から「テキストボックスで」という指定があるという可能性も否定できないかもしれない

750 名前:デフォルトの名無しさん :04/10/19 15:53:19
そんな仕様を呑むのがどうかしている。


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