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


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

Win32API質問箱 Build34
1 名前:デフォルトの名無しさん :2005/07/30(土) 20:30:09
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。

  ∧_∧
 ( ´∀`) < 0x22

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

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

-前スレ
Build33:http://pc8.2ch.net/test/read.cgi/tech/1120153520/

2 名前:デフォルトの名無しさん :2005/07/30(土) 20:30:44
-過去スレ
Build32:http://pc8.2ch.net/test/read.cgi/tech/1117271829/
Build31:http://pc8.2ch.net/test/read.cgi/tech/1114762194/
Build30:ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
Build29:ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
Build28:ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
Build27:ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
Build26:ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
Build25:ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
Build24:ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
Build23:ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
Build22:ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
Build21:ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
Build20:ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/
Build15:ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/


3 名前:デフォルトの名無しさん :2005/07/30(土) 20:31:29
Build14:ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:ttp://pc.2ch.net/tech/kako/991/991576947.html

4 名前:デフォルトの名無しさん :2005/07/30(土) 20:32:09
- MSDN Online
http://www.microsoft.com/japan/msdn/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com/

- WindowsR Server 2003 SP1 Platform SDK Full Download
http://www.microsoft.com/downloads/details.aspx?familyid=EBA0128F-A770-45F1-86F3-7AB010B398A3&displaylang=en
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm

Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
Win32 プログラミング入門
http://www7.plala.or.jp/keny01/windows/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/

■書籍
Advanced Windows
http://www.amazon.co.jp/exec/obidos/ASIN/4756138055

5 名前:デフォルトの名無しさん :2005/07/30(土) 20:48:40
>>1-4


>>6-999
Advanced Windows の隅々まで穴が悪魔で嫁

6 名前:デフォルトの名無しさん :2005/07/30(土) 20:48:56


7 名前:デフォルトの名無しさん :2005/07/31(日) 03:59:31
ディレクトリを作成したいのですがCreateDirectoryを使おうとおもいます。
作成するディレクトリ名はユーザーに指定させ、すでにある場合は作成しません。
そのためCreateDirectoryを呼ぶ前にそのディレクトリがあるか調べたいです。
_statのようなANSI-CのものではなくCreateDirectoryと同じくWin32のAPIがよいです。
なにかよいものはありますか?
ちなみにFindFirstFileは面倒なのでいやです。一発で判定できるとうれしいです。
あと、もうひとつ。
ある文字列がパスとして有効かどうか判定するAPIはありますか?
たとえば、使ってはいけない文字が含まれていればFALSEが返るなど。
よろしくお願いします。


8 名前:デフォルトの名無しさん :2005/07/31(日) 04:06:43
>>7
GetFileAttributes


9 名前:デフォルトの名無しさん :2005/07/31(日) 04:45:22
>>7
直接的な答えは PathIsDirectory とか PathFileExists か。
でも、MakeSureDirectoryPathExists 使えばいいんじゃない?
後半は知らん。

10 名前:デフォルトの名無しさん :2005/07/31(日) 07:55:48
>>8-9
サンキューです。

11 名前:デフォルトの名無しさん :2005/07/31(日) 08:53:19
産休ですか?


12 名前:デフォルトの名無しさん :2005/07/31(日) 09:12:42
夏ですね

13 名前:デフォルトの名無しさん :2005/07/31(日) 12:28:32
dat落ちしている過去スレが見れます。
http://makimo.to/cgi-bin/search/search.cgi?q=Win32API&andor=AND&sf=2&H=&view=table&shw=&D=tech

次からテンプレに入れといてほしいな。

14 名前:デフォルトの名無しさん :2005/07/31(日) 12:55:07
>>13
2chは●の売り上げによって設備をレンタルしているので、
●を買って見てください
ということにしておいたほうがいいと思う。

にくちゃんねるは好きだけど、知っている人だけが使う、というのでいいと思う。

15 名前:デフォルトの名無しさん :2005/07/31(日) 15:16:07
>>13
part19が見られないわけだが。

16 名前:デフォルトの名無しさん :2005/07/31(日) 15:54:56
ふと思ったんだが、winnyのリストビューの中の進歩グラフってどうやって実現してるんだろ。。。
それ考えると47氏すげーな。

17 名前:デフォルトの名無しさん :2005/07/31(日) 16:03:32
>>47
タイーホ

18 名前:デフォルトの名無しさん :2005/07/31(日) 16:04:32
Winnyはすごいけどオーナードローはすごくない

19 名前:デフォルトの名無しさん :2005/07/31(日) 16:14:15
>>18
オーナードローか。。
リストビュー、オーナードローでその機能実現してるサンプルあるかな??
勉強してみたいんだけど。

20 名前:デフォルトの名無しさん :2005/07/31(日) 17:24:19
>>19
おまえ、検索ぐらいしてみたのか?

21 名前:デフォルトの名無しさん :2005/07/31(日) 17:38:38
>>19
進歩じゃなくて進捗な。

22 名前:デフォルトの名無しさん :2005/07/31(日) 18:14:50
>>20
リストビュー単体、オーナードロー単体はよくあるけど、漏れが探してみた感じでは
リストビューで進捗グラフ表示しているのはVB以外はなかった。
VC、sdkでは見つからないなぁ・・。

23 名前:デフォルトの名無しさん :2005/07/31(日) 18:19:59
Winny2だとVCLだろうからTCustomListView.OnCustomDrawItem/SubItemあたり使ってそうだな‥‥

24 名前:デフォルトの名無しさん :2005/07/31(日) 18:21:34
オーナードローのやり方さえ分かりゃ、後は好きにグラフなりなんなり描きゃいいと思うんだが。
別に両方同時にやってるサンプルは必要ないべ?

25 名前:デフォルトの名無しさん :2005/07/31(日) 18:47:05
>>23, 24
とりあえず、リストビューオーナードローで作ってみる。
情報トンクス。詰まったときは相談のってくらさい。

26 名前:デフォルトの名無しさん :2005/07/31(日) 18:53:08
トレードシステムつくろ

http://long2.fc2web.com/

27 名前:デフォルトの名無しさん :2005/07/31(日) 18:58:13
WinnyはWin32API的には凄くない。

セマフォの使い方が間違っていたり、etc・・・

28 名前:デフォルトの名無しさん :2005/07/31(日) 20:39:45
シリアルポートの /dev/ttyS1 を複数のプロセスから open して
入出力するときだけ flock かけるようなことを UNIX でやっているのですが、
同じことを Win32 でやろうとして、
CreateFile で COM? を共有で開こうとしても上手くいきません。
Win 的にはどういうやり方をすると良いでしょうか。

29 名前:デフォルトの名無しさん :2005/07/31(日) 20:55:07
>>28
CreateFile()のパラメータは?
適当に設定しておけば開けると思うのだけど。
#ダメだったらゴメン。

30 名前:デフォルトの名無しさん :2005/07/31(日) 20:55:51
BitBlt関数をSRCINVERTでマスク画像を表示させていたのですが、
急にマスクが掛からなくなりました。
BitBlt(hdc , 188 , 238 , 25 , 25 ,
hMem5 , 0 , 50 , SRCAND);
BitBlt(hdc , 188 , 238 , 25 , 25 ,
hMem6 , 0 , 0 , SRCINVERT);
なぜでしょうか?
分かりません。おながいします。

31 名前:デフォルトの名無しさん :2005/07/31(日) 20:58:22
>>30
マスクが死んでるんじゃないの?
それだけじゃ判断できん

32 名前:デフォルトの名無しさん :2005/07/31(日) 21:07:32
>>29
CreateFile("COM1", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

FILE_SHARE_* を取ると開けるのですが・・

33 名前:891 :2005/07/31(日) 21:14:19
皆様こんばんは。前スレでAPIHookについて悩んでおりました者です。
強制終了が起こる原因が分かりましたのでご報告いたします。

まず、プログラムがクラッシュしていた原因は、
APIフック部ではなく、LogWrite関数、ログ記録部でした。
そして、ここでfwriteによって書き込みを行っているのですが、
このfwriteを連続して2回以上コールすると、クラッシュしてしまうようなのです。
なので、書き出すデータを一つの変数へまとめ、一度のfwriteで書き込みを行うよう修正しました。
以上です。
サポートしていただいた方々ありがとうございました。
また何かありましたら質問させていただきますのでその節はよろしくおねがいいたします。

34 名前:デフォルトの名無しさん :2005/07/31(日) 21:17:04
>31
レスdクス。
「マスクが死ぬ」とはどういう事ですか?
詳細きぼん

35 名前:デフォルトの名無しさん :2005/07/31(日) 21:21:00
ClipCursorでカーソル移動範囲を自ウィンドウ内に限定したいのですが、
カーソルが設定範囲に移動するものの、その後は自由に範囲外へ移動できてしまいます。
範囲外へのカーソル移動を阻害するにはどうすればいいのでしょうかorz

ClipCursorはウィンドウ生成時(VCLのTFormコンストラクタ内)にてGetWindowRectで取ったRECT構造体を渡しています。
OSはWidnows2000です。

36 名前:デフォルトの名無しさん :2005/07/31(日) 21:33:36
実モニタの最大解像度を取得する方法ってあるのでしょうか?
やりたいことは、最大解像度よりも大きな解像度を選択し仮想スクリーン
になっているときに、画面に中央部分を表示させるようにしたいんです。
とりあえず下記の方法で半ば強引にさせてます。

x = GetSystemMetrics( SM_CXSCREEN );
y = GetSystemMetrics( SM_CYSCREEN );
for( i=0; i<(y/2); i+=8 ){
SetCursorPos( i, i );
SetCursorPos( x-i, y-i );
}

37 名前:30 :2005/07/31(日) 21:42:32
スマソ。
事故解決しますた。
普通画像とマスク画像が逆だった。

38 名前:デフォルトの名無しさん :2005/07/31(日) 22:14:53
とりあえずお約束
>>35
スパイウェアでも作って強制的にOKを押させたいんですか?

39 名前:デフォルトの名無しさん :2005/07/31(日) 22:19:37
>>38
使用用途を問うのはスレ違い

40 名前:デフォルトの名無しさん :2005/07/31(日) 22:29:42
>28
ms-help://MS.MSDNQTR.2003FEB.1041/devio/base/communications_resource_handles.htm
>The fdwShareMode parameter must be zero, opening the resource for exclusive access.
なので無理です。

41 名前:35 :2005/07/31(日) 23:20:07
>>38
ゲームでウィンドウ外にカーソルが飛んで他のアプリに誤爆するのを防ぐためです。
マウス主体の操作の場合、これが結構ストレス貯まるので‥‥

42 名前:デフォルトの名無しさん :2005/07/31(日) 23:22:51
>>41
全画面表示にすればいいだけじゃないのか?

43 名前:デフォルトの名無しさん :2005/07/31(日) 23:23:47
>>35
本来のカーソルそのものは消して自前描画するのはどうかね?
マウスの移動メッセージのみを拾って。

44 名前:デフォルトの名無しさん :2005/07/31(日) 23:36:27
>>41
SetWindowsHookEx()を使い、WM_MOUSEMOVE拾って移動制限かけるのは?

45 名前:35 :2005/07/31(日) 23:41:39
>>42
ウィンドウ前提のミニゲームなのでフルスクリーンは

>>43
自前描画してもカーソルが移動してクリックされれば他のアプリやデスクトップにマウスメッセージが

>>44
とりあえずそっちの方向でごまかしてみます

しかしなんでClipCursorが期待通りの動きをしないやらorz

46 名前:デフォルトの名無しさん :2005/08/01(月) 00:04:07
本当にClipCursorの動作がおかしいね。
とりあえずメッセージループの中などで毎度ClipCursorすれば・・ちょっと気持ち悪いけどね。

47 名前:デフォルトの名無しさん :2005/08/01(月) 00:09:18
>>45
>ClipCursorはウィンドウ生成時(VCLのTFormコンストラクタ内)にてGetWindowRectで取ったRECT構造体を渡しています。

ちゃんとスクリーン座標で渡してるか?
きちんとMSDNなり読んでからケチつけろよ。


48 名前:29 :2005/08/01(月) 00:09:28
>>40
ふむ、MS-DOS以来の使用そのままか。
>>28
つーことで、素直に毎回open/closeかな。どっちみちデバイス制御周りは互換性ないから
戦略が違っても何とかなるでしょ?

49 名前:デフォルトの名無しさん :2005/08/01(月) 00:15:23
>>45
コンストラクタ内とかかいてあるんで、VCLはよく知らんけどウィンドウができる前に設定したりしてるんじゃね-の?
VC6(MFC)では以下のコードでちゃんと動いた。

View::OnLButtonDblClick()
{
 if(bClick){
  ::ClipCursor(NULL);
  bClick = FALSE;
 }else{
  RECT rc;
  GetWindowRect(&rc);
  ::ClipCursor(&rc);
  bClick=TRUE;
 }
}

50 名前:デフォルトの名無しさん :2005/08/01(月) 00:25:34
項目名の右にその項目の内容に関する文字列を表示する
リストボックスみたいな物を作りたいんですけど、
これってリストビューというやつが適してますか?
それともリストボックスで簡単にできますか?

51 名前:デフォルトの名無しさん :2005/08/01(月) 01:31:18
>>50
それはスレ違いジャマイカ?

52 名前:デフォルトの名無しさん :2005/08/01(月) 08:29:46
>>50
そんなもんも自分で選べないお前にはsprintf

53 名前:デフォルトの名無しさん :2005/08/01(月) 09:32:46
>>35
TFromのコンストラクタではまだウインドウ生成されてないぞ。
OnCreateでやれ。

54 名前:デフォルトの名無しさん :2005/08/01(月) 11:45:14
アプリが切り替わったときにClipCursorがリセットされるみたいだから、OnCreateでやっても駄目だべ。
やるならApplication.OnActivateか。

55 名前:デフォルトの名無しさん :2005/08/01(月) 17:09:52
Win2k以降のNT系OSでデバマネからの「ハードウェア変更後のスキャン」
と同等のことをさくっと行うのにはどうしたら良いですか?

デバマネ開いて右クリックして…はちょっとめんどくさいので…

56 名前:デフォルトの名無しさん :2005/08/01(月) 17:24:36
SetupDiなんちゃら

57 名前:デフォルトの名無しさん :2005/08/01(月) 17:28:06
>>55
SETUPAPI.DLL
CM_Locate_DevNode
CM_Reenumerate_DevNode

58 名前:デフォルトの名無しさん :2005/08/01(月) 17:33:41
リッチエディットコントロールで、指定した文字がある場所の行番号を得たい場合は
どうすればいいのでしょうか?

59 名前:デフォルトの名無しさん :2005/08/01(月) 17:42:12
確か前スレにあったぞ、そんな感じの質問

60 名前:デフォルトの名無しさん :2005/08/02(火) 02:13:54
他のウィンドウに隠れたウィンドウをキャプチャしたいです。
GetWindowDCとか試したんですが、前にあるウィンドウがかぶります。
ウィンドウを前に出さずにキャプチャする方法か無いでしょうか?

61 名前:デフォルトの名無しさん :2005/08/02(火) 03:07:28
EnumWindowsでウィンドウを列挙して力尽くで調べ上げてください。

62 名前:デフォルトの名無しさん :2005/08/02(火) 03:30:40
は?

63 名前:デフォルトの名無しさん :2005/08/02(火) 06:13:26
ヒント: WM_PRINT or PrintWindow or レイヤードウィンドウ

64 名前:デフォルトの名無しさん :2005/08/02(火) 06:22:19
ヒントにしてはずいぶん親切だな

65 名前:デフォルトの名無しさん :2005/08/02(火) 08:32:40
Requirements
Windows NT/2000/XP: Included in Windows XP and Windows Server 2003.
Windows 95/98/Me: Unsupported.
Header: Declared in Winspool.h; include Windows.h.
Library: Use Winspool.lib.

[゚Д゚]<


66 名前:60 :2005/08/02(火) 16:43:27
ヒントありがとうございます。
---
HDC dcmem;
dcmem = CreateCompatibleDC(NULL);
SendMessage( hTargetWnd, WM_PRINT, (WPARAM), PRF_ERASEBKGND | PRF_CLIENT );
// hTargetWnd は対象のウィンドウ
---
と、したんですが取れていないっぽいです。
ビットマップを握らせてみたりしたんですけど、真っ黒(初期状態?)でした。
何か気をつけないといけない事とかありますか?

67 名前:デフォルトの名無しさん :2005/08/02(火) 20:48:07
W<_PRINTは対象のウィンドウがサポートしてるとは限らない。
サポートしてなければどうしようもない。
それこそ無理やりレイヤードウィンドウにでもしない限り
背面に回したままキャプチャは不可能

68 名前:デフォルトの名無しさん :2005/08/03(水) 01:00:02
30Mぐらいのファイルを大量に外付けのHDに
コピーしたいのですが、一番早いコピー方法を
教えてほしいとです。
よろしくお願い致します。

69 名前:デフォルトの名無しさん :2005/08/03(水) 01:49:52
DnD

70 名前:デフォルトの名無しさん :2005/08/03(水) 04:46:56
読み込みスレッドと書き込みスレッドを分ける

71 名前:デフォルトの名無しさん :2005/08/03(水) 07:51:15
CopyFileが最速だと思う

72 名前:デフォルトの名無しさん :2005/08/03(水) 09:15:11
ありがとうです。
SHFileOperationが最速だと思ってた・・・
CopyFileなのか〜。

73 名前:デフォルトの名無しさん :2005/08/03(水) 09:32:33
実測しろ
独自ルーチンのほうが速いかもしれんぞ

74 名前:デフォルトの名無しさん :2005/08/03(水) 10:00:25
でも少なくともSHFileOperationよりはCopyFileの方が早いだろうと思う。

75 名前:デフォルトの名無しさん :2005/08/03(水) 10:24:20
初めまして。
Windowsの右下の常駐アイコンが表示されるところ(時計とか表示されるところ)に
作成したプログラムを起動したときアイコンを表示させたいのですが
どのようにしたらいいか教えていただけないでしょうか。

MSDNで検索してもうまく見つけられませんでした。

76 名前:デフォルトの名無しさん :2005/08/03(水) 10:30:58
そんなもんググればすぐ見つかるのに・・・

77 名前:デフォルトの名無しさん :2005/08/03(水) 10:32:30
>>75
おまいさんが質問しなければいけないのは、

Windowsの右下の常駐アイコンが表示されるところ
(時計とか表示されるところ)

の呼び名じゃないか?

78 名前:デフォルトの名無しさん :2005/08/03(水) 10:33:08
>>75
あそこはタスクトレイと言うんだ。
そこに表示されるアイコンはトレイアイコンと言う。

ハイ、も一回検索。

79 名前:75 :2005/08/03(水) 10:36:06
はい、検索してきます。^^;

80 名前:75 :2005/08/03(水) 10:42:42
見つかりました。 みなさんありがとぉ^^

81 名前:デフォルトの名無しさん :2005/08/03(水) 11:32:24
>>75-80
なんか、この流れにワロス

82 名前:55 :2005/08/03(水) 16:09:20
>>56-57
ありがとうございます。そこら辺をググったら
ttp://support.microsoft.com/default.aspx?scid=kb;ja;JP259697
が出てきたのでこれをそのままコピペしてやってみましたが「ハードウェア変更のスキャン」とは
同じ挙動ではないようです。
SCSIデバイスのホットスワップを行うのが目的なのですがSCSIデバイスの状態を変更後このコードを走らせても
反映されません

MinGWでコンパイルしているのがまずいのでしょうか…?

83 名前:デフォルトの名無しさん :2005/08/03(水) 16:19:30
>>82
こちらでは期待通り動いている。

84 名前:前スレ943 :2005/08/03(水) 20:20:23
>>前スレ 945
おかげさまで解決しました。
CoInitializeSecurity()でバッチシでした。

質問
同一CPU上でアカウントAからアカウントBで動いている、COMサーバーに
接続するには?

解決方法
1 ImpersonateLoggedOnUserでスレッドのユーザ偽装。
2 CoInitializeSecurity()のdwCapabilitiesをEOAC_STATIC_CLOAKING またはEOAC_DYNAMIC_CLOAKING
3 CoCreateInstanceで偽装したユーザにつながる。

85 名前:デフォルトの名無しさん :2005/08/03(水) 22:34:46
グローバルフックでWM_IME_NOTIFYが来たときにGetCaretPos()でキャレットの位置を
取得したいのですが、画面上にキャレットがないときにもこの関数が成功してしまうみた
いなので困っています。
現在画面上にキャレットが表示されているかいないかを判別する方法はありますか?

86 名前:デフォルトの名無しさん :2005/08/03(水) 23:46:55
脊髄でレスだが、フォーカス持ってるウィンドウのクラス名で
判断できないかな?

87 名前:60 :2005/08/04(木) 00:00:48
UpdateLayeredWindowの使い方がイマイチわかりません。
http://azumaya.s53.xrea.com/index.php?page=doc/win32api/layeredwindow
↑とか読んでやっているんですが、hdcsrcの握っているビットマップがそのまま対象ウィンドウにべた塗りされているようで、キャプチャまで至りません。
コード貼ると長いのでうpしました。
http://www.abenatsumi.net/up/big/source/big1464.zip

どなたか添削希望orz

88 名前:デフォルトの名無しさん :2005/08/04(木) 00:19:13
検索しても見つからなかったので質問します。

ウィンドウを4分割して使いたいのですが
4分割のやり方が書いてあるページ、書籍などありましたら教えていただけませんか?
よろしくお願いしますm(_ _)m

89 名前:デフォルトの名無しさん :2005/08/04(木) 00:33:24
>>88
自分で管理するんだよ、そういうコントロールがあるわけじゃない。

90 名前:デフォルトの名無しさん :2005/08/04(木) 00:47:15
>>84
CoCreateInstanceするスレッドを偽装するってこと?
CoCreateInstanceExってのもあるよ。
ところでなんのためにc/sでユーザ同一にしてんの?

質問ですが
OutputDebugStringした文字列見るCUIプログラムがあったと思うのですが
なんて名前でしょう?

91 名前:デフォルトの名無しさん :2005/08/04(木) 01:14:11
>>90
PlatformSDK付属のDbMonとかCUIだった気が

92 名前:デフォルトの名無しさん :2005/08/04(木) 01:18:47
>>88
MFCのCSplitterWndのソースとか??

93 名前:デフォルトの名無しさん :2005/08/04(木) 02:30:00
>>91
みつかった。ありがとう。

94 名前:デフォルトの名無しさん :2005/08/04(木) 03:23:08
>>89
>>92
ありがとうございます。
なにぶん初心者なもので、MFCのCSplitterWndは知りませんでした。
ソースを参考にしていろいろやってみたいと思います。

95 名前:デフォルトの名無しさん :2005/08/04(木) 03:32:56
>>78
http://blogs.msdn.com/oldnewthing/archive/2003/09/10/54831.aspx
海外だと"system tray"という俗称が広まってるようだが
日本の「タスクトレイ」はどこから広まったんだろうな

96 名前:デフォルトの名無しさん :2005/08/04(木) 04:14:55
sendinputでの入力ストリームをブロック出来るようですが
具体的にどうのようにすればブロック出来るか教えて頂け
ないでしょうか?

97 名前:デフォルトの名無しさん :2005/08/04(木) 04:15:42
VistaのWin32 API(WinFXではなく)の説明ってどこかにないのでしょうか。
β1ではWinFX自体別インストールなのにWinFXのドキュメントしかないって
なめてるのか?

98 名前:デフォルトの名無しさん :2005/08/04(木) 04:18:58
別にLonghornになったからってWin32の動作は変わらないと思うが。
過去との互換性は大事だから、
MSはできる限り動作を変えないようにがんがるはず。

まあ問題があったから動作を変えたものもあるけどね、
SetForegroundWindowとか。

99 名前:デフォルトの名無しさん :2005/08/04(木) 04:50:35
いやAPIがけっこう追加されてるはずなんだけど。
http://mikedimmick.blogspot.com/2004/07/changes-to-win32-api-in-longhorn_21.html
Win95に追加されたWin16 APIみたいに公開されずじまいで黒歴史になるんだろうか。
MicrosoftはWin32とWinFXの両方でVistaの全機能にアクセスできると
約束したはずなんだが…。

100 名前:デフォルトの名無しさん :2005/08/04(木) 05:15:52
Win16APIは追加されたんじゃなくて互換性のために残ってただけだろ

101 名前:デフォルトの名無しさん :2005/08/04(木) 05:25:33
Win95でWin16APIに拡張が施されたという意味だろ。
で、どういうのが追加されたわけ?

102 名前:デフォルトの名無しさん :2005/08/04(木) 05:55:59
公式にはGDI32にしかないとされているAPIの一部(ベジェなど)とか、
GDI/USERの32ビットヒープを見るためのToolhelp APIとか。

103 名前:デフォルトの名無しさん :2005/08/04(木) 07:17:38
メッセージキューに溜まっているメッセージの数を
取得するAPIってあるでしょうか?
APIでなくても何か方法があれば知りたいのですが・・・
よろしくお願いします。

104 名前:デフォルトの名無しさん :2005/08/04(木) 07:32:27
>>103
事前に調べるのは無理だろう。
まあ、あえてやろうと思えば(意味があるかどうか知らんがw)

for(i = 0; PeekMessage(&msg, NULL, 0, 0, PM_REMOVE); i++) ;


105 名前:103 :2005/08/04(木) 08:14:20
なるほど、ありがとうございます。
処理が重すぎてメッセージが溜まるようなら調整するようにしようと思ったのですが、
他の方法を考えてみます(´Д⊂

106 名前:85 :2005/08/04(木) 08:42:42
>>86
ありがとうございます。
最終手段としては考えていますが、それだとエディタやIE内のエディットボックスなど
判断できない場合があるのし、新しいアプリにも対応できないのでできれば他の方法がいいのですが。

根本的な解決方法はないのでしょうか?

107 名前:デフォルトの名無しさん :2005/08/04(木) 20:47:20
LoadBitmap() を使いたいのですが分からないことがあります。
リソースファイルに
nameID BITMAP filename
を書き加えて、
LoadBitmap(hInstance , "nameID");
みたいなかんじでwebサイトとかに載っているのですが、
うまくいきません。(BitBlt()とかで転送しても表示されない)

リソースファイルを作ったときにできたresource.hを
#inlcude "resource.h"
インクルードして
LoadBitmap(hInstance , MAKEINTRESOURCE(nameID)); とか
LoadBitmap(hInstance ,(LPCTSTR)nameID);
だったらうまくいきます。

というか、リソースファイルの記述が.Netじゃできなくて
別のエディタで書いてたりします。使い方とかも教えてほしいです。
長くてすいません。

108 名前:デフォルトの名無しさん :2005/08/04(木) 21:45:18
nameID BITMAP filename

"nameID" BITMAP filename

こうすればいいような希ガス。

109 名前:デフォルトの名無しさん :2005/08/04(木) 23:13:45
VC6です。実はMFC内のコードですが、こちらが適切と思いお邪魔致しました。
クリップボードのbitmapをファイルに保存したいです。ハンドルから直接データを
頂けるとラクなので以下のようにした(動作はしている)のですが、こういうやり方ってOKなんでしょうか?
Web上のみなさまはGetDIBitsを主に使っておられ、以下のようにしてる人は見当たらなかったもので・・・

BITMAPFILEHEADER bmfh;
/* bmfh.bfSize 以外に定型データ代入 */
::OpenClipboard(m_hWnd);
HBITMAP hBitmap = (HBITMAP)::GetClipboardData(CF_DIB); // 存在確認済み
GlobalLock(hBitmap);
const BITMAPINFOHEADER* pbmih = (BITMAPINFOHEADER*)hBitmap; // pbmih->biSizeImageの値が欲しいだけ
bmfh.bfSize = bmfh.bfOffBits + pbmih->biSizeImage;
/* (const void*)bmfh と (const void*)hBitmap をファイルに書込む、あるいは別の領域にコピー */
::GlobalUnlock(hBitmap);
::CloseClipboard();


110 名前:デフォルトの名無しさん :2005/08/05(金) 01:31:58
>>85
GetGUIThreadInfo

111 名前:デフォルトの名無しさん :2005/08/05(金) 09:32:47
アプリケーションの終了方法としては下記のプログラムは正しいでしょうか。
実際に正常に終了している様には見えますが 自信が持てません。^^;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow) {
  (省略)
HWND hwnd;
hwnd = CreateWindow ("Window 1", ・・・);
  (省略)
hyouji1 ((hwnd1);
return 0;
}

void hyouji1 (HWND hwnd1){
MSG msg;
  (省略)
  while(TRUE){
    if (PeekMessage(&msg, NULL, WM_MOUSEFIRST, WM_MOUSELAST, PM_NOREMOVE)){
    if (GetMessage(&msg, NULL, 0, 0) == 0) break;
     TranslateMessage(&msg);DispatchMessage(&msg);
    }
    else
    {
    (省略)  //左クリックが押されない限り 計算を続ける
    }
   }
}

LRESULT CALLBACK WndProc (HWND hwndBlack, UINT msg, WPARAM wp, LPARAM lp) {
switch (msg) {
case WM_LBUTTONDOWN: PostQuitMessage (0); return 0; //アプリ終了
return DefWindowProc (hwnd1, msg, wp, lp);
}

112 名前:デフォルトの名無しさん :2005/08/05(金) 09:43:18
そもそもそんな作り方をするのはおかしい。
それじゃウインドウがまったく反応せず、クリックしたら終了という、
何のためのGUIなんだかわからんプログラムになるんじゃないか?

それでいいなら、別にGUIにしなくたっていいじゃん。

GetMessageの戻り値の処理がそれだと多少まずい場合があるけど
それ以前に変だから。考え方が。

113 名前:デフォルトの名無しさん :2005/08/05(金) 10:06:32
>>111
PostQuitMessage()は普通WM_DESTROYが来たときに呼ぶ。
アプリケーションを終了させたいところではWM_CLOSEをPost/Sendする。

WM_CLOSEはウィンドウの×を押したときにも送られ、DefWindowProcへ送るとDestoyWindow()が呼ばれる。
そしてDestoyWindow()がWM_DESTROYを送る。

あとメッセージはPeekMessageしたあとGetMessageをしなくてもPeekMessageで全部受ければいいだろ。
MSG msg;
while (TRUE) {
    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
        if (msg.message == WM_QUIT)
            break;
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    } else {
        (省略)  //左クリックが押されない限り 計算を続ける
    }
}


114 名前:111 :2005/08/05(金) 11:21:12
>>112-113
ありがとうございます。
説明が足らない部分があったので補足すると、ウインドウは
hwnd = CreateWindow ("Window 1", NULL, WS_POPUP, 0, 0, 500, 300,NULL, NULL, hInstance, NULL);
という内容で、×マーク等の無いクライアント領域のみのウインドウです。
それで「クリックで終了」ということを考えました。

クリック後ウィンドウを閉じる処理をしてからWM_DESTROYを送るように変更してみます。
ホントにありがとうございました。

当たり前のように指摘されると あまりの自分の知識のなさに泣けてきます・・・・ うわ〜〜ん
でもがんばります^^

115 名前:デフォルトの名無しさん :2005/08/05(金) 11:34:24
>>114
WM_DESTORYはDestroyWindow()を呼んだ結果として起こるものであって、自分で送るものではない。

116 名前:デフォルトの名無しさん :2005/08/05(金) 11:54:18
ウインドウスタイルについて質問なのですが、
タイトル部、ウインドウの枠も無いウインドウを作る事は可能でしょうか、
CreateWindowExのウインドウスタイルを見るかがり目的の設定が無いと思うのですが、
ほかに方法はありますでしょうか、
以上です、よろしくお願いします。


117 名前:デフォルトの名無しさん :2005/08/05(金) 12:05:30
>>116
WS_CAPTIONを使うな。

118 名前:デフォルトの名無しさん :2005/08/05(金) 12:23:00
>>116
WS_POPUPかリュージョン使えばおk

119 名前:デフォルトの名無しさん :2005/08/05(金) 14:59:12
>>118
デキィタァー!
感謝です。

>WS_POPUPかリュージョン使えばおk
WS_POPUPの指定で目的は果たせて解決出来ました。ありがとうございます。
ところで「リュージョン」っていうのは何でしょうか、出来ましたら参考に教えていただけませんでしょうか。
よろしくお願いします。


120 名前:デフォルトの名無しさん :2005/08/05(金) 15:03:31
regionの間違いかと。

121 名前:デフォルトの名無しさん :2005/08/05(金) 15:03:59
illusionの間違いかと

122 名前:デフォルトの名無しさん :2005/08/05(金) 15:34:44
イリュージョンといえばおっぱいスライダー

123 名前:デフォルトの名無しさん :2005/08/05(金) 15:43:47
>>119
リージョンの間違え(´・ω・`)
Windowを好きな形に切り取るといったら判りやすいかも
http://www.kumei.ne.jp/c_lang/sdk4/sdk_338.htm
この辺を参考に
ペルソナウェアとかデスクトップアクセサリとかによく使われてるもの

124 名前:デフォルトの名無しさん :2005/08/05(金) 17:58:06
>>110
おっ!
たまに挙動がおかしいですがこれなら実用性に問題はなさそうです。
ありがとうございました。

125 名前:デフォルトの名無しさん :2005/08/05(金) 19:13:57
リージョンは古い。今なら、Layered Window。
ただし、まだ9X系列をサポートするつもりなら使えないけど。

126 名前:デフォルトの名無しさん :2005/08/05(金) 19:16:17
9xではリージョンを使ってWin2k以上ならLayered Windowという実装はアリでしょう

127 名前:デフォルトの名無しさん :2005/08/05(金) 19:43:54
こんばんは、よろしくお願いします。
ツールバーを非表示にしたいのですが、
HWND h = CreateToolbarEx(..)
で作ったツールバーを非表示にしたいと思うのですが、
SendMessage(h,・・・・・
書き方が分かりません。おしえてください。

128 名前:デフォルトの名無しさん :2005/08/05(金) 19:50:29
ShowWindow

129 名前:デフォルトの名無しさん :2005/08/05(金) 20:06:48
ウインドウに表示されたActiveX(Flash.ocx)のボタンの上にマウスカーソルが来た事を判断させたいのですが、
取り合えずDefWindowProcでやってみたのですが、ActiveXのボタンかどうかの判断は出来ませんでした。
何方か、解決方法ご存じありませんでしょうか。
よろしくお願いします。


130 名前:デフォルトの名無しさん :2005/08/05(金) 20:16:00
>>127です
>>128さんありがとうございます。
ShowWindowでできました。

131 名前:デフォルトの名無しさん :2005/08/05(金) 20:25:45
SetLayeredWindowAttributes で LWA_COLORKEY を指定したときに、
効果があったりなかったりして困っています
透明色の値は黒とは限らず例えば ChooseColor でユーザに選択させた値などです
LWA_ALPHA と混用していて、「効果がなかった」ときも微妙に色が変わったように見えます
どなたか、お心当たりがあれば教えてください

環境は Windows2000, VC6, cygwin g++ です
SDK は最新版です

132 名前:デフォルトの名無しさん :2005/08/06(土) 00:47:02
>>129
ActiveX側でWM_MOUSEOVER

133 名前:デフォルトの名無しさん :2005/08/06(土) 02:13:54
Flash.ocx側のWM_MOUSEOVERを勝手にキャッチできるの?

134 名前:デフォルトの名無しさん :2005/08/06(土) 02:41:31
un


135 名前:前スレ813 :2005/08/06(土) 05:59:24
皆さん、ありがとうございます。
>>前スレ816
Win98なのですが、音は出ないみたいです。サウンドカードからも出ません。system()はcommand.com呼び出しですよね?
system("\a")だと、そういうコマンドがないので、「コマンドまたはファイル名が違います」となりますね・・・
NT系はsystem()でcmd.exeとかが呼び出されるのですか?

>>前スレ822
すみません、Win98です。WIN32.HLPにはNT系のところにサウンドカードのことが書かれてなかったのでわかりませんでした・・・

136 名前:デフォルトの名無しさん :2005/08/06(土) 07:39:08
> system("\a")
printf("\a") だろ

137 名前:前スレ816 :2005/08/06(土) 08:09:46
>>135
Win2000 だと出る。
system("echo \a"); でどうだろか。これも Win2000 だと出る。

>>136
Winアプリだとそれじゃあ出ない。(少なくとも Win2000 では)

138 名前:デフォルトの名無しさん :2005/08/06(土) 08:24:04
まぁ確かに、標準出力が実際にはどこにも出力されないWinアプリじゃ>136じゃ鳴るわけないなぁ。
さて、command.comのechoはbellを処理できただろうか。

139 名前:デフォルトの名無しさん :2005/08/06(土) 08:43:00
リストボックスなどに標準装備されているスクロールバーの
ハンドルを取得するにはどうすれば良いのでしょうか

140 名前:デフォルトの名無しさん :2005/08/06(土) 08:51:16
VC++で64bitの定数はどのように記述すればいいのでしょうか?


141 名前:140 :2005/08/06(土) 08:53:08
出来れば10進と16進の両方の記述を教えてください。

142 名前:デフォルトの名無しさん :2005/08/06(土) 08:55:24
普通に書けばいい

143 名前:デフォルトの名無しさん :2005/08/06(土) 08:58:06
たとえばこういうふうに。接尾辞はたぶんなくても平気だろう。(必要ならi64)
const long long FOO = 9223372036854775807;
const unsigned long long BAR = 0xffffffffffffffff;
VC6までならlong longはないから<windows.h>のLONGLONGとULONGLONGとかで。

144 名前:140 :2005/08/06(土) 09:06:17
const UINT64HOGE=0xffffffffffffffff;
で、HOGE=0xffffffffに丸められてしまいます。
プロジェクトのプロパティの何かを変える必要があるのでしょうか?
私の環境はVS.Net2002です。お願いします。

145 名前:140 :2005/08/06(土) 09:12:11
const UINT64 HOGE = 0xffffffffffffffffI64;
でも駄目でした。アカデミックパックだと出来ないのでしょうかねぇ。

146 名前:デフォルトの名無しさん :2005/08/06(土) 09:13:42
>>140
定数の書き方は limit.h を読んでみるといい
変数は __int64 型

147 名前:デフォルトの名無しさん :2005/08/06(土) 09:14:14
もとい limits.h

148 名前:デフォルトの名無しさん :2005/08/06(土) 09:18:42
>>144
符号なしだから0xffffffffffffffffui64じゃないか?

149 名前:デフォルトの名無しさん :2005/08/06(土) 09:30:55
>>144
「丸められて」をどう確認した?
出力に使った手段が32bit型しかサポートしていない可能性も‥‥
(BCBのiostreamとか)

150 名前:デフォルトの名無しさん :2005/08/06(土) 09:42:39
printfの指定を64ビットにしてないんだろ。

printf("%I64d\n", HOGE);
または
printf("%I64x\n", HOGE);

151 名前:140 :2005/08/06(土) 09:55:08
やっぱりどうも出来ないので、上位と下位に分けて
ビットシフトとビットオアで間に合わせました。有難うございました。
const UINT64 HOGE_U =0x12345678;
const UINT64 HOGE_L =0x87654321;
UINT64 HOGE;
HOGE=HOGE_U<<32|HOGE_L;

152 名前:デフォルトの名無しさん :2005/08/06(土) 10:04:41
>>151
出来ないって何が?
その方法で何が出来るようになったんだ?
例えば 150 の指摘があたっていたら
それでもまだ失敗するはずだぞ

153 名前:デフォルトの名無しさん :2005/08/06(土) 10:05:17
ちなみに __int64 に対してはオーバーロード解決がサポートされないんだったよな

154 名前:デフォルトの名無しさん :2005/08/06(土) 10:10:05
>>151
それだったら0x12345678 << 32 | 0x87654321でもできそうな気がするが。

155 名前:デフォルトの名無しさん :2005/08/06(土) 11:33:50
#include <windows.h>
#include <iostream>

using namespace std ;

int main()
{
const UINT64 HOGE = 0xffffffffffffffff ;
printf("%I64u\n", HOGE) ;
printf("%I64x\n", HOGE) ;
cout << HOGE << endl ;
}

接尾辞もキャストも無しでちゃんと出るけどなぁ。
BCC5.6.4、vctk2003 で。

156 名前:デフォルトの名無しさん :2005/08/06(土) 16:07:56
const __int64 HOGE = 0xffffffffffffffffi64 ;


ヒント:mmintrin.h

157 名前:デフォルトの名無しさん :2005/08/06(土) 16:52:24
ちゃんと64ビット定数として書けばいい。

それがどーしても嫌というのなら、LARGE_INTEGER構造体・共用体を使う。

158 名前:デフォルトの名無しさん :2005/08/06(土) 18:22:53
単にVC++7.0の仕様かバグだったら笑える

159 名前:デフォルトの名無しさん :2005/08/06(土) 21:06:35
匿名パイプで子プロセスが書き込みを受け付けてない時に書き込み側へWriteFileするとスレッドが停止してしまうのですが、それを防ぐ方法はありますか?

160 名前:デフォルトの名無しさん :2005/08/06(土) 21:08:05
WriteFileの最後の引数つかうとか

161 名前:デフォルトの名無しさん :2005/08/06(土) 21:11:15
更に書き込み用のスレッド起こしてWaitForSingleObjectとか(アホげ

162 名前:デフォルトの名無しさん :2005/08/06(土) 21:14:30
以下のプログラム
const wchar_t* p = L"abcあいう";
::MessageBox( NULL, p, L"", MB_OK);
printf("error:%s\n", p);
printf("error:%S\n", p);
wprintf(L"error:%s\n", p);
wprintf(L"error:%S\n", p);
を実行すると
error:a
error:abc
error:abcerror:a
と化けます。(ダイアログには出る)
コンソールに正しく出すのはどうすればよろしい?


163 名前:159 :2005/08/06(土) 21:30:12
>>160
パイプでWriteFileの最後の引数使うとWindows98ではエラーになるんですが・・・。


164 名前:デフォルトの名無しさん :2005/08/06(土) 21:51:07
>>162
#include <locale.h>
setlocale(LC_ALL, "");

165 名前:デフォルトの名無しさん :2005/08/06(土) 21:59:22
Win98では対処のしようがない。
ソケット使うとか、別にイベントを用意して手動でたてたりおろしたりするとか。

166 名前:デフォルトの名無しさん :2005/08/06(土) 22:02:49
子プロセスの状態の判別がわからないんなら
普通に書き込み専用のサブスレッド立ててタイムアウト指定が一番簡単だと思うけど

167 名前:162 :2005/08/06(土) 22:07:19
>>164
ちゃんと出力されました。ありがとう。

168 名前:デフォルトの名無しさん :2005/08/06(土) 22:08:00
パイプ相手にタイムアウト指定ってどうすればできるの?

169 名前:デフォルトの名無しさん :2005/08/06(土) 22:11:03
>>163
なんのエラー?

170 名前:デフォルトの名無しさん :2005/08/06(土) 22:14:49
パイプじゃなくて、パイプへの書き込み用に起こしたスレッドにタイムアウト指定するの。
正確には、呼び出し側でWaitFor〜でタイムアウト時間指定して待機し、帰ってこなかったら
TerminateThreadとか。

171 名前:デフォルトの名無しさん :2005/08/06(土) 22:26:57
ms-help://MS.MSDNQTR.2003FEB.1041/fileio/base/writefile.htm
>Windows Me/98/95: For operations on files, disks, pipes, or mailslots,
>this parameter must be NULL; a pointer to an OVERLAPPED structure causes
>the call to fail. However, the function supports overlapped I/O on serial and parallel ports.

172 名前:デフォルトの名無しさん :2005/08/06(土) 22:38:18
>>171
ちゃんと日本語ヘルプにも載ってたわ。すまん。
Windows 95/98:非同期の書き込み操作を行う場合、FILE_FLAG_OVERLAPPED フラグを指定し CreateFile 関数を呼び出して開いた通信リソース、または socket と accept どちらかの関数が返したソケットのハンドルを指定します。
メールスロット、名前付きパイプ、ディスクファイルに対する非同期書き込み操作はサポートしていません。



173 名前:デフォルトの名無しさん :2005/08/07(日) 01:49:24
shell32.dllに入ってるファイルコピーとかのAVIリソースを使いたいんだけど、
どのようなAPIを使って取り出し、再生をすればいいのでしょうか。

174 名前:159 :2005/08/07(日) 04:38:16
>>165-170
素直に名前ありのパイプを使用します。
ありがとうございました。

175 名前:139 :2005/08/07(日) 08:40:41
|∀・)

176 名前:デフォルトの名無しさん :2005/08/07(日) 08:42:07
>>175
(・∀・)カエレ!!

177 名前:139 :2005/08/07(日) 08:47:26
   ∧∧
   /⌒ヽ)
  i三 ∪
 ○三 |
  (/~∪
  三三
 三三
三三三

178 名前: ◆Pu/ODYSSEY :2005/08/07(日) 09:10:11
WM_HSCROLL/WM_VSCROLLメッセージ拾ったときに各スクロールバーのハンドルが拾えるけど、それで大抵間に合うんでないの?

179 名前:デフォルトの名無しさん :2005/08/07(日) 09:15:33
>>173
うろお・ぉえだけど。
LoadLibrary
FindResource
LoadResource
LockResource
あたりでリソース読む。
再生はよくわからん。
普通にアニメーションコントロールを作りゃいいんじゃないの?
CreateWindowとかして。

180 名前:139 :2005/08/07(日) 10:35:30
>>178
ありがとうございます。
スクロールバーがでるくらいリスト項目が十分にあれば
強制的にWM_VSCROLLを出させて、ハンドルを拾えました。

目的を書けばよかった。
リストボックス付随スクロールバーの外見を、
Webブラウザでスタイルを変更したときのスクロールバーの様に見せたかったんです。

181 名前:デフォルトの名無しさん :2005/08/07(日) 14:24:46
>>173
自分( 自作の.exeや.dll )で持っているリソースとまったく同じやり方でおk。
取得先が shell32.dll なだけ。

182 名前:デフォルトの名無しさん :2005/08/07(日) 17:47:08
こんにちは、質問です。
ディレクトリーが存在するかどうかを調べようと思い、
Directory.exists("mm\\");
とかきこみましたが、
Directory定義されていない識別子
と出ます。#include <io.h>
しています。
使い方を教えてください。


183 名前:デフォルトの名無しさん :2005/08/07(日) 17:51:54
>>182
何語だそれは。

184 名前: ◆Pu/ODYSSEY :2005/08/07(日) 17:54:31
>>182
あーたそれCとC#がごっちゃになってまへん?

Win32APIならPathIsDirectoryっていう、そのまんまなAPI関数がありますわ。
#include <io.h>も不要。 むしろwindows.hのほうが必要。

185 名前:デフォルトの名無しさん :2005/08/07(日) 18:13:02
>>184さんありがとうございます。
PathIsDirectoryでできました。
でも、#include <shlwapi.h>やリンカの設定も必要でした?

186 名前:デフォルトの名無しさん :2005/08/07(日) 18:30:44
>>185
それでいいんだよ。

187 名前:デフォルトの名無しさん :2005/08/07(日) 19:04:41
>>186ありがとうございました


188 名前:173 :2005/08/07(日) 22:05:53
>>179
ありがとうございます。そのへん調べてみます。

>>181
アイコンはExtractIcon(だったかな?)でやったことあるんだけど、
AVIは扱ったことないもんで。
BCB6使ってるんだけど、TAnimateコンポーネントはあまり
自由なことができなさそうなので、APIを使う方法を調べておこうかと
思いまして。

189 名前:デフォルトの名無しさん :2005/08/07(日) 22:27:58
>>188
確か、こんな感じでいけるよ。
HMODULE shell32.dllのモジュールハンドル = LoadLibrary("shell32.dll");
Animate_OpenEx(アニメーションコントロールのウィンドウハンドル, shell32.dllのモジュールハンドル, MAKEINTRESOURCE(shell32.dll内のリソースID));
Animate_Play(アニメーションコントロールのウィンドウハンドル, 0, -1, -1);

190 名前:デフォルトの名無しさん :2005/08/07(日) 23:07:59
SaveFileNameを使用したら、いきなり例外が発生して強制終了したので
tryブロックで囲んで例外をキャッチしようとしたら例外が発生しなくなった。(正常に動く)
で、またtryブロックを外したら例外が発生する・・・なぜ???
今までこんなことなかったのに不思議だ・・・
OpenFileNameではそんな現象は見られませんでした。
そんな経験ある方いますか?
ちなみにVC++.netです。

191 名前:デフォルトの名無しさん :2005/08/07(日) 23:13:54
catch(...)はアクセス違反等の構造化例外もキャッチしちゃうよ。

192 名前:190 :2005/08/07(日) 23:20:02
>>191
キャッチしてくれるんならいいんだけど、
例外自体が発生しなくなってcatch(...)ブロックにも入らなくなったんで
おかしいなぁ〜・・・と。
とりあえず正常に動きはするみたいだけど、原因がわからないと
イマイチ気持ち悪くて・・・

193 名前:デフォルトの名無しさん :2005/08/07(日) 23:29:30
というか、SaveFileName を実行中に例外が発生したのか、
それとも別のところで発生したかは判明してんの?
SaveFileName は内部で SetErrorMode 使ってたりするから
(外から見て)例外は発生しにくいぞ。

194 名前:173 :2005/08/08(月) 00:43:01
>>189
すみません、何語の話でしょう?(^^; BCB6のTAnimateクラスに
OpenExなんてメソッドはないっす。
TAnimateクラスのソースを眺めてみたんですが、まあ最終的には
そんな感じにはなってましたけど。
ACM_OPENとかのメッセージを使うらしいことはわかってきました。
とりあえず当面はサポートされてるアニメーションで間に合わせとくかな。

195 名前:デフォルトの名無しさん :2005/08/08(月) 00:48:27
>>194
Animate_OpenEx は WIN32API 。
TAnimateのクラスからウィンドウハンドルを取得すればそのまま使えると思うけど。
ただし、TAnimate がアニメーションコントロールのラッパーじゃない場合はうまく機能しない。

196 名前:173 :2005/08/08(月) 01:29:59
>>195
なっっ!そうでしたか。
Platform SDKのヘルプで調べたら確かにありました。m(_ _)m
情報感謝です。

197 名前:デフォルトの名無しさん :2005/08/08(月) 04:32:41
リストビュー、あるいはリストビューを子に持つウインドウに対して、
拡張スタイルにWS_EX_COMPOSITEDを指定してやると、
WM_PAINTが発生しまくるわ、WM_NOTIFY(リストビューのNM_CASTUMDRAW)が飛んできまくるわで、
リストビューは表示されないし、
WM_PAINTが飛びすぎなので、当然レスポンスは著しく下がるし、CPU使用率が100%になるしと、

まともじゃない挙動になるのですが、
誰か詳しく分かりませんか?


198 名前:190 :2005/08/08(月) 05:44:54
>>193
その関数しか呼び出してない部分で発生してるので
間違いないと思います。
う〜ん、もう少し調べてみるか。
失礼しますた。

199 名前:デフォルトの名無しさん :2005/08/08(月) 07:07:18
単にスタックぶっ壊してるんじゃないのか?
例外関係はスタック食うから、それで隠れてるだけって可能性も。

200 名前:97 :2005/08/08(月) 23:26:06
とか言ってたらCreateSymbolicLinkのリファレンスキター

201 名前:デフォルトの名無しさん :2005/08/09(火) 03:00:14
>>197
当然OSはWindowsXPで、CS_OWNDCかCS_CLASSDCを指定しているんだろうな?

202 名前:デフォルトの名無しさん :2005/08/09(火) 03:52:29
ディレクトリの作成日時や更新日時を変更する方法を教えてください。

203 名前:デフォルトの名無しさん :2005/08/09(火) 05:04:28
ディレクトリの更新日時は、ちょっとしたことで変わります。
諦めたほうがいいかと。

SetFileTimeしてみた?

204 名前:197 :2005/08/09(火) 06:14:13
>>201
MSDNだと、指定してはいけないことになっています。
今試してみたら、ウインドウが表示されなくなりますね。

いろいろ試してみたけど、やはり自前でダブルバッファ処理をしたほうがましですね。
Vistaに期待しようかな。

205 名前:デフォルトの名無しさん :2005/08/09(火) 06:32:42
>>202
http://homepage3.nifty.com/k-takata/mysoft/touch.html

206 名前:デフォルトの名無しさん :2005/08/09(火) 08:31:17
ありがとー。
これで書庫のディレクトリの日時の復元が出来そうです


207 名前:デフォルトの名無しさん :2005/08/09(火) 20:31:42
C++スレで書き込んだら、APIスレで書き込んでくれと言われたのでやってきました。
どなたか、教えてください

自分で作ったアプリケーションをノンアクティブ状態でジョイパッドを使用できる状態にしたいのですが、どうすれば
よろしいでしょうか?ダイレクトインプットを使えば簡単なのですが、どうも難しすぎて私の手には負えません。
それ以外で方法はないでしょうか?

もう一つ質問があるのですが、自分で作ったアプリケーション以外で新規に起動したアプリのウィンドウハンドルを
取得したいのですが、どうすればいいのですか?

一度に二つも質問してすみません


208 名前:129 :2005/08/09(火) 20:44:17
レスポンス遅れてすいません。
129で次の質問したものです。

>ウインドウに表示されたActiveX(Flash.ocx)のボタンの上にマウスカーソルが来た事を判断させたいのですが、
>取り合えずDefWindowProcでやってみたのですが、ActiveXのボタンかどうかの判断は出来ませんでした。
>何方か、解決方法ご存じありませんでしょうか。
>よろしくお願いします。

>132
>ActiveX側でWM_MOUSEOVER

レスありがとうございます。
自分は、CAxWindowを使ってFlash.ocxを呼んでるんですが、
とりあえずこのウインドウに流れてるメッセージを片っ端から表示してみたんですが、
WM_MOUSEOVERを含め、それらしい(あやしそうな)メッセージはどうも来ないようなんです。
もしかして全然間違ってますか?
出来ましたら、もう少し具体的に教え頂けると助かります。
以上です、引き続きよろしくお願いします。


209 名前:デフォルトの名無しさん :2005/08/09(火) 20:49:36
LWA_COLORKEY | LWA_ALPHA って、機種依存つおい?

210 名前:デフォルトの名無しさん :2005/08/09(火) 20:55:08
>>207
両方フックでいけそうな予感

>>209
機種依存よりOS依存だろ

211 名前:デフォルトの名無しさん :2005/08/09(火) 20:58:10
>>210
NT系 2000 以後限定でも?

212 名前:デフォルトの名無しさん :2005/08/09(火) 20:59:03
よーするに、GetDeviceCaps で問い合わせるような性質の問題があるかってことなんだけどさ・・・・

213 名前:デフォルトの名無しさん :2005/08/09(火) 21:06:25
あまり使われてない機能はデバイスドライバの実装が手抜きな可能性がある罠
さすがにGDIではあまりないけどDirectXだとゴロゴロ

214 名前:デフォルトの名無しさん :2005/08/09(火) 21:34:41
>>210
返事ありがとうございます。フックを使って具体的にどうすればいいのか
教えて頂ければうれしいです。

215 名前:デフォルトの名無しさん :2005/08/09(火) 22:08:01
>>214
やりたいことと同じことをやっている、
オープンソースのソフトのソースコードを見れ。

216 名前:デフォルトの名無しさん :2005/08/09(火) 22:12:56
 

217 名前:デフォルトの名無しさん :2005/08/09(火) 22:13:04
>>208
そのFlash.ocxは自分で作ったActiveXコントロール?
いまいち作りが不明なんだけど。
どういう風にやったのか詳細を。
つか、スレ違いっぽいのでMFCスレのがいいかも試練。

218 名前:デフォルトの名無しさん :2005/08/09(火) 22:16:38
質問です。
特定のウィンドウのみををクリップボードにコピーする方法を教えてください

219 名前:デフォルトの名無しさん :2005/08/09(火) 22:19:13
>>217
名前から考えるに自作じゃなくてMacromedia(現Adobe)のFlash Playerのコントロール
だから>>133みたいに聞いたんだが

220 名前:デフォルトの名無しさん :2005/08/09(火) 22:23:16
あぁ、そうか。
じゃ、ActiveX側がそのイベント発行して無いと無理だな。

221 名前:デフォルトの名無しさん :2005/08/10(水) 02:02:28
>>218
ウィンドウをクリップボードにコピーすることなど出来ない。

222 名前: ◆Pu/ODYSSEY :2005/08/10(水) 02:09:17
ALT+PrintScreen
とボケてみる

223 名前:デフォルトの名無しさん :2005/08/10(水) 06:44:17
PrintWindowとSetClipboardDataでなんとか

224 名前:129、208 :2005/08/10(水) 10:21:37
217さん、219さん、220さん
レスありがとうございます。
説明不足ですいません、219さんのおっしゃる通りです。

>220
>あぁ、そうか。
>じゃ、ActiveX側がそのイベント発行して無いと無理だな。
importした時に吐き出されるFlash.tlhを見るとイベントでは、次の三つが用意されているんですが、
OnReadyStateChange、OnProgress、FSCommand
それぞれ捕まえて挙動を見てみたんですがどれもダメでした。
ん〜、無理なんですかねぇ〜。


225 名前:デフォルトの名無しさん :2005/08/10(水) 11:54:52
>>224
メッセージフックで良いと思う。
SetWindowsHookExとかその類をキーワードにして
SDK見たり検索したりしてみてごらん。

226 名前:デフォルトの名無しさん :2005/08/10(水) 15:19:26
馬鹿だな、InsideWindows見ればいいのに・・・

227 名前:デフォルトの名無しさん :2005/08/10(水) 16:53:33
質問なのですが、現在ひとつのウィンドウにレバーコントロールつけている状況です。
そこでレバーコントロールの右下にスクロールバーを出して、レバーコントロール以下の
文字列をスクロールさせたいと思っているのですが、どうしてもスクロールバーが
レバーコントロールの部分まで重なってしまいます。スクロールバーを初期位置に出す
WS_OVERLAPPEDWINDOW | WS_VSCROLLではなく、
スクロールバーの初期位置を任意の座標に出すにはどうすればいいのでしょうか?
開発環境は、VC++、SDKです。よろしくお願いします。

228 名前:デフォルトの名無しさん :2005/08/10(水) 16:55:48
MFCだろ、WINAPIはZオーダーしか気にしてないよ、場違い

229 名前:デフォルトの名無しさん :2005/08/10(水) 17:01:03
228は気違い

230 名前:デフォルトの名無しさん :2005/08/10(水) 18:55:04
>>227
子ウィンドウとしてスクロールバーコントロールを配置するか、
レバーを除外した部分を子ウィンドウにして、
そっちのスクロールバーを使うか。

231 名前:デフォルトの名無しさん :2005/08/10(水) 19:36:29
>>230
返事ありがとうございます。
子ウィンドウとしてスクロールバーを作る方法でいこうと思います。
これで解決しそうです。でも、ウィンドウサイズを可変するとちらつくのが気になるところ・・。

232 名前:デフォルトの名無しさん :2005/08/10(水) 20:12:04
>>231
スクロールバーを、モードレスダイアログボックスに配置しては?

233 名前:デフォルトの名無しさん :2005/08/10(水) 23:11:27
どうでもいいけどクメイの間違いだからレバーと言うのやめれ

234 名前:デフォルトの名無しさん :2005/08/10(水) 23:21:25
>>231
親ウインドウの背景を再描画しないようにすれば解決する…はず。

235 名前:デフォルトの名無しさん :2005/08/11(木) 07:55:48
CriticalSectionで同期をとる場合、
既にロックされているかどうかを
処理を止めずに知るにはどうすれば良いのでしょうか?

236 名前:デフォルトの名無しさん :2005/08/11(木) 08:21:19
>>235
TryEnterCriticalSection

MSDNよめばEnterCriticalSectionからリンク貼られているぞ。

237 名前:デフォルトの名無しさん :2005/08/11(木) 08:30:00
すみません、説明不足でした。
既にロックされているかどうかを、処理を止めずに、かつロックせずに知りたいのです。

238 名前:デフォルトの名無しさん :2005/08/11(木) 08:33:33
>>237
むり。
クリティカルセクションでやりたければ、
TryEnter〜で確かめて、自分がクリティカルセクションつかんだら、
すぐにLeave〜するぐらいなもの。

239 名前:デフォルトの名無しさん :2005/08/11(木) 08:39:39
そうですか…。Try&Leaveだとコストが高いですね。
Mutexの方を検討してみます。ありがとうございました。

240 名前:デフォルトの名無しさん :2005/08/11(木) 08:47:53
似たようなもんですが

241 名前:デフォルトの名無しさん :2005/08/11(木) 08:48:06
ミューテックスだと遅いがな……。

242 名前:デフォルトの名無しさん :2005/08/11(木) 09:51:50
>>233
レバーってrebar controlのことか!


243 名前:デフォルトの名無しさん :2005/08/11(木) 11:53:40
手動リセットイベント使った方がよくね?

244 名前:デフォルトの名無しさん :2005/08/11(木) 12:14:58
>>237
>既にロックされているかどうかを、処理を止めずに、かつロックせずに知りたいのです。

それってあまり役に立たないAPIだと思う。
APIから戻ってきて次のコードを実行するときには
もうロックの状態が変更されてるかも知れないわけだし

245 名前:デフォルトの名無しさん :2005/08/11(木) 12:47:22
こんにちは、

プリプロセッサによる条件文を記述しようとしているのですが、
Windows環境でのビルドだと、指定したインクルード(#include "MyWinApp.h")がされるようにしたいのです。
プリプロセッサに何をしていすればいいのでしょーか?

よろしくお願いします。

#ifdef ?
#include "MyWinApp.h"
#else
#include "MyApp.h"
#endif

246 名前:デフォルトの名無しさん :2005/08/11(木) 12:54:15
>>245
どのコンパイラか言わないのに答えられるわけがない。
というか普通そういうコンパイラ依存の特殊なのは、コンパイラ付属のヘルプに書いてあるもんだが。

247 名前:デフォルトの名無しさん :2005/08/11(木) 13:00:22
>>246
失礼しました。
開発環境はVCです。

248 名前:デフォルトの名無しさん :2005/08/11(木) 13:13:19
好きなの選べ。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_predir_preprocessor_directives.asp

_WIN32とか_MSC_VERあたりかな。

249 名前:デフォルトの名無しさん :2005/08/11(木) 13:13:56
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_predir_predefined_macros.asp
ちがった、こっちな。

250 名前:デフォルトの名無しさん :2005/08/11(木) 13:14:03
>>245
マルチすなや。移動するなら断ってからに汁。
つーか、どうしてWin32APIの問題だと思ったんだ? 更にスレ違いだがね。

>>246
スレ違いなんだからぬるーしる。


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