5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Win32API質問箱 Build23

1 :デフォルトの名無しさん:04/09/19 04:11:44
- 過去スレ
Build22:http://pc5.2ch.net/test/read.cgi/tech/1092524669/
Build21:http://pc5.2ch.net/test/read.cgi/tech/1090422324/
Build20:http://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:http://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:http://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:http://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:http://pc2.2ch.net/test/read.cgi/tech/1073830065/
Build15:http://pc2.2ch.net/test/read.cgi/tech/1069339866/
Build14:http://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:http://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:http://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:http://pc.2ch.net/tech/kako/991/991576947.html
(★は「いやー ごめんなさい。」に巻き込まれた模様

2 :デフォルトの名無しさん:04/09/19 04:13:01
- MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com/

Win32 API入門
http://black.sakura.ne.jp/~third/system/winapi/win.html
WIN32 Programming
http://www7.plala.or.jp/keny01/win32/
Win32 SDK Programming
hhttp://www7.plala.or.jp/keny01/windows/win32/

3 :デフォルトの名無しさん:04/09/19 04:13:07
(´゚Д゚`)

4 :デフォルトの名無しさん:04/09/19 04:13:17
2げっとー
はじめてやった わーい


5 :デフォルトの名無しさん:04/09/19 04:15:14
がーん

6 :デフォルトの名無しさん:04/09/19 04:32:56
> WIN32 Programming
> http://www7.plala.or.jp/keny01/win32/
これリンク切れてるよ

7 :デフォルトの名無しさん:04/09/19 05:08:45
>>6
修正忘れてた。
http://www7.plala.or.jp/keny01/windows/win32/

8 :ほんたま:04/09/19 08:43:47
おみゃ〜らよ、WideCharToMultiByteを使って、unicodeをsift-jisに変換すると、漢字はちゃんと変換されるのに、半角英数は文字化けするのよ。
unicodeが「4F 00 4B 00 27 59 0B 4E B9 5B 50 5B」の場合、これは「OK大下容子」の意味だ。
これをchar型の文字列pctextに取得して、この時点でpctextの内容をMessagBoxで表示してみると「ok'Y・Nケ[P[」だ。
これをWideCharToMultiByteを使って変換し、変換した文字列temptextを表示してみると「?大下容子」になっているんだ。
おみゃ〜らよ、なぜOKはちゃんとならないのかな?
これ、教えれ、ばかおみゃ〜ら、こら!!!!!!!


9 :デフォルトの名無しさん:04/09/19 08:45:27
>>8
氏ね

10 :ほんたま:04/09/19 08:55:34
>>9
こら、教えれ、ばかこら!!!!

11 :デフォルトの名無しさん:04/09/19 09:56:58
一応はっとく

Build15:ttp://saba.haiiro.info/uploader/file/0587.html
Build16:ttp://saba.haiiro.info/uploader/file/0588.html


12 :デフォルトの名無しさん:04/09/19 10:37:25
>>1
おつ。

>>11
いただきます。

13 :デフォルトの名無しさん:04/09/19 12:19:18
お前ら、よく聞け。

アプリを常にタスクバーの前面に置くために、
タスクバーを親に指定してウィンドウを表示しているヤシいると思う。
XPSP2適用後だと、その前面表示アプリのせいで、
スタートボタンから展開されるはずのポップアップ形式のメニューなどが、
不意に閉じてしまう現象が起こるようになった。

XPSP2では、親をタスクバーにしているアプリは要注意だ。

14 :デフォルトの名無しさん:04/09/19 12:39:16
親をタスクバーにする理由を教えて欲しい
HTND_MOSTTOPだっけ?
そんな感じの指定すりゃいいのに

15 :デフォルトの名無しさん:04/09/19 12:56:21
dj

16 :デフォルトの名無しさん:04/09/19 13:06:08
>>14
> アプリを常にタスクバーの前面に置くために

17 :デフォルトの名無しさん:04/09/19 13:34:41
>>1
<< "乙";

18 :デフォルトの名無しさん:04/09/19 13:43:26
HWND_MOSTTOPじゃならないんだ

19 :デフォルトの名無しさん:04/09/19 13:46:06
d$

20 :デフォルトの名無しさん:04/09/19 15:30:20
ListViewむかつく。
なんで、カラムを追加するときはindexを指定するのに
アイテムを追加するときはデータの中にindexが含まれてるんだ?

21 :デフォルトの名無しさん:04/09/19 15:47:41
はぁ?

22 :デフォルトの名無しさん:04/09/19 15:57:53
>>20の発言を重く見たゲイツは強権を発動
$70兆を投与し現行のWindows全てにパッチを当て
リストビューアイテム追加時のデータからindexを分離した

897 名前:デフォルトの名無しさん[sage] 投稿日:04/02/29(水) 22:21:15
ListViewむかつく。
変更が少ないカラムは良いけど、
アイテムデータにはindexを含めろよ。別管理マンドクセ。

23 :デフォルトの名無しさん:04/09/19 16:00:03
今年の2月29日は日曜日じゃなかったか?

24 :デフォルトの名無しさん:04/09/19 17:26:57
ぐだぐだだな。

25 :デフォルトの名無しさん:04/09/19 19:15:20
コントロールパネルの地域のオプションに基づいた日付や数値の整形をしたいのですが
その情報はどこで得られるのでしょうか。

26 :デフォルトの名無しさん:04/09/19 20:41:50
>>25
日付はGetDateFormat、
数値はGetNumberFormatで整形できる。
形式を知りたいだけならGetLocaleInfo。

27 :デフォルトの名無しさん:04/09/19 22:47:39
>>26
ありがとうございました、そのまんまですね。
GetDateFormat/GetTimeFormatは見つけていたのにNumberFormatは見落としていたようです。

28 :デフォルトの名無しさん:04/09/20 01:38:34
IShellFolder2::GetDetailsOfでループを回してカラムを取得しているのですが、
所有者の次、作成者の前に details.str が L"" の要素が列挙されます。
エクスプローラのカラムのカスタマイズでは出てこないのですが、これは何なのでしょうか?

29 :28:04/09/20 02:54:53
GetDefaultColumnState/SHCOLSTATE_HIDDENでふるいに掛けて自己解決しました。

30 :デフォルトの名無しさん:04/09/20 11:29:15
エディットボックスについてです。
EM_REPLACESELで文字を最後に追加した時に、
勝手にスクロールしないようにするにはどうすれば良いでしょうか?
スクロールバーの位置を弄ってみたんですがだんだんずれて行きます。
SDKだけで作ってます。
いい方法があれば教えてください。
リッチエディットでも構いませんっ

31 :30:04/09/20 11:49:22
すみません、解決しました。

32 :デフォルトの名無しさん:04/09/20 13:20:00
アプリ開発プログラマーからの視点で聞きたいのですが、
MapFanやデジタル全国地図などのように、オンラインで多ユーザーの同時アクセス、
大きめのデータのやりとり(地図ベクトルデータ)を前提にしたシステムを
作る場合、データ送受信においてはどういったアプローチがベストでしょうか?



33 :デフォルトの名無しさん:04/09/20 14:13:30
32
ロードバランサー & LAMP

34 :デフォルトの名無しさん:04/09/20 19:27:46
//下のようなコードがあるのですがWM_NOTIFYメッセージが送られてきません。
//何が悪いのでしょうか?
#include <windows.h>
static LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp ) {
NMHDR* nmhdr;

switch( msg ) {
case WM_DESTROY:
PostQuitMessage( 0 );
break;

case WM_NOTIFY:
nmhdr = (NMHDR*)lp;

if( nmhdr->code == BN_CLICKED ) {
// hogehoge
}
break;

default:
return DefWindowProc( hwnd, msg, wp, lp );
}
return 0;
}
//続きます

35 :デフォルトの名無しさん:04/09/20 19:30:40
//続きです
extern int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) {
WNDCLASSEX wcex; HWND hwnd; MSG msg; BOOL res;

wcex.cbSize = sizeof(wcex);
wcex.style = 0;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon( NULL, IDI_APPLICATION );
wcex.hCursor = LoadCursor( NULL, IDC_ARROW );
wcex.hbrBackground = (HBRUSH)COLOR_WINDOW;
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "test";
wcex.hIconSm = NULL;
RegisterClassEx( &wcex );

hwnd = CreateWindowEx( 0, "test", "test", WS_OVERLAPPEDWINDOW, 0, 0, 300, 300, NULL, NULL, hInstance, NULL );
CreateWindowEx( 0, "BUTTON", "test", (WS_CHILD|WS_VISIBLE), 100, 100, 100, 100, hwnd, (HMENU)0x1000, hInstance, NULL );
ShowWindow( hwnd, nShowCmd );
UpdateWindow( hwnd );

while( ( res = GetMessage( &msg, NULL, 0, 0 ) ) != 0 ) {
if( res > 0 ) {
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
return 0;
}

36 :デフォルトの名無しさん:04/09/20 19:35:45
Delphiスレから移動して参りました。

ListViewを仮想リストビューとして使っています。
項目の表示などはちゃんと出来ているのですが、
Shiftを使用した複数選択をした際に、選択情報が
LVM_GETNEXTITEM などに反映されないようです。
(LVM_GETNEXTITEM で選択アイテムを数えるプログラムを書いてみましたが
Shiftによる選択を除いて、ちゃんと動作しました。)

これは、ListViewの仕様なのでしょうか?

37 :34:04/09/20 19:41:57
すいません。ボタンとかには送らないとMSDNに書いてありました。∧||∧

38 :36:04/09/20 22:20:24
すいません、>>36の質問は取り消させて頂きます。
どうやら、Delphi での私の書き方が悪かったようです。
この件を確認してくださった方がいらっしゃたら、すいません。

39 :デフォルトの名無しさん:04/09/21 10:00:14
>ボタンとかには送らないとMSDNに書いてありました。

そりゃそうだ。通知メッセージは、コントロールが親に送るもんだから

BN_CLICKED なら WM_COMMAND だよ

40 :デフォルトの名無しさん:04/09/21 12:01:42
WNDCLASSEXの、
cbWndExtra→Set[Get]WindowLong
cbClsExtra→Set[Get]ClassLong
がわかったのですが、これはどのように使い分ければいいのですか?


41 :デフォルトの名無しさん:04/09/21 12:18:46
>>40
cbWndExtra→ウィンドウ毎に固有のデータを格納
cbClsExtra→ウィンドウクラスから作られた全てのウィンドウが共有するデータを格納

42 :デフォルトの名無しさん:04/09/21 16:55:03
ビットマップ読み込みして、そこに文字を書き込むプログラムを作っています
Windows2000、XPpro(日本語、英語版)、Windows98(日本語版)では文字が縦に
出力されるのですが、Windows98の英語版でのみ、文字列が横並びに出力されて
しまいます。
読み込みをしているビットマップのサイズは縦x横=828x1165ですが、
何かWindows98での制限とかあるのでしょうか?

hDCCC = GetDC(0);
hBitmapDIB = ::CreateDIBSection(hDCCC,bif,DIB_RGB_COLORS,(VOID**)&pDIB,NULL,0);

hDCBB = CreateCompatibleDC(hDCCC);
ReleaseDC(0,hDCCC);
hBMMM = (HBITMAP)SelectObject(hDCBB,hBitmapDIB);

hFOnt = CreateFont(iFontHeight,0,2700,2700,FW_REGULAR,FALSE,FALSE,FALSE,DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,PROOF_QUALITY,
FIXED_PITCH | FF_MODERN,NULL);
hFOOO = (hFOnt)SelectObject(hDCBB,hFOnt);
SetBkMode(hDCBB,TRANSPARENT);

TextOut(hDCBB,dwX,dwY,buf,strlen(buf));
::CopyMemory( (BYTE*)m_lpNewImage + m_nHeaderSize,pDIB, m_nImageSize );
SelectObject(hDCBB,hFOOO);
SelectObject(hDCBB,hBMMM);
DeleteObject(hFOnt);
DeleteObject(hBitmapDIB);
DeleteDC(hDCBB);


43 :ほんたま:04/09/21 20:56:54
おみゃ〜らよ、Win32APIでRECT構造体を使う関数ってよくあるだろ?
あれは、別にRECT構造体でなくてもいいんだぞ。
自分でKINTAMA構造体をつくって、そのメンバをOMANKO1、OMANKO2,OMANKO3,OMANKO4という4つのint型にして、
rect.left、rect.right、rect.top、rect.bottomのかわりに、
KANTAMA.OMANKO1、KANTAMA.OMANKO2、KANTAMA.OMANKO3、KANTAMA.OMANKO4をつかってもまったく問題ないぞ!!!


44 :ほんたま:04/09/21 20:57:33
おみゃ〜らよ、RECT構造体ばかりではないぞ!
WINで定義されている構造体は全部そうだ。
おみゃ〜らよ、WINで定義されている構造体を使う必要はまったくない。
メンバの型と数さえ同じなら、自分で好き勝手な構造体を作って、それを使ってもまったく問題ない!!!
おみゃ〜らよ、知らなかったろ?


45 :デフォルトの名無しさん:04/09/21 21:00:30
>>44
詰め物の位置や数も気にしないで良いんですか?

46 :ほんたま:04/09/21 21:14:52
>>45
正確に言うと、詰め物で気にしなければならないのは、数、型、順番だ。
逆に言うと、詰め物の数、型、順番さえ合っていれば、WIN定義の構造体を使わなくてもいいってことだ。
自分で好き勝手な構造体をつくって使えばいい。

47 :デフォルトの名無しさん:04/09/21 21:18:14
>>46
詰め物の型って?

48 :デフォルトの名無しさん:04/09/21 21:23:35
彼は詰め物=構造体の各メンバだと解釈したらしい。

49 :デフォルトの名無しさん:04/09/21 22:43:42
CreateWindowでクライアント領域にはっ付けたボタンのキャプションのフォントを
変更するにはどうすればよいのでしょう?

50 :49:04/09/21 22:44:27
↑フォントというかサイズが大きいので小さくしたいのです。

51 :デフォルトの名無しさん:04/09/21 23:05:01
WM_SETFONT

52 :デフォルトの名無しさん:04/09/21 23:15:03
>>51
危うくオーナードローに踏み切りかけました。ありがとうございまs

53 :デフォルトの名無しさん:04/09/21 23:25:17
ほんならやー、CRectオブジェクトへのポインタは
RECT構造体へのポインタにキャストしても
使えるねんでーたぶん。

54 :デフォルトの名無しさん:04/09/21 23:29:38
あ、ポインタじゃなくてもいいか

55 :デフォルトの名無しさん:04/09/21 23:53:59
何でほんたまは当たり前のことを説明してるだけなのに偉そうなんですか。
誰か教えてください、

56 :デフォルトの名無しさん:04/09/22 01:40:55
スレッドが二つ、スレッド1とスレッド2あったとします。
スレッド1からスレッド2にPostMessage()で
ある構造体typedef struct foo_tag{...}FOO;をポインタで渡す場合、自動変数で渡した方がいいのでしょうか?
それともmallocした方がいいのでしょうか。
どういう指針で考えたらいいのでしょうか?

(1)FOO foo;
PostMessage(hwnd,MSG,&foo,0);
(2)FOO *foo
PostMessage(hwnd,MSG,foo,0);


57 :デフォルトの名無しさん:04/09/22 01:43:36
1は消滅する

58 :56:04/09/22 01:58:14
すみません、日本語がおかしかったので再度。

スレッドが二つ、スレッド1とスレッド2あったとします。
スレッド1からスレッド2にPostMessage()で
ある構造体typedef struct foo_tag{...}FOO;を渡す場合、自動変数で渡した方がいいのでしょうか?
それともmallocした方がいいのでしょうか。
どういう指針で考えたらいいのでしょうか?

(1)FOO foo;
PostMessage(hwnd,MSG,&foo,0);
(2)FOO *foo
PostMessage(hwnd,MSG,foo,0);


59 :デフォルトの名無しさん:04/09/22 01:59:10
1は消滅する

60 :56:04/09/22 02:00:56
>>57
渡された側でディープコピーすれば値はわたるが、
他のスレッドがこのPostMessageを呼び出す関数を使ったときにこのfooのスタック領域を上書き(初期化)してしまうということですね。

61 :デフォルトの名無しさん:04/09/22 02:08:07
>>60
んー?「このPostMessageを呼び出す関数を使ったとき」に限らないよ?

62 :デフォルトの名無しさん:04/09/22 02:10:21
違う。PostMessageはSendMessageじゃない。
変数の生存期間の問題なんで自分でタイミングを完全に理解できてないと
自動変数を使うのはまずい。

63 :デフォルトの名無しさん:04/09/22 02:38:21
>>62
つまりSendMessageは同期関数で、PostMessageは非同期関数。
非同期関数はメッセージを渡したらすぐにリターンするから、Postされた側は処理を継続できる。
タイミングとは、Postされた後にその渡された&fooを呼び出した側でまた操作する(消去したり、値を変えてしまう)のはいつか
ということですね。

64 :デフォルトの名無しさん:04/09/22 07:48:04
スタックってスレッド毎に独立してるんじゃなかったか?
だったらSendだろうがPostだろうが自動変数は使えないだろ。


65 :64:04/09/22 07:50:54
ごめん、なんか勘違いしてた。
わすれてください

66 :デフォルトの名無しさん:04/09/22 08:20:17
排他制御した方が良いような希ガス。

67 :デフォルトの名無しさん:04/09/22 08:33:39
矩形でないところへ bitmap の絵を貼り付けるため、24 bit color の色を
SetPixel() で、HDC に埋めていますが、色が元のとは違います。
元のは、暗い褐色なのに、青黒いのです。HDC の設定でなにか必要に思え
るのですが、なんでしょうか。BeginPaint() 以降なにもしていません。

68 :67:04/09/22 08:44:35
>>67
自己レス。B と R が逆だった。うかつ。

69 :デフォルトの名無しさん:04/09/22 10:58:05
>矩形でないところへ bitmap の絵を貼り付けるため

リージョン使って SelectClipRgn してから BitBlt するのが普通

70 :デフォルトの名無しさん:04/09/22 12:27:37
WindowsのIDはどうやって取得しますか?
マイコンピュータ右クリック→システムのプロパティ→全般タブで
使用者: のところに出ている xxxxx-xxx-xxxxxxx-xxxx の文字列のことです.

71 :デフォルトの名無しさん:04/09/22 13:18:45
レジストリ

HKEY_LOCAL_MACHINE の Software\Microsoft\Windows\CurrentVersion

72 :デフォルトの名無しさん:04/09/22 14:03:25
>>71
thx!!

73 :デフォルトの名無しさん:04/09/22 14:26:34
MultiByteToWideCharなんかのWideChar(UNICODE)ってのは
終端ヌルも含めオール2バイト(UTF-16?)でいいのですか?
WORD境界にそろえろと言われたもので調べています。

74 :デフォルトの名無しさん:04/09/22 14:35:51
>終端ヌルも含めオール2バイト

そうだと思います。

75 :デフォルトの名無しさん:04/09/22 14:41:20
>>73
2バイト単位の符号であることは確かです。
最近はサロゲートペアをサポートしているようなので1文字=2バイトとは限りませんが。


76 :73:04/09/22 15:02:10
了解です
WORD単位ならOKなので。ども

77 :デフォルトの名無しさん:04/09/22 16:10:02
C+ウィンアプリ+SDKのメッセージループ外で、
PostQuitMessage or PostMessage(WM_APP)を行っても大丈夫でしょうか。
メッセージループ外でそれらを行い、メッセージループに入った時、
待ち状態にならないように、すぐにメッセージ処理を行いたいのですが。

78 :デフォルトの名無しさん:04/09/22 16:21:02
>>77
大丈夫だったと思う。

79 :77:04/09/22 16:25:12
>>78
分かりました。ありがとうございました。

80 :デフォルトの名無しさん:04/09/22 19:06:31
>>77

むしろメッセージループ内で行ってるのを見たことないけど

81 :デフォルトの名無しさん:04/09/22 19:33:02
最初にPeekMessage呼び出してメッセージキューを作っておく必要があるんじゃないの?

82 :デフォルトの名無しさん:04/09/22 19:56:45
DefWindowProcは、他のメッセージをやった後、行うのはダメなのでしょうか。

83 :デフォルトの名無しさん:04/09/22 20:06:58
デフォルト処理が自前処理と重なってわやなことになる場合もあるから
メッセージの説明をMSDNで確認すれ

84 :デフォルトの名無しさん:04/09/22 20:11:10
>>83
調べてみます。ありがとうございました。

85 :デフォルトの名無しさん:04/09/22 22:56:00
>>83
わや?

86 :デフォルトの名無しさん:04/09/22 23:17:13
STRRET::uTypeがSTRRET_OFFSETの場合、
返ってくる文字列はワイド文字列なんでしょうか?
MSDNにはpidlの先頭からのオフセットとしか書いてないし、
STRRET_OFFSETを返す例を見つけられないので調査も出来ないです。

87 :デフォルトの名無しさん:04/09/22 23:51:48
>>86
ぐぐった限りでは char* にキャストしている例ばかりがヒットした。
もしかして SHGetFileInfoA と SHGetFileInfoW で違うのかもしれない。
あいまいですまん。

88 :デフォルトの名無しさん:04/09/22 23:58:58
RFC2104に記述されているHMAC:メッセージ認証のための鍵付ハッシング
について実装したいと思っているのですが、実装方法分かる方
いらっしゃいますでしょうか?

通常通りハッシュ生成を行い、RFCに記述されている
H(K XOR opad, H(K XOR ipad, text))
の通り計算を実装すると正しく出力されたのですが

APIヘッダとか見ているとHMAC_INFO構造体とか色々用意されていて
自分で実装しなくても算出してくれそうなのですが使い方どうも
よくわかりません。

CryptCreateHashのhKeyに正しいKeyを渡せば上手くいきそうな
雰囲気なのですがそのhKeyが?(これであっているか不明ですが)

とりあえず困らないのですけど気になってしょうがない。

89 :87:04/09/23 00:06:41
>>86
ヘッダ見たら
#define STRRET_OFFSET 0x0001 // Use STRRET.uOffset to Ansi
って書いてあった。orz
なら ANSI 文字列でいいのだろう。

90 :67:04/09/23 00:08:39
>>69
ヒントを有難う。3次元座標の空間に bitmap を浮かべて、マウスで
空間を動かすと、台形になったりひし形になるのを試している。
パース修正っていうのかな。

91 :デフォルトの名無しさん:04/09/23 01:06:54
>>89
ありがとうございます。
まさかMSDNに書いてない事がヘッダに書いてあるとは。
大変参考になりました。

92 :デフォルトの名無しさん:04/09/23 02:40:18
Sleep(1)って本当に1ミリ秒なんですか?
なんか使っててもっと長いようなんですが。。。

93 :デフォルトの名無しさん:04/09/23 02:49:21
Sleep(1)なら最低でも1ミリ秒以上は戻ってこない。いつ戻ってくるかはなんの保証も無い。

94 :デフォルトの名無しさん:04/09/23 03:33:09
使えないAPIですね。さすが糞OS。

95 :デフォルトの名無しさん:04/09/23 03:38:12
正確な計測を行いたければ代替手段がありますが何か?

96 :デフォルトの名無しさん:04/09/23 03:39:41
timeBeginPeriod() で Sleep() の精度も変化

97 :デフォルトの名無しさん:04/09/23 04:29:49
>>94
最低でも1ミリ秒は、他のプロセスやスレッドにCPU処理を譲るという意味で、
ちゃんと役に立っているよ。
糞OSなのもわかるけど、正しい使い方をしないで糞というのもどうかと。

98 :デフォルトの名無しさん:04/09/23 04:53:30
彼はWindowsを憎んでいるのです

99 :デフォルトの名無しさん:04/09/23 05:05:54
ボケーしね,とりあえず怒った

100 :デフォルトの名無しさん:04/09/23 06:01:02
>>94
ちなみにLinuxのリアルタイム処理はもっと使えない。

101 :デフォルトの名無しさん:04/09/23 08:22:42
つーかリアルタイムOS使えよ

102 :デフォルトの名無しさん:04/09/23 09:01:57
ソフトしかわからん奴の限界

103 :デフォルトの名無しさん:04/09/23 10:15:12
>>102
最近ハードウエアについて学んだ学生さんですか?

104 :デフォルトの名無しさん:04/09/23 10:41:56
まだ10年の若輩者です

105 :デフォルトの名無しさん:04/09/23 10:53:36
義務教育10年目

106 :デフォルトの名無しさん:04/09/23 11:54:41
計測をするなら、お手軽なのはGetTickTimeを使う
出来るだけ正確に測定したい場合は、QueryPerformanceを使う

107 :デフォルトの名無しさん:04/09/23 12:12:51
>>106
QueryPerformanceCounterって
一部の古いPentiumProマザーボードで正常な値を取得できないとか
一部のマルチプロセッサ環境で異常な値を返す場合があるとか
SpeedStepやCnQなどのクロック変化で正確な時間が測れない場合があるとか
噂やネットで聞くがどうなんだろう

108 :デフォルトの名無しさん:04/09/23 12:55:01
GetTickTime

109 :デフォルトの名無しさん:04/09/23 14:05:12
>>107
やねうらお氏のWebページか、書籍に詳しく書かれてる。
ちゃんとまとめてあるし、実験&考察までしているのはここだけじゃないか?

110 :デフォルトの名無しさん:04/09/23 14:48:58
またうらおか

111 :デフォルトの名無しさん:04/09/23 15:29:22
WM_GETMINMAXINFOが通知されるときの
MINMAXINFOのデフォルト値を調べることってできますか?
ウィンドウプロシージャの中でやるのはナシ

112 :デフォルトの名無しさん:04/09/23 16:55:19
DefWindowProc(hwnd, WM_GETMINMAXINFO...)

113 :デフォルトの名無しさん:04/09/23 17:53:32
>>112
アリガトゴザマス
でも、lParamには一体何を渡せば・・・。

114 :デフォルトの名無しさん:04/09/23 20:18:22
シンプルな枠なしウィンドウ
(2chブラウザで >>番号 にマウスを移動させると出現するポップアップのようなもの)
を作りたいのですが、これはWIN32APIの周りをいじると実現できるのでしょうか?
以下、試しにrubyで書いてみたのですが、こんな大げさなウィンドウを作る必要がなくて、
テキスト情報をもっとシンプルにポップアップしたいのですが…

require 'Win32API'
msgbox = Win32API.new('user32', 'MessageBox', 'LPPI', 'I')
msgbox.call(0, 'Message Box', 'test', 0)

ご存じのかた、情報のポインタだけでも教えていただけないでしょうか。

115 :デフォルトの名無しさん:04/09/23 20:24:52
>>114
2chブラウザのポップアップウインドウは普通ToolTipをつかっているはず


116 :デフォルトの名無しさん:04/09/23 21:07:58
Win2k以降でIShellDetailsはIShellFolder2に取って代わられたと書いてあるのですが、
特定のフォルダ(タスク等)でIShellFolder2の取得に失敗します。
タスクの場合は、IShellDetailsの生成に成功するのですが他のフォルダの場合は
IShellDetailsに失敗してIShellFolder2で成功するようです。

IShellFolder2生成
if (失敗)
 IShellDetails生成
 if (失敗)
  エラーか、独自処理

って感じで良いんでしょうか?
>For Windows 2000 and later systems, IShellDetails is superseded by IShellFolder2.
を見るとObsoleteな扱いになってるように見えるのですが。

117 :デフォルトの名無しさん:04/09/23 21:32:12
>>113
自分のウィンドウにWM_GETMINMAXINFOが来たときのlParamには何が入ってる?

118 :デフォルトの名無しさん:04/09/24 00:03:49
>>117
というよりも、どちらかと言うと、
その値を調べたいのです
やっぱりWM_GETMINMAXINFOに張りついてないと
いけないんでしょうかね・・・

119 :デフォルトの名無しさん:04/09/24 00:58:20
だから呼び出し元でMINMAXINFO構造体を用意して、
lParamにそのアドレスを渡せっていう話だろ。

120 :114:04/09/24 05:50:26
>>115
ありがとうございます。試しに以下のコードでTooltipを表示してみたのですが、
require 'vr/vrcontrol': require 'vr/vrtooltip'
class Form4ToolTip < VRForm
include VRDrawable
AREA = [0,0,110,110]
def construct
self.caption = "tooltip"; self.move 10,10,110,110
tt = createTooltip; tt.addToolArea AREA,"てすと"
end
end
VRLocalScreen.start(Form4ToolTip)

できれば、元になるウィンドウ無しにツールチップだけ表示することはできないでしょうか。
たとえばIEのテキスト入力画面でカーソルの位置に突如ポップアップを出すとか。

babylonとかドクターマウスとか、翻訳系のアプリケーションの場合には、
元になるウィンドウ関係なしにポップアップ表示が実現されているのですが、
あーいうのはどうやってプログラムを組めばよいのでしょうか…ご存じの方教えてくださいm(__)m

121 :デフォルトの名無しさん:04/09/24 10:23:40
>>119
初期化なしでいいんですか?

122 :デフォルトの名無しさん:04/09/24 10:54:47
>>116
Windows 2K 以降のシステムに対しては、IShellDetails は IShellFolder2 で置き換えられました、
みたいな意味だから例えば Win98 や NT の頃に出た Shell Namespace Extension の中には、
IShellDetails しか実装していないものもある。


123 :デフォルトの名無しさん:04/09/24 11:07:15
WM_*の値がいくつであるか、一覧が乗っているサイトが
ありましたら、URLを教えてください。

通常は、マジックナンバーは使わないのですが、
メッセージ処理の研究をしていて、来たメッセージのmsg.messageを
ウィンドウなどに表示したとき、どのWM_*か知りたいのです。

124 :デフォルトの名無しさん:04/09/24 11:32:26
>>123
WinUser.h見たほうが早いと思うが…。

125 :デフォルトの名無しさん:04/09/24 12:06:07
>>124
なるほど。ありがとうございました。

126 :デフォルトの名無しさん:04/09/24 14:09:36
Spy++じゃダメなの?

127 :デフォルトの名無しさん:04/09/24 14:51:02
CreateWindowでモーダルを作ろうと思っているのですが、
DS_SYSMODALはどこかのウィンドウの「子」として作らなければ関数失敗しますか?
自分は失敗するのですが。。

128 :デフォルトの名無しさん:04/09/24 19:41:35
CreateWindowで、自プログラムのメインウィンドウを作る場合、
そのウィンドウの親ウィンドウとして、
GetDesktopWindowで得たウィンドウハンドルを指定するべきなのでしょうか?
それとも、NULLを指定するべきでしょうか?


129 :デフォルトの名無しさん:04/09/24 20:18:17
リングレベルを変更するAPIを教えて下さい。


130 :デフォルトの名無しさん:04/09/24 20:21:55
お前ごときに変更されてたまるか。

131 :デフォルトの名無しさん:04/09/24 20:31:45
>>128
どっちでもいい。

132 :デフォルトの名無しさん:04/09/24 20:38:45
終了ボタンを押した時に、GetMessageから出るメッセージを教えてください。

調べてみると、WM_NCLBUTTONDOWNが出ているみたいなのですが、
それはバーとか非クライアント領域で共通のものなので、
他に出ていると思うのですが、分かりませんでした。

WM_CLOSEは、コールバックの方では出ているようなのですが、
GetMessageからは、出ていないようです。

133 :デフォルトの名無しさん:04/09/24 20:43:58
>>131
それぞれ値が全く違うので気になりました。
NULLを指定した場合には、
一体何を親ウィンドウとしているのでしょうか?
NULLは標準的なやり方ではないのですか?


134 :デフォルトの名無しさん:04/09/24 21:01:25
>>133
Spy++でみると、どっちで作ってもオーナーウインドウは(なし)になる。

135 :134:04/09/24 21:02:46
ちなみに、マルチモニタ(4枚)環境。

136 :デフォルトの名無しさん:04/09/24 21:45:21
>>132
GetMessageからメッセージが出てくる順番は先入れ先出しのキューだから、
即座に反応してほしいメッセージは直接ウィンドウプロシージャへ送られる。



137 :デフォルトの名無しさん:04/09/24 22:19:02
WindowsOSのプロセスは厳密には親子関係にはないそうですが、
子プロセスが先に終了しても全く問題はないということですか?


138 :デフォルトの名無しさん:04/09/24 22:47:27
>>132
アレコレあるけど最終的(の1っ歩前)は、WM_SYSCOMMAND で SC_CLOSE が来てると思うよ。
普通のウィンドウなら。

139 :132:04/09/24 22:55:57
>>136>>138
ありがとうございます。もう一度試してみます。

140 :デフォルトの名無しさん:04/09/25 05:31:55
ファイルの切り取りや貼り付けをする一般的な方法ってどんなものでしょうか?
とりあえず思いつくのは、コンテキストメニューを取得して、verbに"cut"や"paste"を指定することなのですが
もっと一般的な方法ってないでしょうか?
SHFileOperationみたいな物が用意されていそうな雰囲気があるのですが。

141 :デフォルトの名無しさん:04/09/25 05:38:08
>>137
そう。子プロセスが終了するまで親は停止するようなプログラムも作れるし、親が終了しても子はそのまま残るし。

142 :デフォルトの名無しさん:04/09/25 07:30:09
>>141
ゾンビらないのですか?
優秀なOSですね。


143 :デフォルトの名無しさん:04/09/25 07:57:37
ゾンビって終了したにも関わらずそのステータスを誰にも
取得されていないプロセスのことじゃなかったっけ?
なんか大きな勘違いしてるカキコを2chでよく見かけるけど。

144 :デフォルトの名無しさん:04/09/25 09:34:27
あの、マウスのカーソルって条件によって形を変えられるじゃないですか。
例えば場所によって一般的なアローであったり手の形であったり、エディットボックスのときも変わりますよね。
そこでなのですが、自分以外のプログラムによって変わったカーソルの形が画面に表示されるときに
何になっているのかということを取得することってできませんか?
また、カーソルの形の画像自体を取得できなくてもある位置からある違った位置にカーソルを動かした時に
そのカーソルの画像が変わったかいなかを取得できるだけでもかまいません。
画像判定以外でどうにかならないかと考えております。
お知恵を貸していただける方がいらっしゃいましたらお願いします。


145 :デフォルトの名無しさん:04/09/25 09:49:47
HCURSOR SetCursor(HCURSOR hCursor);
の戻り値を保存して
次判定するときに参考にするんじゃだめ?

146 :デフォルトの名無しさん:04/09/25 09:55:15
マナーの悪いプログラム、嫌いです。


147 :デフォルトの名無しさん:04/09/25 11:21:00
自分で登録したタスクトレイのアイコン上に
マウスカーソルが行った事を知るにはどうすればいいんでしょう?

WM_MOUSEMOVEだと、どういう条件だかわからんけど
がしがし飛んできてるみたいで。。。
WM_MOUSEMOVEでどうにかするものなのかな?



148 :デフォルトの名無しさん:04/09/25 11:24:16
>>147
はぁ?NOTIFYICONDATA.uCallbackMessage

149 :147:04/09/25 11:37:42
>>148
言葉足らずですまん
uCallbackMessageで受け取った時のことねん

今もぐぐってるけど、WM_LBUTTONDOWNとかの
クリック系しか無くて、困ってるんです

150 :デフォルトの名無しさん:04/09/25 12:15:32
最後にlparam=WM_MOUSEMOVEがきたときのマウス座標(p1)を
記憶しておいて、タイマーでマウスの座標(p2)を定期的にチェック
してp1==p2ならアイコン上、違ったらアイコン外とみなすのはどうかね?
試してないけど。

151 :147:04/09/25 12:39:44
下げ忘れてた、すまん

>>150

うーむ、こういう案になるのかぁ
入った時と出た時だけ捕まえるとか。。。無理( ・ω・)?

まぁ、もう暫く頭の中で練ってみます
ありがとうです

152 :デフォルトの名無しさん:04/09/25 12:52:00
リスト構造のデータを管理するときは積極的にHeapCreateするべきでしょうか?

153 :デフォルトの名無しさん:04/09/25 12:58:19
>>140
IShellLinkみたいなやつがあった筈。

154 :デフォルトの名無しさん:04/09/25 18:10:05
Win2KSP4
C++Builder5で
::MessageBeep(MB_OK)
とかやっても音が出ないんです

普段操作してる時は音出ます
VSは持ってないのでテストできないんですが
こういう症状出た事ある人いますか?

155 :デフォルトの名無しさん:04/09/25 18:21:24
他のアプリでメッセージボックスが出る時にも音が出てないのか?
出てなければ環境の問題。

他のが出てておまいのが出ないなんてのはまずあり得ないはず。

156 :154:04/09/25 18:29:36
ペイントなんかだとダイアログの時音が出るけど
・・・C++Builderで作ってるソフトからだとダイアログの時音が出ない!

なんだこりゃ・・・?
C++ Builder の環境疑うべきかな?

157 :154:04/09/25 19:00:11
解決しました
TweakUIでサウンド殺してました
すんません、ゆるして・゚゚(´□`。)°゚。ワーン

158 :デフォルトの名無しさん:04/09/25 19:00:33
IContextMenuを使ったプログラムを作ると、
Spy++で見るメッセージのネスとレベルがとんでもない勢いで増えていくんですがこんなモンですか?
エクスプローラのネストレベルもどんどん増えていくみたいなのですが。

159 :デフォルトの名無しさん:04/09/25 19:45:02
DialogBoxParamがモーダルになってくれません。
オーナーウィンドウがNULLでもモーダルにする方法はないでしょうか?

160 :デフォルトの名無しさん:04/09/25 19:54:49
>>159
どういう理由でモーダルでないと判断したんだ?

161 :デフォルトの名無しさん:04/09/25 20:04:42
>160
アプリから呼ばれるDLLを開発しており、アプリからDLLを呼んでダイアログを
開いたところ、呼び出し側アプリのウィンドウが操作できてしまう。。。

162 :デフォルトの名無しさん:04/09/25 20:10:23
DialogBoxParam(m_hInstance,
 MAKEINTRESOURCE(IDD_ReaderSelectDlg),
 0,
 DialogProcEntry,
 (LPARAM)this);

…3番目が0じゃだめなの???

163 :デフォルトの名無しさん:04/09/25 20:23:35
アプリウィンドウをオーナーに出来ない理由があるのか?

164 :デフォルトの名無しさん:04/09/25 20:33:18
アプリウィンドウのハンドルの取得方法がわからないのでNULLを渡しています。
自分(ダイアログ)を開いた親、もしくは
アプリのTopLevelウィンドウがわかればいいのだけれど…

165 :デフォルトの名無しさん:04/09/25 20:43:29
普通呼ぶとき渡してもらうだろ

166 :デフォルトの名無しさん:04/09/25 20:49:58
今回作っているものは渡してもらえません(T.T)

167 :デフォルトの名無しさん:04/09/25 21:13:40
>166
最初から設計のやり直し。
はい次の方どうぞ。


168 :デフォルトの名無しさん:04/09/25 21:18:50
ったく2ちゃんねらは役にたたねぇなw

169 :デフォルトの名無しさん:04/09/25 21:21:43
EnumWindowで探すか?


170 :デフォルトの名無しさん:04/09/25 22:06:57
そのあとGetWindowThreadProcessIdかな。
最初からEnumThreadWindowsでもいいかも。

171 :デフォルトの名無しさん:04/09/25 22:12:45
>>168
同意

172 :デフォルトの名無しさん:04/09/25 22:15:49
>>171
じゃあ何故オマイラはここにいるのですか?

173 :デフォルトの名無しさん:04/09/25 22:18:40
>>172
役に立たない人間だからです

174 :デフォルトの名無しさん:04/09/25 22:52:09
>>161
システムモーダルにすれば操作できないよ

175 :sage:04/09/26 01:19:55
あるウィンドウAを親としてWS_CHILDスタイルを指定しないでウィンドウBを作ったとき
Bから見たAをオーナーウィンドウ、、というんですよね。違ってるでしょうか。

GetWindowでGW_OWNERを指定した場合は必要なAのハンドルが得られるのですがGetParentを使用した場合に関数が失敗します。

(GetParent)
「指定したウィンドウがトップレベルウィンドウの場合は、オーナーウィンドウのハンドルが返ります。指定したウィンドウが
トップレベルのオーナーを持たないウィンドウだった場合、および関数が失敗した場合は NULL が返ります。」

GetParentでオーナーを取得できているのにGetParentでオーナーが存在していないという事になっている(?)のは何故なのでしょうか。
間違い指摘してくださいお願いします。


176 :デフォルトの名無しさん:04/09/26 01:41:17
>>175
とりあえずGetLastError()してみては

177 :671:04/09/26 07:51:00
ドキュメントの間違い。ずっと前から。

178 :デフォルトの名無しさん:04/09/26 11:21:31
プロセスの親子関係が曖昧なんだから、
ウィンドウの親子関係くらいはシンプルでハッキリと作ったらいいのに。


179 :デフォルトの名無しさん:04/09/26 11:39:56
はっきりしてるよ。親子関係と所有関係を混同してる人が多いだけで。
GetParent() はオーナーを返さないのも名前からいって妥当だと思うけどね。

180 :デフォルトの名無しさん:04/09/26 13:00:02
すっげー、このヒト。名前だけでAPIの全貌つかんじゃってるよ。
当然とか言い切っちゃってるし。


>The GetParent function retrieves a handle to the specified window's parent or owner.
>指定された子ウィンドウの親ウィンドウまたはオーナーウィンドウのハンドルを返します。



181 :デフォルトの名無しさん:04/09/26 13:07:25
>>180
当然とは言ってないわけだが

182 :175:04/09/26 13:20:30
sageを今やっと理解しました175です。ありがとうございます。

>>176さん

使った事がない関数なので調べて見ます。
今時間がないので試せませんが、夜試してみようと思います。

>>177さん

あ、MSDNの文書自体が間違っているということですか??
考えもしませんでした。そういえば日本語のMSDNは誤植が多いって誰かが・・。
英語も勉強しなくては

>>178さん

僕も自分が親とオーナーのをちゃんと識別できているかどうかすらわかってない感じです。
子は親の領域内に表示されるウィンドウ、オーナーに所有されたウィンドウというのは
オーナーが閉じられたときに自身も閉じられてしまうようなウィンドウ、あとは上に書いたことをつけたしたような認識です。

>>179さん

やっぱりMSDNが誤植でGetParentはオーナーを返さないんですね。
自分も親子関係と所有関係の違いをよくわかっておりません。
「オーナーウィンドウ 親ウィンドウ 違い」でググって解説は見つけたのですが、
特にオーナーについて具体的に何を指しているのかわかりませんでした。
教えてください、お願いします。

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


183 :デフォルトの名無しさん:04/09/26 13:25:44
>>182

英語ですけど。

Win32 Window Hierarchy and Styles

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/msdn_styles32.asp

184 :144:04/09/26 13:40:05
GetCursor()で取得しようとしたんですがカーソルが矢印でもハンドでも
同じ値しか返してくれません一体どうすればいいんでしょうか・・・P_q

185 :デフォルトの名無しさん:04/09/26 13:45:18
>>184
これかな。

マイクロソフト サポート技術情報 - 230495
HOWTO:現在のカーソルのハンドルを入手します。
http://support.microsoft.com/?kbid=230495

186 :デフォルトの名無しさん:04/09/26 13:46:08
>>184
最終手段だけど、APIフックでSetCursor()をフックしちゃえば?

187 :デフォルトの名無しさん:04/09/26 13:47:12
x64コンパイラを含んだPlatform SDKを入手したいのですが、
どうやったら入手できますか?
MSDN以外にも、betaplaceから入手できるとCマガジンに書いて
あったのですが、Guest IDを聞かれるだけで、メールなども来ていません。

188 :175:04/09/26 23:25:56
>>180さん

あれ。

>The GetParent function retrieves a handle to the specified window's parent or owner.
>指定された子ウィンドウの親ウィンドウまたはオーナーウィンドウのハンドルを返します。

MSDNの内容は誤植じゃないって事でしょうか?

GetLastErrorをGetParentの直後に使ってみました。関数はハンドルを返しませんが(関数失敗?)
LastErrorの戻り値をデバッグモードで調べると0になっていました。
0のエラーコードは「正常に終了している」とどこかの掲示板のログにありましたし
MSDNのFormatMessageのサンプルコードをほぼ完全にコピペしてエラーメッセージを表示しましたが
やはり、「操作を正しく完了しています」的なメッセージでした。

ダラダラごめんなさい。GetParentはオーナーは返さないという結論でいいのでしょうか?



189 :デフォルトの名無しさん:04/09/26 23:58:46
> GetParentはオーナーは返さないという結論

すくなくとも Windows95,2000 では、返しませんね。
古い Win32API のヘルプでは

The GetParent function retrieves the handle of the specified child window's parent window.

となっていて、オーナーのハンドルを取得できるとは書いていない。いつからか、取得できる
という事になっているが、自分は成功したことはありません。

GetWindow() か、WS_CHILD スタイルが無いことを確認してから GetWindowsLong() では
取得できますね。

190 :デフォルトの名無しさん:04/09/27 00:08:44
CreateFileの第六引数・ファイル属性のFILE_ATTRIBUTE_ENCRYPTEDの説明に
このファイルまたはディレクトリを暗号化するよう指示します。
とありますけど、実際にはどうなるんですかね?このフラグでファイルに数値入れたりしても
特に何も変わってないようにみえるんですけど

191 :デフォルトの名無しさん:04/09/27 00:11:21
CreateFileしたユーザ自身が見たら、暗号化されて見えなくてなくて当たり前だと思うが。

192 :デフォルトの名無しさん:04/09/27 00:11:29
>>190
調べてないけど、FATとNTFSでは挙動が違うんでないかい?
FATでそんなめんどくさいことサポートしてないでしょ。

193 :デフォルトの名無しさん:04/09/27 00:14:09
スレッドがサスペンド状態かどうかを知る方法はあるのでしょうか。
たとえばVCLのTThreadクラスでは、Suspendedプロパティを設定してから
実際にサスペンドさせるので、スレッド自身がサスペンドする場合には
このプロパティは厳密にはあてにはならないと思います。
スレッドハンドルは終了しないとシグナル状態にならないようだし、
何か方法はないものでしょうか。

194 :デフォルトの名無しさん:04/09/27 00:26:14
>>182 WS_POPUPの場合、GetParent()はオーナーを返す。

195 :デフォルトの名無しさん:04/09/27 01:05:07
>>193
VCLって何?

というか、サスペンド状態ってあんまり使わんと思うんだが
(通常はイベント待ちになってるっしょ)
汎用の何かを作るの?

196 :デフォルトの名無しさん:04/09/27 01:12:47
>>195
193じゃないけど、VCL = Visual Component Library の略で
Delphi、C++Builder で使われてるクラスライブラリ

197 :デフォルトの名無しさん:04/09/27 02:00:06
>>193
WaitForSingleObject

198 :デフォルトの名無しさん:04/09/27 02:25:57
>>193
SuspendThreadして戻り値見るとか?

199 :193:04/09/27 06:52:57
>>195
VCL知らんっすか。まァそうかもしれませぬな。
>>196さん、さんくすっす。

あんまりスレッドを作ったり終了したりすると原因不明のメモリリークがあるとか
聞くし(真偽は不明)、どうせ必要なスレッドならサスペンドで待機させといて
必要なデータを設定→Resumeの方が効率いいかなー、とオモテそんな仕組みを
考えております。

>>197
なんのハンドルを?サスペンドでもシグナル状態になるの?

>>198
考えましたけど、一瞬でもスレッドの動作を阻害するのでやだなあと。
でも一応案のひとつです。

200 :デフォルトの名無しさん:04/09/27 06:59:26
>>190
ファイルを暗号化するには専用のAPIを使う必要がある
暗号化属性ビットを直接いじっても駄目

201 :デフォルトの名無しさん:04/09/27 09:13:12
なんだDel厨か…

202 :デフォルトの名無しさん:04/09/27 14:10:22
>>193
待機させるならCreateEventのハンドルとかでイベント待ちする方が賢いと思うけど。
SuspendThreadはワーカスレッド側の都合に関係なく止まるから普通は使わないよ。

203 :デフォルトの名無しさん:04/09/27 14:31:48
質問です。
複数のアイコンを1つのファイルにまとめるためにdllを作るというのはありですか?
試してみたところ、dllはソースファイルに何も書かなくてもビルドできるようなので
正直驚いているところです。

正しいアイコン書庫ファイルの作り方は何なのでしょうか?

204 :デフォルトの名無しさん:04/09/27 14:38:59
>>203
WinAPIで取り出せるからdllでいいと思うけど。

205 :デフォルトの名無しさん:04/09/27 14:40:25
拡張子はICLにするのが一般的なんかしら。
ttp://www.venus.dti.ne.jp/~mueji/tips/tips07.htm

206 :デフォルトの名無しさん:04/09/27 14:56:37
>>205
情報有難うございました。
リンクページによると、dllはある種のアイコン書庫ファイル扱いされてるみたいですね。
.iclファイルという専用のフォーマットがあることは全く知りませんでした。
勉強になりました、サンクスです。ノシ

ちなみに自分がVC6SP4で生成したソースなしdllでのサイズについて触れますと、
2,238[Byte] × 219個 を組み込んだ状態で、557,056Byteのdllファイルとなったので、
オーバーヘッドは、557,056-490,122 = 66,934[Byte]でした。

207 :デフォルトの名無しさん:04/09/27 15:03:26
おーい、ICLは専用フォーマットじゃないよ。
アイコンしか入っていないDLLを、それとわかるように拡張子変えてるだけ。

208 :デフォルトの名無しさん:04/09/27 15:38:26
ListViewコントロールのスクロールバー位置についての質問です。
垂直スクロールバーが一番下に来ているかどうか知りたいのですが以下のようなコードで問題ないのでしょうか?
nPos+nPageがnMaxより1大きいのが気になるのですが‥‥

::SCROLLINFO si;
si.cbSize = sizeof(si);
si.fMask = SIF_ALL; //SIF_POS | SIF_RANGE;
::GetScrollInfo(hWnd, SB_VERT, &si);
if ((si.nPos + si.nPage - 1) == si.nMax)
  //要スクロール
else
  //スクロール不要



209 :デフォルトの名無しさん:04/09/27 15:38:40
>>206
リンカの/NOENTRYでもう少しサイズは小さくならないか?

210 :デフォルトの名無しさん:04/09/27 17:39:00
Windows であるディレクトリ以下のファイルのコピー,移動,削除などを
監視したいんだが,

FindFirstChangeNotification

を使えば,それが起きたことを教えてくれるが,
なんていうファイルのどうしたのか(コピー? 移動? 削除?)は
これじゃわからん.

これを知る方法ない?


211 :デフォルトの名無しさん:04/09/27 18:08:48
>>210
NTならそういうAPIが使えるが、そうでないなら自分でリストアップするしかない。
と記憶してる。

212 :210:04/09/27 18:10:01
リストアップっていうのは?
どうやんの?

213 :デフォルトの名無しさん:04/09/27 18:19:47
>>212
変更前にファイルリストを作っておいて変更後と比較する

214 :デフォルトの名無しさん:04/09/27 18:21:31
>>213

常駐して,アクション(ファイル操作)が起こりしだい
リアルタイムで知りたいんだけど,
その方法じゃ無理やんけ

215 :デフォルトの名無しさん:04/09/27 18:25:33
アクションが起きるたびにファイルリストを随時更新するんだよ

216 :デフォルトの名無しさん:04/09/27 18:25:46
さよか。

217 :210:04/09/27 18:32:07
>>215

1つのドライブぜんぶ監視したいんだが,
そんなことやってられっか
いくらメモリくうかわからんし,
CPU もおおいそがしだよ

218 :デフォルトの名無しさん:04/09/27 18:34:21
そうですか

219 :210:04/09/27 18:34:57
誰かいい知恵だせよ

220 :デフォルトの名無しさん:04/09/27 18:38:44
さいな

221 :デフォルトの名無しさん:04/09/27 18:44:30
ファイルI/OのAPIをフックすればできるけど、特殊なAPIの呼び出しかたしてたり
圧縮・暗号化されてる実効ファイルとかだとちょっと面倒。

222 :206:04/09/27 18:46:52
>>207
早とちりでしたか。orz

223 :デフォルトの名無しさん:04/09/27 19:04:00
>>210
NT系でいいんなら ReadDirectoryChangesW を非同期で使えば?

224 :デフォルトの名無しさん:04/09/27 19:12:35
つーか210では「あるディレクトリ」とか言ってるのに
「1つのドライブぜんぶ」とかいきなり前提条件変えるし

225 :デフォルトの名無しさん:04/09/27 19:21:58
もう相手すんなよ。

226 :デフォルトの名無しさん:04/09/27 19:52:22
(´,_ゝ`)プッ
しょせんここのレベルはこの程度だよ

227 :210:04/09/27 20:02:18
あなたたちには、失望したわ。

228 :210:04/09/27 20:08:47
自己解決したので、もう来ません。

229 :デフォルトの名無しさん:04/09/27 20:09:42
何事もなかったかのように次の人どうぞ↓

230 :デフォルトの名無しさん:04/09/27 20:10:08
>>223に答え教えてもらっておいて「自己解決」か。
プッ

231 :193:04/09/27 20:16:35
>>202
もちろん、ワーカスレッドの都合を無視して無理やりサスペンドさせるような
作りにはしていません。
おっしゃるとおりに今までイベントオブジェクトで連携を取っていたんですが、
ワーカスレッドが自発的に停止する場合に問題だったのです。
スレ違い気味になるので詳しくは書きませんが、別のアプローチで解決しそうです。

232 :デフォルトの名無しさん:04/09/27 20:39:31
詳しく書け

233 :デフォルトの名無しさん:04/09/27 21:27:26
SHChangeNotifyRegister() は9xでも隠しAPIとして存在しているはず。

234 :193:04/09/27 22:34:23
>>232
>>201にむかついたので、Del厨は引っ込みますよーだ。

235 :デフォルトの名無しさん:04/09/27 23:30:00
>>233
SHChangeNotifyRegisterはアテにならない。

236 :デフォルトの名無しさん:04/09/27 23:36:34
>>235
それは当然。ソフトウェア的に実現しているに過ぎないからね。
SHChangeNotify() をちゃんと呼んでくれるプログラムしか対応できない。
エクスプローラでの操作が反映される程度だろう。

9x でリアルタイムに反映させようと思ったら、ドライバ書くしかないんじゃないか?

237 :デフォルトの名無しさん:04/09/28 00:06:07
分割ウィンドウを作ろうと思ってがんばってるんですが、どうしても
みてくれが悪くなります。
MFCのCSplitterWndと同様の効果を得られるようにするにはどのように
すればよろしいのでしょうか?

238 :デフォルトの名無しさん:04/09/28 00:09:53
MFCと同じように書く

239 :188:04/09/28 01:52:10
>>189さん

遅れてすいません。
なるほど!詳しくどうもありがとうございました!
これでスッキリ寝れます。

みなさんどうもありがとうございました。

240 :デフォルトの名無しさん:04/09/28 01:52:49
別スレで同じことを書きましたがスレ違いだったみたいなので
こちらで質問します。

MCIで動画を再生するプログラムを作っているのですが
MCIWndCreateでWS_CHILDを指定して再生させています。
ですがこのままだと再描画がされません。
親のウィンドウにはWM_PAINTが来るのですが、
どのように再描画させれば良いかが不明です。

どなたかご存知ないですか?

241 :デフォルトの名無しさん:04/09/28 15:46:13
>>240
InvalidateRect

242 :デフォルトの名無しさん:04/09/28 22:04:17
NamedPipeなんですけどクライアント側でWaitNamedPipeを使って待つようにしてます。
ほぼ同時刻にクライアント側から書き込もうとすると1つはタイムアウトでエラーになります。
サーバー側でのインスタンスの数は1つでも制限なしでも変わらす。

同時刻に接続に行って両方とも読むいい方法は無いですか?

243 :デフォルトの名無しさん:04/09/28 23:37:08
設定の保存にレジストリを使いたいんですが、レジストリに書き込むにはどうしたらいいんでしょうか。
HKEY_CURRENT_USER\SOFTWARE\Microsoft\sample (仮)に
名前 Height 値 200

という感じで記録したいんです。

244 :デフォルトの名無しさん:04/09/28 23:47:44
>>243
自分で調べてみてそれが分からない程度ならばプログラムをやめろ

245 :デフォルトの名無しさん:04/09/28 23:58:00
>>243
RegSetValueEx

これでわからなければ残念だが 244 の言うとおり

246 :デフォルトの名無しさん:04/09/29 02:26:39
チェックボックスを縦一列にびっしり並べたいのですが、
一つ一つの縦幅の値をどのようにして決定したらよいかわかりません。
WM_CTLCOLORBTNでデバイスコンテキストを受け取れば、
GetTextMetricsで文字の高さを得て近い事はできるかなあと思いましたが
もっと綺麗な方法があるかなと思って質問させていただきました。
よろしくおねがいします。

247 :デフォルトの名無しさん:04/09/29 02:43:43
プリンタなどの特殊なDC以外では、文字列の高さはフォントで決まる。どこでもいいから
スクリーン関係のHDCを取得して、使用するフォントで高さを一回求めればいい。

GetDC(0) でもいいんじゃないの、たぶん。

248 :デフォルトの名無しさん:04/09/29 02:54:35
醜悪なインターフェイスの典型

249 :デフォルトの名無しさん:04/09/29 09:32:23
統一されたインターフェイスの典型

250 :デフォルトの名無しさん:04/09/29 11:12:29
TrueTypeフォントデータからLineTo,MoveToで描画可能な線情報を
抽出したいのですが、何かいい方法はないでしょうか?

【現在のロジック】
DIBに文字を描画 → 輪郭だけのビットマップ画像(袋文字状態)を作成 →
ビットマップの輪郭を一筆書き線の情報に変換

一筆書き線の情報をLineTo,MoveTo描画すると元の文字の輪郭らしきものにはなるが
美しくない。

TrueTypeフォントデータから直接LineTo,MoveTo座標を抽出する方法があればベストです。
どなたか知ってらっしゃる方がいればよろしくお願いいたします。

251 :デフォルトの名無しさん:04/09/29 11:17:32
GetGlyphOutline
曲線データだけどね。

252 :デフォルトの名無しさん:04/09/29 12:35:04
>>250
ベジェ曲線かBスプライン曲線について学んだ後の
方がいいと思うよ

253 :デフォルトの名無しさん:04/09/29 20:18:57
ファイルのマッピング管理をOSに任せる為に、
メモリマップドファイルを使っています。
この時、メモリへの書き込みに応じて
自動的にファイルサイズを拡張するにはどうしたらいいでしょうか。

試しにCreateFileMappingにmaximumSizeを与えてみたところ、
メモリにアクセスしなくてもmaximumSizeのサイズでファイルが作成されるようです。

OSがページフォルトを検出して勝手に拡張してくれると非常に楽なのですが、
不可能であれば代替策を教えていただけると助かります。

254 :デフォルトの名無しさん:04/09/29 20:30:42
>>253
不可能です。代替策もありません。
一度マッピングを破棄して、再度マップしなおす他に方法はありません。
実装方針を見直すしかないと思います。

255 :デフォルトの名無しさん:04/09/29 20:39:17
>>254
ということは、自分でキャパシティを設けて、アクセスの度にチェック、
キャパシティを超えていたらコミット、というコードを書くのと大差ないわけですね。

あ、でも基本的に読み書きがランダムだから、
必要な部分だけファイルから読み出したり書き出したりするよりかは
再マップした方がいいのかもしれません。

やりたい事はバーチャルなファイルシステムに類するような事なのですが。

256 :デフォルトの名無しさん:04/09/29 20:48:30
>>255
class CFileMap : {
public:
void* Map(fpos_t start, size_t length);
void* MapNext(size_t length);
};
みたいなクラスで適当に大き目のサイズだけマップしつつ必要に応じて再マップってのが
良いような気がします。ReadしてWriteするよりかは性能でると思う。

扱うデータが動画等の巨大なものでなければ、処理中はすべてオンメモリで処理するコードでも
良いような気もしますけど、それではまずそうですか?

257 :253=255:04/09/29 20:55:36
>>256
にゃるほど。

> 処理中はすべてオンメモリ

それはマッピングせずにということですか?
それだと初回の読み出しに全て読み出さなきゃいけないので無駄が多いと思うのですが、
イマイチ理解出来ていなそうなので解説お願いします。

258 :デフォルトの名無しさん:04/09/29 21:34:38
>>257
ファイルサイズ分のメモリを、とりあえず
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/creating_guard_pages.asp
で説明されているような Guard Page で割り当てておいて、初回アクセス時に実際にファイルから読み込む、
というようなノリです。

でもメモリ領域とファイルとの関連を管理しなきゃいけないので、あまり面白くないですね。
トリッキーだし。

259 :253:04/09/29 23:16:53
>>258
Guard Pageって面白いですね。
フォルト検出に近い事が自分で出来るのか。

でも毎回テストしなくてはいけないという点でやはり不便ですね。
かといって、毎回再マップしてると開放の度に強制的なコミットで重たそうな気もします。
テストしてみないとなんとも言えませんが。

260 :デフォルトの名無しさん:04/09/29 23:35:43
Shellプログラミングについての日本語本てある?
ShellってIShellFolderとかね。

261 :デフォルトの名無しさん:04/09/30 01:29:00
>>259
毎回テストする必要はないんでない?
ガードページを読み書きすると、SEH が投げられるので、SEH のハンド
ラでガードを解除してファイルをロードして、SEHが投げられたところ
から実行を続行すればいいような。


262 :デフォルトの名無しさん:04/09/30 01:40:57
親が使っているノートパソコンにはマウスを付けているんですが、キーボード手前の
ポインタを動かせる装置が誤動作をするらしくて、勝手にマウスポインタが動いたり、
クリックされたりするらしいのです。
それでどうにかしろと言われたのでマウスのクリック(できれば移動も)を封じることに
しようと思うのですが、この場合はSetWindowsHookExを使うという方向でよいでしょうか?

263 :デフォルトの名無しさん:04/09/30 02:14:00
>>262
素直にタッチパッドの禁止をして置け。
・メーカのサポートデスク
・取り説
・オンラインヘルプ
のどれかでそのやり方がわかるだろ。

264 :デフォルトの名無しさん:04/09/30 02:33:51
>>263
さっきまで練習にちょうどいいやって思ってやってましたが、技量が足りないような
気がしてきました。やっぱそちらの手段をとるべきですね。
ただ、そのノートはPentiumの233とかいう古いもので、しかも一月くらいに知り合いから
三万か五万で買ったものらしいです。

とりあえず明日にでもサポートに電話してみようと思います。
板違いになりますのでここらで失礼します。レスありがとうございました。

265 :デフォルトの名無しさん:04/09/30 04:08:56
Pentium233 noteで3〜5万は高いな…

266 :デフォルトの名無しさん:04/09/30 04:16:27
Windows 2000で
CreateToolhelp23Snapshot(TH32CS_SNAPMODULE,PID)
にいったきり、戻ってこない場合があるのですが
回避方法とかないでしょうか?

267 :デフォルトの名無しさん:04/09/30 09:17:21
23 じゃだめだろ、32 では?

っていうボケはともかく Win2k なら PSAPI を使った方がいいよ

268 :デフォルトの名無しさん:04/09/30 12:48:24
API学ぶのに一番適した参考書は何?


269 :デフォルトの名無しさん:04/09/30 12:52:27
msdン

270 :253:04/09/30 13:36:04
>>261
そうですね。勘違いでした。
ひとまず頑張ってみます。ありがとうございました。

271 :266:04/09/30 17:06:59
WinBugsに書いてあったのをコピペしたので、23になっていました。すみません。

PSAPI使うしかないんですかね?
kernelに実装されているので、動かないことがあるのが
なんとなく悔しくて質問してしまいました。

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

272 :デフォルトの名無しさん:04/09/30 21:37:37
>>247
ディスプレイのDCなら、どのウィンドウで取得したものでも
フォントの高さは同じなんですね。わかりました。ありがとうございました。
レス遅れてすいません。

273 :246:04/09/30 22:13:46
ただいま。
今試してみたのですが、サイズを文字の高さであるして並べると
押してみるとわかるのですが微妙に重なってました。
このコントロールをきちんと丁度表示でき、それでいて余らないサイズを
知る方法はありますか?おしえてくださいお願いします。


274 :デフォルトの名無しさん:04/09/30 22:38:51
>>273
ボックス部分やテキスト部分をどのくらいの大きさで描画するかは
チェックボックスの勝手だろうから決められないんじゃない?
将来のOSでまたデザインが変わるかもしれないよ。

もしも使う環境を限定していいんだったら、
フォントの高さにどれくらい加えればちょうどいいかを
実際に測って決め打ちしちゃえば?

275 :246:04/09/30 23:07:29
あぁ、これと限定できない問題ってことですね。
そうなるとフォントの高さにこれくらいなら大丈夫だろうという
値を加えて作るくらいしかないのですかね

どうもありがとうございました

276 :デフォルトの名無しさん:04/10/01 20:06:30
単に GetWindowRect() では駄目なの?

277 :デフォルトの名無しさん:04/10/01 20:32:30
oioi

278 :デフォルトの名無しさん:04/10/01 20:47:03
レッドカード?

279 :デフォルトの名無しさん:04/10/01 21:03:18
そのGetするRectはWhoがSetするのだ?

280 :デフォルトの名無しさん:04/10/01 21:13:26
Checkbox の高さは 8 Dialog Units。
スクリーン座標系に変換するには、適切なフォントが設定されたウィンドウでMapDialogRectを使う。
でよかったと思うけど。

ちなみに1行分の EDIT は 12 Dialog Units。


281 :デフォルトの名無しさん:04/10/02 00:00:13
>>280
そういったコントロールメトリクスの一覧とかって
どこかにまとめられていますか?

282 :デフォルトの名無しさん:04/10/02 00:10:10
>>280
それってGetDialogBaseUnitsが元になってない?←MSDNにはそこまで書いていない
全く高さが合わないんすけど。
俺の指定したDLGTEMPLATEの中身がおかしいのかな?
一応指定したフォントでSET_FONTが各コントロールに送られているのだけれども。

283 :282:04/10/02 00:15:04
あ。勘違いでした
忘れてくださいぃぃぃ

284 :デフォルトの名無しさん:04/10/02 00:15:38
別にイイジャン、それもひとつの解決方法。
俺がユーザーだったら文句言うけどw

285 :デフォルトの名無しさん:04/10/02 09:46:16
WindowsのAPIでしりとりしよう!

286 :デフォルトの名無しさん:04/10/02 09:54:10
いくぞ!
SetWindowRegion()

287 :デフォルトの名無しさん:04/10/02 10:08:44
別スレ立てた方がいいかな、これ

288 :デフォルトの名無しさん:04/10/02 10:12:41
>>286
否、ChangeServiceConfig2

289 :288:04/10/02 10:14:44
間違えて書き込んでしまった…


290 :デフォルトの名無しさん:04/10/02 12:50:06
あのぉ、gdi.dllとかのソースはどこかで見れないんでちゅかあ?

291 :デフォルトの名無しさん:04/10/02 12:52:40
>>290
マイクロソフトに訊け

292 :デフォルトの名無しさん:04/10/02 12:53:06
プログラマなら機械語ぐらい嫁

293 :デフォルトの名無しさん:04/10/02 12:53:50
リバースエンジニアリングでタイーホ

294 :デフォルトの名無しさん:04/10/02 12:57:56
>>291
( ´_ゝ`)ウフーン

295 :デフォルトの名無しさん:04/10/02 23:15:40
別スレッドからSendMessageしたところ
送られたスレッドが送り元スレッドでEnterされたクリティカルセクションの開放を待っていて
両スレッドだんまりになってしまいました。
PostMessageなら大丈夫ということで、
送りたかったメッセージWM_SETTEXTをpostしたのですがどうやら無視されてしまいます。
WM_SETTEXTはpostできないのでしょうか?

296 :デフォルトの名無しさん:04/10/02 23:47:04
>>295
MSDNでPostMessageの説明嫁。

> 非同期メッセージ関数(PostMessage、SendNotifyMessage、
> SendMessageCallback の各関数)を使って、WM_USER 未満の
> メッセージ(メッセージの値が 0x8000 未満)を送信する場合は、
> メッセージのパラメータでポインタを使うことはできません。

無視される理由がここにあるのかは別の問題だけど。

297 :デフォルトの名無しさん:04/10/03 06:58:50
SetSystemPowerStateで休止状態、或いはサスペンドにした後、
ある時刻に自動復帰するようににはどのようにすればいいのでしょうか?


298 :デフォルトの名無しさん:04/10/03 13:54:05
>>296
メッセージループは止めないようにしてSendMessageに変えました

299 :デフォルトの名無しさん:04/10/03 19:07:36
>>297
タスクをスケジュールする

300 :デフォルトの名無しさん:04/10/03 21:04:07
>>296
変な説明だな
動的に割り当てたメモリへのポインタも渡せない、と聞こえる

301 :デフォルトの名無しさん:04/10/03 21:39:16
SendMessageとSendNotifyMessageの違いって何?
もしかしてWM_NOTIFYって、SendNotifyMessageでしか送っちゃいけない?

302 :デフォルトの名無しさん:04/10/03 21:45:17
SendNotifyMessageは別スレッドにMessageを送るとすぐに制御が返る。

303 :デフォルトの名無しさん:04/10/03 21:47:11
>>302
つまりSendMessageとPostMessageの中間ってことかしら。

304 :デフォルトの名無しさん:04/10/03 21:59:13
>>303
そんな感じだわな

305 :デフォルトの名無しさん:04/10/04 00:40:43
クールバーにメニューバーを入れることって出来るんですか?

306 :デフォルトの名無しさん:04/10/04 01:11:09
メニューバーを移動したいと思うユーザーがどれほどいるでしょうか

307 :デフォルトの名無しさん:04/10/04 01:14:08
答えられないので論点をずらして逃げようとしてる人がいますね

308 :デフォルトの名無しさん:04/10/04 01:19:38
>>305
WTLのソースなり、猫 ttp://www.kumei.jp/c_lang/sdk4/sdk_311.htm なりを参考に。
基本的に面倒くさい。

309 :デフォルトの名無しさん:04/10/04 02:29:16
>>308
ありがとうございます。
「猫でも〜」に紹介されていたんですか、気が付きませんでした。

>>306
痛い所を突いてきますね・・・
ちょっとした画像処理ツールを作ろうと思ってWin32APIをいじくってるんですが、
ウィンドウのデザインばかりが気になってちっとも本題に入ることができません。
IEがこんなデザインにしたから気になるんですよ。
IEのバカッ!(><)

310 :デフォルトの名無しさん:04/10/04 02:47:51
IEやOfficeみたいなUIにしてくれっていうユーザも結構いるんだよね

311 :デフォルトの名無しさん:04/10/04 05:16:40
最近sdk始めてみたんですがこれどうでしょうか?
ttp://up.isp.2ch.net/up/0672f2c6c31e.zip

312 :デフォルトの名無しさん:04/10/04 06:04:49
↑ウィルス

313 :デフォルトの名無しさん:04/10/04 07:13:21
>>312


314 :デフォルトの名無しさん:04/10/04 08:05:30
通報しますた

315 :デフォルトの名無しさん:04/10/04 08:26:14
binutilsにあるreadelfみたいにPEオブジェクトファイルの
構造を分りやすい形で表示してくれるツールとかありますか?
MS純正のものでもなくてもいいです。フリーのツールでも。

316 :デフォルトの名無しさん:04/10/04 09:31:41
PEオブジェクトファイルの
構造を分りやすい形で
解説してくれたら作りますよ。

317 :デフォルトの名無しさん:04/10/04 09:43:39
自己レスです。
>link /dump /all hello.obj
これで見れました。

318 :デフォルトの名無しさん:04/10/04 11:58:09
>>282
GetDialogBaseUnit は、ウィンドウやフォント等指定する引数もなく常にシステムフォントの
メトリクスをもとにした値を返します。んで使い物にならない。MapDialogRectがお勧め。
もう解決したみたいだけど、読んでる人向けに補足ですた。

319 :デフォルトの名無しさん:04/10/04 13:06:04
>>309
ちょっとした物作るんでGUIはちまちまいじりたいんならVBやDelphiみたいな
RADツール使うといいんじゃないか?すくなくともDelphiならマウスでぽちぽち
配置していくつかプロパティいじればできたと思う。
全部RADでやってもいいし、コアはC++でやってもいい。

320 :デフォルトの名無しさん:04/10/04 23:41:26
突然質問で失礼します。
CDialogの継承クラスにおいて
ワーカスレッドからメインスレッドに15msecおきに
SendNotifyでユーザ定義メッセージを送って
関数を実行させようとしています
しかし、どうしてもランダムに
200msec前後の遅延が発生します
どうにか15msecぐらい間隔で目的の関数を
呼び出すことはできないでしょうか?
どうか、アドバイスをよろしくお願いします

321 :デフォルトの名無しさん:04/10/04 23:47:06
ウィンドウメッセージを使ってその精度が維持できると思っているのが間違い。
timeSetEvent() でもつかったら?

322 :デフォルトの名無しさん:04/10/05 00:23:21
初心者の質問に答えていただきあいがとうございました。

323 :デフォルトの名無しさん:04/10/05 06:14:14
モードレスで作成したプロパティシート(ページではない)を削除する
方法ってどうしたらいいのでしょう?
モードレスにしたプロパティシートのハンドルを引数にして
DestroyWindowでおこなうとWindows APIバイブル2のサンプルCD
(CHAPTER4のGETTABCT.MAK)ではなっているのですが、VC.NET2002
でおこなうと、終了処理の後にハングしてしまいます。
宜しくお願いします。

324 :デフォルトの名無しさん:04/10/05 09:22:47
ReadDirectoryChangesW を使って,
全ドライブのファイル操作の監視をしたい.

CreateFile で監視するディレクトリィのハンドルをとって,
わたしてやるんだが,例えば,cドライブを見たければ,
"c:\\" とか指定すればいいんだが,
全ドライブを指定することはできないだろうか?

GetLogicalDriveStrings で生きてるドライブ名をとって,
個別にそれぞれ CreateFile で開いて,
ReadDirectoryChangesW で監視するってのは
あほらしくてやってられない.

一発でできないだろうか?


325 :デフォルトの名無しさん:04/10/05 13:12:49
休止状態から指定時刻に復帰するプログラムを作りたいのですが、どのAPIを使用すれば良いのでしょうか?
アドバイスお願いします。

326 :デフォルトの名無しさん:04/10/05 13:21:07
>>324
盲目的に全ドライブ監視は危険。メディアの入れ替えで恐ろしいことが起こる。
やるなら個別でやるべき。


327 :デフォルトの名無しさん:04/10/05 15:07:05
他のアプリが最大化しているか、などの状態を取得するAPIありますか。

328 :デフォルトの名無しさん:04/10/05 15:20:41
>>324
漏れの6連装CDドライブをガチャガチャ言わすのはオマエか!

329 :デフォルトの名無しさん:04/10/05 15:24:28
>>327
ウィンドウを列挙して、ウィンドウが最大化しているかどうか調べれば良いかと

330 :デフォルトの名無しさん:04/10/05 15:52:33
ありがとうございます。
列挙と言うとEnumWindowとかですか?
具体的なキーワードを頂けるとありがたいです。

331 :デフォルトの名無しさん:04/10/05 16:11:16
半角を全角にするAPIはありませんか?

332 :デフォルトの名無しさん:04/10/05 16:25:54

void replace(char* text,char* key,char* rep)
{
  char *p,buf[256];
  p = strstr(text,key);

  while(p!=NULL){
    *p='\0';
    strcpy(buf,p+strlen(key));
    strcat(text,rep);
    strcat(text,buf);

    p = strstr(p+strlen(rep),key);
  }
}

[使い方]

replace(buf,"ア","ア");
replace(buf,"イ","イ");
replace(buf,"ウ","ウ");
replace(buf,"エ","エ");
replace(buf,"オ","オ");
replace(buf,"カ","カ");
replace(buf,"キ","キ");
replace(buf,"ク","ク");
replace(buf,"ケ","ケ");
replace(buf,"コ","コ");
replace(buf,"サ","サ");


333 :デフォルトの名無しさん:04/10/05 16:32:09
>>331
LCMapString

334 :デフォルトの名無しさん:04/10/05 16:59:50
>>333
さんくすくす。

335 :デフォルトの名無しさん:04/10/05 17:57:03
>>327
IsZoomed
IsIconic
GetWindowPlacement


336 :デフォルトの名無しさん:04/10/05 19:09:51
>>335
おおー、ありがとうございます

337 :デフォルトの名無しさん:04/10/05 19:39:23
>>321
マルチメディアタイマを使ってみたのですが
10000回に1度くらいの割合で
イベント10回くらいをスルーしちゃって
コールバック関数内で呼び出してある関数が
実行されてないようです
どうしてでしょう?
コールバック関数内の処理を軽くしても
改善されませんでした
原因に心当たりのある方
是非アドバイスをよろしくお願いします
実行されていないようです

338 :デフォルトの名無しさん:04/10/05 19:48:58
俺を最強のプログラマにするAPIはありませんか?

339 :デフォルトの名無しさん:04/10/05 20:59:45
TerminateProcess(>>338, 0)

340 : ◆FIcNi4f8js :04/10/05 21:32:19
>>337
必ずコールバックされると思っているのが間違い。
コールバック関数の中で前回呼ばれた時のシステム時間との時間差を計算して、
呼ばれなかった分の穴埋めを行う処理をしないといけない。

341 :デフォルトの名無しさん:04/10/05 21:33:20
ウィンドウの枠の上下左右の一箇所だけ枠なしとかにすることはできる
でしょうか?

342 : ◆FIcNi4f8js :04/10/05 21:34:53
SetRegion とか LayeredWindow とかを使うとできるよ。

343 :デフォルトの名無しさん:04/10/05 21:35:43
>>341
WM_NCHITTEST と WM_NCCALCRECT と WM_NCPAINT と WM_NCACTIVE あたりを
自前で実装すれば可能。

344 :デフォルトの名無しさん:04/10/05 21:46:10
>>337
1.コールバック関数から SendNotifyMessage を呼んでいる時、メインスレッドで
  直前のメッセージ処理が終わるまで待っている状態。
  メッセージを使わないようにする。
  表示の更新だけなら InvalidateRect のみとか、
  直接 dc 取得してワーカースレッドから描いてしまうとか。
2.GDI に対して描画要求を過剰に繰り返し行うと起こる現象。
  描画部分を小さくしたり、DrawDibDraw とか DirectDraw を使えば良くなるかも。


345 :デフォルトの名無しさん:04/10/05 21:47:49
>>340
コールバック関数内にグローバル変数の
イベント発生カウンタを持っているのですが
そのカウンタとコールバック関数内の
一部の関数が走った回数が一致しません
イベントカウンタの方が大きい値になります
従って、コールバック関数は呼ばれているのですが
その中の関数が走ってないように見えます
どうしてでしょうか?


346 :341:04/10/05 21:51:16
>>342,343
さんくすこ

347 :デフォルトの名無しさん:04/10/05 21:52:13
>>345
ファイルIOはそれなりに高速なので、ログでも書き出して動作を検証すべき。
あとコールバック処理中に再びコールバックが呼ばれるケースとかも考慮するべき。

348 :デフォルトの名無しさん:04/10/05 21:56:02
>>347
ありがとうございます

349 :デフォルトの名無しさん:04/10/06 10:04:35
VS.NETで作成できるWindowsインストーラーでサイレントインストール時に
インストール先をiniファイルなどやオプションなどに記述して
変更する方法はないものでしょうか。
宜しくお願いいたします。


350 :デフォルトの名無しさん:04/10/06 18:14:04
微妙にすれ違い

351 :デフォルトの名無しさん:04/10/06 22:29:01
IMEが変換を確定したタイミングはどうやって知る事ができますか

352 :デフォルトの名無しさん:04/10/06 23:27:57
>>351
WM_IME_COMPOSITION とかでどう?

353 :デフォルトの名無しさん:04/10/07 01:49:57
>>349
こちらへどうぞ。

インストーラー相談室
http://pc5.2ch.net/test/read.cgi/tech/997727326/

354 :デフォルトの名無しさん:04/10/07 02:52:23
「未解決の外部シンボル
"int __cdecl InitInstance(struct HINSTANCE__ *,int)"
(?InitInstance@@YAHPAUHINSTANCE__@@H@Z)
が関数 _WinMain@16 で参照されました。」
というエラーが出るのですが、何をリンクすればこのエラーがなくなるのでしょうか?
#includeしているのは
#include <windows.h>
#include <windowsx.h>
#include <winsock2.h>
#include <stdlib.h>
#include "resource.h"
なのですが、、、このエラーだけはどうすれば回避できるのか
わかる方がいましたら教えてください。

355 :デフォルトの名無しさん:04/10/07 09:02:19
>>354
リンクするライブラリが足りないとか?

356 :デフォルトの名無しさん:04/10/07 09:30:19
Win32 API の CreateThread を使うときに,
実際スレッドで動かす函数として
ある特定の型の函数への指示子をわたしてやるんだが,
この函数って大局じゃないとうまく動かない.

類の要員函数ではいけないの?


357 :デフォルトの名無しさん:04/10/07 09:44:36
氏ね

358 :デフォルトの名無しさん:04/10/07 09:51:06
>>354
恐らくなにかのサンプルをコンパイルしようとしてるかどっかからのコピペ
コードなんだと思うけどInitInstanceは普通自分で定義するんじゃないか?
ソース全部見ないと正確にはわかりません。

>>356
クラスメンバなら大丈夫。そうじゃないときは暗黙のうちにthisがわたされる
から無理。4番目のパラメータにthisわたしてクラスメンバからメンバ関数を
呼び出せばいいと思う。

359 :デフォルトの名無しさん:04/10/07 09:51:58
>>354
InitInstance というと AppWizard が自動生成するスケルトンに入っている関数か?
CreateThread に渡そうとして引数を変えたのにプロトタイプを直し忘れたとか、そーゆーオチか?

360 :デフォルトの名無しさん:04/10/07 10:05:10
354です。MAPI.Libをリンクするとそのエラーはなくなりましたが、
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\lib\MAPI.Lib
: fatal error LNK1136: ファイルが無効であるか、 または壊れています。
というエラーが出て結局ビルドできません。

361 :デフォルトの名無しさん:04/10/07 10:20:00
>>360
単に、別のリンクエラーが出て、そこで止まっただけ

362 :デフォルトの名無しさん:04/10/07 10:32:08
>>360
関係なさそうだな
そんなとこに InitInstance なんてねえもん

363 :デフォルトの名無しさん:04/10/07 15:35:15
該当スレが分からなかったので、ここで質問させてください。

すでに起動しているWindwosMediaPlayerを
外部からメッセージを送って操作する方法はありますか?
具体的には、あるタイミングで、WMPですでに選択されている
ファイルの再生をスタートさせるだけです。

よろしくお願いします。

364 :デフォルトの名無しさん:04/10/07 15:42:45
WindowsサービスからユーザがWindowsにログオン/ログオフするのを検知したいんだけど、
どうしたらいいんでしょうか?

とりあえずイベントログを定期的にチェックして検知とか考えました。
そんなめんどくさいことしないでもイベント通知してもらえたりするんでしょうか?

GINA使わないでやりたいです。

よろしくお願いします。


365 :デフォルトの名無しさん:04/10/07 16:47:53
函数と書きたいだけの厨房発見

366 :デフォルトの名無しさん:04/10/07 17:01:01
厨房と書きたいだけの(rya
(ryaと書きたいだけの
と書きたいだけの

367 :デフォルトの名無しさん:04/10/07 19:38:41
>>354
InitInstance は Windows API ではないので、中身は自分で書きましょう。
ウィンドウクラスの登録用に、習慣的にその名前を使っていただけ。

368 :デフォルトの名無しさん:04/10/07 19:58:35
>>363
WM_COMMAND送りつければいいんじゃ?

369 :デフォルトの名無しさん:04/10/07 20:21:04
>>363
MicrosoftR Windows Media? Player 7 SDK
Windows Media Player コントロール Version 6.4
ただし VBアプリから起動させる場合


370 :デフォルトの名無しさん:04/10/07 22:42:08
>>354
int WNAPI WinMain(〜)
が書いてある行より手前に
int InitInstance(HINSTANCE, int);
と書いてみろ。

371 :デフォルトの名無しさん:04/10/07 23:01:34
WNAPI

372 :デフォルトの名無しさん:04/10/08 05:30:38
GUIDを文字列にしてくれるAPIはありませんか?
自分で作ってもいいのですが、標準で用意されているような気がしてなりません。

373 :デフォルトの名無しさん:04/10/08 06:07:40
StringFromGUID2

374 :デフォルトの名無しさん:04/10/08 06:33:56
猫でもわかるの122章のプログラムを実行したのですが、次のような問題が発生します。
・DLLのロードに失敗する。
・hMyLibをstaticにしないと強制終了する。
・WM_PAINTメッセージが複数回ディスパッチされる。
元のソースコードは、構文的に間違っていないと思います。
対処法が全く分からず、困っています。どうすれば良いのでしょうか?
OSはWinXPHome、コンパイラはBCCを使用しています。

375 :デフォルトの名無しさん:04/10/08 07:55:48
リストビューについて質問です。
カラムの挿入でiColに好きな値を設定できないようなのです。
iOrderで順番も入れ替わるし、iColとサブアイテム番号の対応は自分で管理しないといけないのでしょうか?

376 :デフォルトの名無しさん:04/10/08 08:57:21
>>374

もうちょっと詳細に教えてくれ。

>・DLLのロードに失敗する。
LoadLibraryの後でGetLastErrorを呼んでエラーコードを調べる。

>・hMyLibをstaticにしないと強制終了する。
できればどの行で強制終了するのかデバッガ(BCCじゃ無理か?)で調べる。

>・WM_PAINTメッセージが複数回ディスパッチされる。
これは多分仕様。(違うかも)

377 :374:04/10/08 09:39:31
>>376
エラーコードを調べようとして、次のようにソースコードを書き換えたのですが、強制終了します。
case WM_PAINT:
hMyLib = LoadLibrary( "dll04.DLL");
wsprintf(str,"%d",GetLastError());
MessageBox(hWnd,str,"",MB_OK);
書き方に問題があれば、指摘して下さい。(^_^;)

378 :デフォルトの名無しさん:04/10/08 11:20:23
>>377
DLLの方に問題があったりしないか?

379 :374:04/10/08 11:37:58
MessageBox(NULL,"","",MB_OK);をWM_PAINTメッセージの処理部分の所々に挿入しながら検証していたのですが、
コンパイルを繰り返す内に、メッセージボックスが表示されなくなり、強制終了するようになりました。
最初は、画面の右下の方に表示されていました。中央に表示されないのが変だと思っていたのですが...。
また、メッセージボックスが表示される時に鳴る警告音が立て続けに20回くらい鳴ります。
そのため、WM_PAINTメッセージが複数回ディスパッチされていると判断しました。
>>378 実行ファイルと同じ場所に置いてあるので、問題ないと思うのですが...。

380 :デフォルトの名無しさん:04/10/08 11:44:14
>>379
WM_PAINTハンドラ→MessageBox→モーダルループ→無効領域がクリアされてない→WM_PAINT発生→WM_PAINTハンドラ→・・・
で無限ループに陥ってるかも。

381 :デフォルトの名無しさん:04/10/08 11:45:08
それはWM_PAINT処理にMessageBoxなんか入れたことが原因だろ。

382 :デフォルトの名無しさん:04/10/08 11:49:19
つか、WM_PAINTでメッセージボックス使うなよ・・・

OuputDebugStringでも使っとけ

デバッグ情報が表示できないなら、テキトーにフリーソフト使うと吉
ttp://search.vector.co.jp/search?query=OutputDebugString

383 :374:04/10/08 12:27:24
>>380
>>381
>>382
ありがとうございます。Turbo Debuggerをインストールしているのですが、使い方が分からないので困っていました。(^_^;)
紹介して頂いたデバッガを利用してみたいと思います。

384 :382:04/10/08 13:48:27
>>383
勘違いされてるような気がしないでもないので、
補足しておくと、
OuputDebugStringは文字列をデバッグ出力に送るAPI

リンク先のは、OuputDebugStringの出力を表示するツール

ちゃんとしたデバッガを使ってるなら、
それの使い方を覚えた方がいいと思われ

385 :374:04/10/08 14:56:43
>>384
いろいろ教えて頂きありがとうございます。Windowsプログラミングで簡単に文字列を出力する方法を知らなかったので、
仕方なくMessageBox関数を使用していました。OuputDebugString関数を使えば良いのですね。
>>379
無限ループになるのは当然ですね。つまらないミスでした。反省しています。(^_^;)
>>376
GetLastError関数の戻り値は0でした。やはり、DLLのロードに失敗しているようです。


386 :374:04/10/08 15:04:55
> >>379
> 無限ループになるのは当然ですね。つまらないミスでした。反省しています。(^_^;)
すみません、リンク先を間違えました。>>379ではなく>>380です。(^_^;)


387 :デフォルトの名無しさん:04/10/08 15:07:20
MessageBoxをループ内に配置するとエライ事になる。

ループ離脱条件を戻り値IDOK以外にしていたとする。
DestoryWindow()が親に送られたら地獄。
応答不能・シャットダウン不能となる。
DestoryWindow()APIがダイアログをIDOKで閉じるからである。
戻り値でループ離脱をする場合、十分注意しよう。

388 :デフォルトの名無しさん:04/10/08 15:48:47
>>385
winerror.hを見れば分かるが、
GetLastErrorの戻り値が0ということは直前のAPIは成功している

http://msdn.microsoft.com/library/en-us/debug/base/system_error_codes__0-499_.asp

389 :デフォルトの名無しさん:04/10/08 15:57:57
質問です。
階層構造が複雑で、子孫ウインドウが多数存在するトップレベルウィンドウがあります。
ウィンドウを非アクティブからアクティブにしたときに、そのウィンドウが
非アクティブになる前に持っていたキーボードフォーカスの位置を元に戻したいのですが、
WM_ACTIVATE(WA_INACTIVE) が送られてくるタイミングで GetFocus() してフォーカスを保存しようとしても、
ウィンドウを最小化したときなどはすでにフォーカスが失われているらしく、うまくいきません。

現在はすべてのウィンドウプロシージャで子ウィンドウのフォーカスの移動を監視し、それを
親ウィンドウに次々と通知することで実現しているのですが、あまりスマートとはいえません。
もし、もっとウマーな方法があればご教示ください。

390 :374:04/10/08 16:30:34
>>388
すみません、勘違いしていました。発言を撤回します。(^_^;)
>>384
OuputDebugString関数を使用してみたのですが、
"未定義の関数 'OuputDebugString' を呼び出した"
というエラーメッセージが表示されます。windows.hはインクルードしてあるのですが、
別のヘッダファイルをインクルードする必要があるのでしょうか?


391 :デフォルトの名無しさん:04/10/08 16:31:59
>>390
winbase.h

392 :デフォルトの名無しさん:04/10/08 16:45:20
OutputDebugStringだろ。

393 :382:04/10/08 16:52:10
漏れがタイポしたもより・・・欝だ詩嚢

394 :デフォルトの名無しさん:04/10/08 16:55:26
>>390
つーかこういう時ってまずタイポ疑えよ。
エラー起こるたびに訊いてるようじゃ進歩ねーぞ。

395 :374:04/10/08 17:03:12
>>392
>>384のレスの関数名をそのまま使用していたので、スペルのミスに気が付きませんでした。
指摘して頂いてありがとうございます。(^_^;)

396 :デフォルトの名無しさん:04/10/08 17:46:28
>>374
悪いことは言わん、これ入れとけ。
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/home.htm

397 :デフォルトの名無しさん:04/10/08 17:48:32
っていうか、BCCだとTestFuncではなく_TestFuncになるからじゃね?

398 :デフォルトの名無しさん:04/10/08 19:24:17
[はい][いいえ]の2つのボタンがあって、
右上の[×](クローズボタン)も有効なメッセージボックスって、
「MessageBox()系のAPIでは作れない」ってことでよろしいでしょうか…?

399 :374:04/10/08 19:42:30
DebugTracerというツールを使ってOutputDebugStringの文字列を表示することができるようにました。
しかし、エラーコードは6(無効なハンドル)でした。環境に問題があるのでしょうか?
>>396
SDKをアップデートする必要があるのでしょうか?WinXPHomeSP1で作業しているのですが、
SP2に移行した方が良いのでしょうか?

400 :デフォルトの名無しさん:04/10/08 20:01:07
>>399
hMyLibがNULLかどうかも判断せずに、GetLastErrorしてOutputDebugStringしてないか?

401 :デフォルトの名無しさん:04/10/08 20:21:55
これだからタダコンパイラ使ってるような奴はイヤなんだよ!

402 :デフォルトの名無しさん:04/10/08 20:50:07
>>398
作れません。
Xで閉じてキャンセルなら「はい/いいえ/キャンセル」の形式にしないとユーザわけわかんなくなるし・・・

403 :398:04/10/08 21:22:31
>>402
どうもありがとうございます。
> Xで閉じてキャンセルなら「はい/いいえ/キャンセル」の形式にしないとユーザわけわかんなくなるし・・・
確かにおっしゃる通りだと思います。
ただ、例えばデスクトップ上などでファイルを右クリック⇒削除を選ぶと、
>>398 のようなダイアログボックスが表示されるので、可能性がないわけではないかな…と思いまして。

404 :374:04/10/08 21:41:00
>>399
hMyLibは、NULL(=0)ではなく、012B0000という値を持っていました。LoadLibraryは失敗していなかったようです。
しかし、エラーコードをチェックすると、その値が無効であると言われてしまいます。


405 :397:04/10/08 21:46:57
>>404
ほとんどの場合、関数が成功した場合、SetLastErrorされないので、
GetLastErrorしても意味ない。

つーか、GetProcAddressのTestFuncを_TestFuncに書き換えれば、うまくいくはず。

406 :374:04/10/08 22:04:55
>>405
ありがとうございます。SetLastErrorとGetLastErrorの働きがよく分かりました。
指示通りに書き換えてみたのですが、うまくいきません。


407 :デフォルトの名無しさん:04/10/08 22:13:01
ここはお前の日(AAともにry

408 :デフォルトの名無しさん:04/10/08 22:18:38
黙ってりゃ報告くらいしろと騒ぐし

409 :デフォルトの名無しさん:04/10/08 22:24:37
グローバルフックを用いてキー入力をフックして、
フックプロシージャの中で、目的のウィンドウにキー入力を送信したいです。

どういう風に目的のウィンドウのウィンドウハンドルを取得するのがスマート、
というか一般的なんでしょうか



410 :ぬるぽ:04/10/08 22:25:46
必死だな

411 :デフォルトの名無しさん:04/10/08 22:40:56
>>409
目的のウィンドウが自分で作ってるウィンドウなら、共有メモリ領域にハンドルを書いておく。
そうでないなら、EnumWindow とかでゴリゴリ探すとか、Spy++ で手動で探したときと同じ
方法で探す。

412 :デフォルトの名無しさん:04/10/08 22:57:51
>>409
目的のウィンドウのタイトルotウィンドウクラス名がわかってるならFindWindowも

413 :409:04/10/09 00:04:29
>>411
>>412
ありがとうございます

自前のウィンドウに送りたいだけなので、
色々やってみます

414 :デフォルトの名無しさん:04/10/09 00:11:51
お兄ちゃんお願い!>>389を助けて!

415 :389:04/10/09 00:32:10
>>414
あきらめかけていたのですが、どうもありがとうございます。
でも、レスをいただけないということは、いい方法がないのかも・・・

416 :デフォルトの名無しさん:04/10/09 00:51:44
>親ウィンドウに次々と通知することで実現しているのですが、あまりスマートとはいえません。

なんでスマートといえないんだ?
君のプログラムは親関数に次々と return することで実現するより
グローバル変数のほうがスマートといえるのか?
jmp_buf みたいに親ウインドウのハンドルを次々に渡しておいて
通知はそのハンドルで一挙にって手もあるが、俺は推奨しないなあ・・・

417 :デフォルトの名無しさん:04/10/09 00:54:41
もしかして GetWindowLong / SetWindowLong を知らないのか?

418 :デフォルトの名無しさん:04/10/09 01:00:13
>>417
しっているとなにがどうなるんだ?

419 :デフォルトの名無しさん:04/10/09 01:14:49
説明するのだるいんでキーワードだけ出しとく
WNDCLASS::cbWndExtra
GWL_USERDATA
ポインタをキャスト

420 :デフォルトの名無しさん:04/10/09 01:17:34
やっぱりただのアホだったか

421 :デフォルトの名無しさん:04/10/09 01:25:53
痛いネタいっぱつお見舞いするか

422 :デフォルトの名無しさん:04/10/09 01:31:29
>>419
全然スマートじゃない気が

423 :デフォルトの名無しさん:04/10/09 01:35:23
誰の発言かわからなくなるまでしばらく沈黙

424 :デフォルトの名無しさん:04/10/09 02:23:55
sageてないのは二人しかいないような。

425 :389:04/10/09 02:43:49
お返事が遅くなりました。レスをくださった皆さん、どうもありがとうございます。

>>416
> なんでスマートといえないんだ?
すみません、「スマートといえない」という表現には語弊がありました。
ただ、取得のタイミングさえ合っていれば GetFocus() で一発で済むところを
わざわざ次々と橋渡ししなければならない構造にひっかかるものはありました。
GetFocus() を実行するのにいいタイミングで送られてくるようなウィンドウ
メッセージが存在するということが、実は一番期待していた答えだったのです。

> グローバル変数のほうがスマートといえるのか?
いえ、私もできるだけグローバル変数は使わないことにしていますので、
グローバル変数を使うことをためらった結果、あのような構造になったわけです。

>>417 >>419
> もしかして GetWindowLong / SetWindowLong を知らないのか?
私へのレスでしょうか? 普通に使っていますが、この場合はそれほど
有用ではないような気が…。私へのレスでなかったらすみません。

426 :デフォルトの名無しさん:04/10/09 03:01:13
>>425
いろんなフレームワークで行っているPreTranslateMessageみたいなことやれば?

427 :デフォルトの名無しさん:04/10/09 03:29:42
MFCのフレームワークでさえ、結構面倒な機構を準備してフォーカスの
復元をしてるから、一発で解決するようなメッセージは無いと思う。


428 :374:04/10/09 06:02:54
> ・hMyLibをstaticにしないと強制終了する。
> ・WM_PAINTメッセージが複数回ディスパッチされる。
WM_PAINTハンドラにMessageBoxを置いたことが原因でした。(^_^;)
> ・DLLのロードに失敗する。
GetProcAddressに失敗していました。エラーコードは127(指定されたプロシージャが見つからない)です。
実は123章のプログラムでもファイルマッピングオブジェクトの読み出しに失敗します。
名前を指定する方法に問題があるのでしょうか?VCとBCCの仕様の違いでしょうか?>>405

429 :デフォルトの名無しさん:04/10/09 06:12:47
>>428
DLLは自作か?その際に名前のエクスポートはしてるのか?
エラーコードが出てるんだからまずその内容を調べろよ。

430 :デフォルトの名無しさん:04/10/09 07:18:54
回答者のレベル低すぎ・・・。

DepedencyWalkerとかでdll内部の関数名を確認しろ。
ま、DepedencyWalkerがなくてもdllの中身が見れるはずだが。
VCでビルドした場合だとC++のデフォで関数名が変わるのは常識だぞ。
エクスポート関数名に@とか混じってないか?

431 :デフォルトの名無しさん:04/10/09 07:38:54
>>430
374を読んでる?
アンタもレベル低すぎですから!残念!

432 :デフォルトの名無しさん:04/10/09 07:59:32
bccのデフォルトの呼び出し規約は__fastcallのはずなので

DLLの方で
#define EXPORT extern "C" __declspec(dllexport) __stdcall
EXEの方は
typedef __stdcall int (*PTESTFUNC)(int, int);

433 :デフォルトの名無しさん:04/10/09 08:08:45
>>431
読解力ないな。誰も話をVCだけに限定してないだろ。
それともBCはdllの規格をMSの規則に逆らうわけか?

434 :デフォルトの名無しさん:04/10/09 08:39:56
質問者はBCC使ってるのにVCの話したり、
CでのコーディングなのにC++で関数名が変わるのは常識とか言ったり
他人をレベル低いとか言ってるのに
自分もトンチンカンなレスしてるからだろ…

>それともBCはdllの規格をMSの規則に逆らうわけか?
関数名の問題なんでDLLの規格は関係ないでしょ。

435 :374:04/10/09 08:44:08
>>432
やはり、うまくいきません。
元のソースコードはVCを基準に書かれているので、BCCとの仕様の違いが明確になれば、
対処できると思うのですが...。(^_^;)

436 :デフォルトの名無しさん:04/10/09 09:03:18
もうVC買うかフリー版のVC使うかBCCでのサンプルを見つけろ。

437 :デフォルトの名無しさん:04/10/09 09:12:03
>>374
ちゃんと調べたのか?関数名。
どうも君はPGに向いてない気がする。

↓Dynamic Dependency Walker(フリー)
ttp://www.vector.co.jp/soft/win95/util/se232578.html

438 :デフォルトの名無しさん:04/10/09 09:16:33
>>434
>Cでのコーディングなのに
そんなこと書いてあった?

439 :デフォルトの名無しさん:04/10/09 09:26:57
>>434
君は>>374の足りない記述に関して通常の脳内補完をしているようだ。
それは通常レベルのプログラマ相手なら正しいだろうが、
初心者相手の場合はそうではない。
多くの場合、ありとあらゆる疑いの眼差しで初心者を見守ってあげる必要があるのだ。

440 :デフォルトの名無しさん:04/10/09 09:31:27
>>438
DLLのソースにextern "C"が有るから
C++の名前変形は関係ないでしょ。

441 :デフォルトの名無しさん:04/10/09 09:34:46
>それともBCはdllの規格をMSの規則に逆らうわけか?

parse error

442 :デフォルトの名無しさん:04/10/09 09:36:18
つーかもう初心者スレでやってよ。

443 :デフォルトの名無しさん:04/10/09 09:53:30
QueryPerformanceCounter、QueryPerformanceFrequency
この2つのAPIは最近のPCでエラーが起こりますか?
たとえば、CPUによって動作しないとかありますか?

444 :374:04/10/09 10:06:25
>>437
紹介して頂いたツールを利用してDLLをリストアップしたのですが、ロードしたDLLは見当たりません。
しかし、LoadLibraryには成功しています。ロードしたDLLと、それに含まれている関数の名前も、
呼出元と呼出先で相違がないことを確認しました。

445 :デフォルトの名無しさん:04/10/09 10:40:03
今なら言える
心の底から氏ねと

446 :デフォルトの名無しさん:04/10/09 10:54:48
>>444
Z:\>dumpbin /exports dll04.dll
Microsoft (R) COFF/PE Dumper Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.


Dump of file dll04.dll

File Type: DLL

Section contains the following exports for dll04.dll

00000000 characteristics
0 time date stamp Thu Jan 01 09:00:00 1970
0.00 version
1 ordinal base
2 number of functions
2 number of names

ordinal hint RVA name

1 0 00001238 _TestFunc
2 1 00009158 ___CPPdebugHook
(ry

447 :デフォルトの名無しさん:04/10/09 10:58:33
まず>>374は勉強が足りないな。
レス受けた内容についてもろくに解かってないようだし、
1日くらい試行錯誤してから書き込んだほうがいい。

448 :デフォルトの名無しさん:04/10/09 11:27:36
>>443
キミの知り合いが突然、「このAPIは最近のPCでエラーが起こりますか?
CPUによって動作しないとかありますか?」って質問してきたらどうする?
返答に困るデショ。

449 :デフォルトの名無しさん:04/10/09 12:09:55
>>448
高解像度カウンタは古いCPUだと使えないわけだが

>>443
IntelならPentium以降(P54なら確実、P5はしらん)
AMDは少なくともK5はサポートされてたはず
Cyrix系は不明

450 :!= 443:04/10/09 12:38:49
>443 関連で興味あって調べてたら、あんま関係ないけどこんなの見つけた。
ttp://www.flipcode.com/cgi-bin/msg.cgi?showThread=00000894&forum=general&id=-1

> Joacim: どうしてWin2kマシンでは QueryPerformaceCounter の後ろ24ビットを wrap するの?
> kewldude: くそ、それ知らずに実験してた。Win2kでもフリーズするアプリがあってよ。。。
> treething: 漏れが知る限り、全部のマシンで wrap してるぜ?でも何が問題なんだ?
> kewldude: ああ、でも普通は64ビットを wrap してて、24ビットじゃねーはずなんだよ。

これはどういう問題? wrap ってどういう意味で使ってるの?

451 :デフォルトの名無しさん:04/10/09 12:56:06
脳内HDDと脳内メモリの容量が小さい漏れにはプログラミングは不可能ですか?
電話の相手の苗字とかすぐ忘れるんだよ。

452 :389:04/10/09 12:59:09
ずいぶん上の方に流れてしまいましたが・・・

>>426
> フレームワークで行っているPreTranslateMessageみたいなことやれば?
どうもありがとうございます。ただ、PreTranslateMessage の機構を
導入するとなると、私のイメージするものからは遠ざかってしまいそうです。

>>427
> MFCのフレームワークでさえ、結構面倒な機構を準備してフォーカスの
> 復元をしてるから、一発で解決するようなメッセージは無いと思う。
なるほど・・・MFCではほとんど組んだことがなかったので気が付きませんでした。
あきらめて今までの方法でいこうと思います。どうもありがとうございました。

453 :デフォルトの名無しさん:04/10/09 13:39:33
>>444
もう1度122章のプログラムを作り直せ。
もとのソースは見るな。どこも書き換えるな。

454 :デフォルトの名無しさん:04/10/09 13:55:34
.defファイルちゃんと書いてるのかな

455 :デフォルトの名無しさん:04/10/09 13:57:26
>>450
output = (input)%size
って感じ。
たとえば文章を80文字で wrap すると、81文字目は次の行の先頭に表示される。

456 :デフォルトの名無しさん:04/10/09 14:12:13
>>454
__declspec(dllexport) してるんだからそんな必要はない。
ラベル名に対する、ある思い込みが邪魔をしているだけだ。

457 :デフォルトの名無しさん:04/10/09 14:35:06
>>456
はぁ?嘘もいい加減にしろヴォケ
defファイルきちんと書かんと@付いた変な名前になって
GetProcAddressで引けなくなるぞ


458 :デフォルトの名無しさん:04/10/09 14:41:07
extern "C"が要るんだっけ?

でもそうすると他の言語から呼び出せなくなるね

459 :デフォルトの名無しさん:04/10/09 14:46:45
>>457
装飾名になるかどうかはエクスポートしたかどうかとは無関係

460 :デフォルトの名無しさん:04/10/09 14:50:05
↑何言ってるのかワカンネ
ほら、チョン学校で日本語やり直さないと

461 :デフォルトの名無しさん:04/10/09 14:53:32
>>458
ha?

462 :デフォルトの名無しさん:04/10/09 14:57:34
>>460
だいたい「変な名前」なんて用語ねえんだよ
おおかた MSU 逝く金もねえんだろ (プゲラ

463 :デフォルトの名無しさん:04/10/09 14:58:50
MSDN も全部デッドコピーか

464 :デフォルトの名無しさん:04/10/09 15:00:54
>>459
装飾名になるかどうかはエクスポートしたかどうかとは無関係だから、
defファイルを書いておかないと装飾名つきのままエクスポートされてしまうと言っているのだと思うが。

465 :デフォルトの名無しさん:04/10/09 15:04:55
>>464
なるほど、アフォケテーイでよかったんだな

466 :デフォルトの名無しさん:04/10/09 15:15:26
質問者の分際で情報小出しする馬鹿は、もうスルーしろ。


・・・・・・・・・・・・・・dllネタ終了・・・・・・・・・・・・・・・・・・・・

467 :デフォルトの名無しさん:04/10/09 15:17:06
・・・・・・・・・・・・・・dllネタ再開・・・・・・・・・・・・・・・・・・・・

回答者づらをしてみたかっただけのど初心者が1人いるようだがスルーよろ

468 :デフォルトの名無しさん:04/10/09 15:20:51
>>449
質問者は「最近のPC」と書いてるデショ。
質問者はもう少し情報を提供してくれないと返答できませんョ。


469 :デフォルトの名無しさん:04/10/09 15:39:52
もう少しって、どのくらいか基準でもあるのか?
詳しく書かれすぎても連投荒らしみたいになるぞ

どんな情報が必要かは回答者ごとに異なると思う

470 :デフォルトの名無しさん:04/10/09 16:00:00
核心の部分を故意に記述しない質問者も荒らしだろ。
しかも、他人を巻き込み無駄レスを大量発生させる。

471 :デフォルトの名無しさん:04/10/09 16:17:10
いっぱつサックリ答えられる必要ないじゃん
技術的な話を楽しみに来てる人だっているわけで・・・

472 :デフォルトの名無しさん:04/10/09 16:46:47
RegisterClassがめんどいんですけど。
最近では既存のコントロール乗っ取ってサブクラス化して
自分色に染めるのが好きです。
そういう用途に都合の良い既存クラスってありませんか?

473 :デフォルトの名無しさん:04/10/09 17:10:42
腐女子は何でも801の対象にできる

474 :デフォルトの名無しさん:04/10/09 17:22:26
>>472
static

475 :デフォルトの名無しさん:04/10/09 18:01:14
>>473
俺もか?

476 :デフォルトの名無しさん:04/10/09 19:32:41
>>475
もちろん

477 :デフォルトの名無しさん:04/10/09 20:00:22
GDI+でダブルバッファリング使いたいんですけど、
C++の場合はどのようにすれば良いんでしょうか?
C#だと
Image img = new Bitmap(width , height);
Graphics buf = Graphics.FromImage(img);
として、バッファに書き込み最後に
g.DrawImage(img , 0 , 0);
とすれば良いと、分かったんですが
C++になると分かりません。
どなたか教えてください

478 :デフォルトの名無しさん:04/10/09 20:33:59
>>477
同じやり方ででけへんかい?

479 :374:04/10/09 20:37:13
DLLのロードに成功しました。やはり、VCとBCCの仕様の違いが原因だったようです。

borland C++Builder での DLL の構築方法
ttp://www.borland.co.jp/qanda/cbuilder/c0003194.html

大変ご迷惑をおかけして、申し訳ありませんでした。しかし、なぜこのような違いがあるのでしょうか?


480 :デフォルトの名無しさん:04/10/09 20:46:54
>>479
BCCちゅーからコマンドラインかと思たーよ

481 :374:04/10/09 20:54:53
>>480
BCC Developerを使用しています。


482 :デフォルトの名無しさん:04/10/09 20:59:37
>>479
何の仕様が違うと思ってるのかは知らないが、
そこに書かれている内容はVC++の場合となんら違いない。

483 :477:04/10/09 21:09:48
>>478
C++の場合
Image img = new Bitmap(width , height);
の部分でどう書けばいいか分からないんです。。。

484 :デフォルトの名無しさん:04/10/09 21:24:46
>>479
それってGetProcAddressを使った明示的ロードには見えないがそれでいいのか?

485 :デフォルトの名無しさん:04/10/09 22:14:02
>>483
ここらへんみて勉強しな
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocaddress.asp

486 :485:04/10/09 22:17:44
間違えた w
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/GDIPlus/usingGDIPlus.asp

487 :374:04/10/09 22:20:18
>>484
次のように書き換えました。

extern "C" __declspec(dllexport) int TestFunc( int a, int b )

extern "C" int WINAPI __declspec(dllexport) TestFunc( int a, int b )

このように書き換えないと、DLLのロードに失敗します。


488 :デフォルトの名無しさん:04/10/09 22:28:04
もういいじゃん。飽きた。

489 :デフォルトの名無しさん:04/10/09 22:30:16
まんぐりがえしを抑制するだけだろ

490 :デフォルトの名無しさん:04/10/09 23:00:42
>>489
ワラタ

491 :デフォルトの名無しさん:04/10/09 23:12:07
>>435で駄目で>>487はいけるのか。ようわからん環境なんだな。

492 :デフォルトの名無しさん:04/10/09 23:23:00
荒れるからageないで

493 :デフォルトの名無しさん:04/10/09 23:30:48
うっさい

494 :初心者:04/10/09 23:53:50
ウィンドウのサイズ変更したら再描画するようにするにはどうすればいいか教えてください

495 :デフォルトの名無しさん:04/10/09 23:56:15
CS_HREDRAW, CS_VREDRAW

496 :初心者:04/10/10 00:19:05
>>495
ありがとうございます。あとWM_PAINTメッセージじゃなくて
ウィンドウのサイズを変更したら送られるメッセージとかってありますか?

497 :デフォルトの名無しさん:04/10/10 00:21:24
>>496
WM_SIZE
っていうかMSDN読め

498 :デフォルトの名無しさん:04/10/10 00:24:58
スパれよ小僧が

499 :デフォルトの名無しさん:04/10/10 00:28:38
スパれよ小僧が
http://www.nissinfoods.co.jp/news/news_release.html?nid=780

500 :デフォルトの名無しさん:04/10/10 00:42:26
WM_SIZINGも調べとけ

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
そんな仕様を呑むのがどうかしている。

751 :デフォルトの名無しさん:04/10/19 15:57:20
EDIT*100(/2か?)は止めたほうがいいな。
リソースに対して優しくない。UIとしても。
それはそれとして、表計算ソフトからジェネレートできるようにすりゃいいだけな気もするが

752 :デフォルトの名無しさん:04/10/19 15:59:34
>>744
リソーススクリプトを手動で修正するとか。


753 :デフォルトの名無しさん:04/10/19 16:20:58
DialogBoxIndirectとかCreateDialogIndirectを使うとか

754 :デフォルトの名無しさん:04/10/19 20:55:09
リソースエディタを外部から操作するプログラムを作れ。

755 :デフォルトの名無しさん:04/10/19 21:23:31
リソースを外部から操作するプログラムならいくらでもあるが……。

756 :デフォルトの名無しさん:04/10/19 22:18:48
一枚のダイアログに載せられるコントロールの数って上限無かったか?
昔、VBで自滅してた奴がいたがw
128個位でダイアログが出なくなったような。
Win32 は関係ないのかな?

あと、100個もコントロール載せるとダイアログが出てくるまで時間が掛かる、
ウィンドウの再描画にも時間が掛かるよ。

自分で表を書いておいて、指定のセルを編集時にテキストボックスを
セルのサイズで作って出すのが、綺麗だと思う。
Excel とかがやってる方法だけど…
ちと工数が掛かりすぎるかな?


757 :デフォルトの名無しさん:04/10/19 22:46:22
NT系でもリソースは無限じゃないしね。


758 :デフォルトの名無しさん:04/10/20 00:40:14
DHTMLダイアログ使えよ、エディットの100個や200個屁でもない

759 :デフォルトの名無しさん:04/10/20 00:41:15
またバカが一人

760 :デフォルトの名無しさん:04/10/20 04:22:17
世界の真ん中に立つ塔は楽園へ続いているという

そして、またバカが一人

761 :デフォルトの名無しさん:04/10/20 08:26:31
こんにちは。

リソースのビットマップを表示させたいのですが、
http://www.kumei.ne.jp/c_lang/sdk/sdk_26.htm
http://wisdom.sakura.ne.jp/system/winapi/win32/win104.html
↑で紹介されてる手順通りに書いても、LoadBitmap()がNULLを返してきて描画してくれません。
ICONリソースなどは同じ手法で読み込んでくれるのですが…。
なお、実行ファイルのサイズから正常に埋め込まれてるのは確かのようです。

環境は windows2KSP4 + Visual C++.NET std です。
初歩的な質問かもしれませんが、宜しくお願い致します。

762 :デフォルトの名無しさん:04/10/20 09:04:36
>>761
とりあえず引数の確認とGetLastError()

763 :デフォルトの名無しさん:04/10/20 09:13:38
>>761
ついでにResourceHackerとかで実行ファイルのリソース確認しとき。
念のため。

764 :デフォルトの名無しさん:04/10/20 09:16:05
>>761
∀・)っMAKEINTRESOURCE( MYBMP );

765 :デフォルトの名無しさん:04/10/20 10:44:39
Win32 API入門
http://black.sakura.ne.jp/~third/system/winapi/win.html

ここ行けなくなってしまってるね。
結構利用してたのに残念。

766 :デフォルトの名無しさん:04/10/20 10:53:35
>>765
ttp://wisdom.sakura.ne.jp/

ここに移転したって書いてありますけど…

767 :デフォルトの名無しさん:04/10/20 14:20:56
CDドライヴに空の状態から CD が挿入されたことを検知するための
メッセージというのはないのですか?


768 :デフォルトの名無しさん:04/10/20 16:00:16
文字の大きさを変更する関数ってありますでそうか。
すみません。初歩的な質問で。
色はSetTextColorで変更できたのですが・・・。

769 :デフォルトの名無しさん:04/10/20 16:07:11
あります。

770 :デフォルトの名無しさん:04/10/20 16:07:58
うそです。ありません。

771 :デフォルトの名無しさん:04/10/20 16:36:16
CreateFont(Indirect)の時にしか文字の大きさは選べない。

772 :デフォルトの名無しさん:04/10/20 16:47:15
>>768
メモリデバイスコンテキストに書いて、ストレッチブリットするのじゃだめ?

773 :デフォルトの名無しさん:04/10/20 17:31:18
>>768
http://www.kumei.ne.jp/c_lang/sdk/sdk_27.htm

774 :デフォルトの名無しさん:04/10/20 18:22:39
>>772
書いてからStretchしたらギザギザになんね?

775 :デフォルトの名無しさん:04/10/20 18:25:51
大きく描いてから縮小すればいいんだYO

776 :デフォルトの名無しさん:04/10/20 18:44:12
SetStretchBltModeも忘れるなよ

777 :デフォルトの名無しさん:04/10/20 19:47:38
>>767
WM_DEVICECHANGE
CD-ROMドライブのプロパティで、
自動挿入をオンにしておく必要があるが。

778 :761:04/10/20 20:31:46
>>762
GetLastError()で取得したエラーコードをFormatMessage()で変換してみたところ、
「指定したリソース名がイメージファイルに見つかりません。」
と出ました。
でも「猫でも〜」や他所で見かける例だと、この手順で問題なく読み込んでくれるはずなのですが…。
ResourceHackerは敷居が少し高そうですので、もう少し慣れたら触ってみることにします。
レスありがとうございました。

>>764
MAKEINTRESOURCE( MYBMP )としてみましたら呆気なく表示されました。
実際はただキャストしてるだけのようですが、なぜこれで上手く行くのでしょうか…。
ちょっと考えてみます。
レスありがとうございました。


779 :デフォルトの名無しさん:04/10/20 20:35:03
IEのファイルダウンロードのダイアログを同等のものを
表示させたいのですが、どのAPIを使えばよいのでしょうか?
「開く」「保存」「キャンセル」のボタンがあるやつです。
また、上書き確認のダイアログの表示方法もありますか?

780 :デフォルトの名無しさん:04/10/20 21:00:56
ハードウェアの安全な取り外し を行うのはAPIでできますか?
できるとしたらどうすれば。

781 :デフォルトの名無しさん:04/10/20 21:27:02
>>779
GetOpenFileNameとかGetSaveFileNameとかかな。
しかるべきフラグを渡せば、上書き確認とかもできる。

782 :デフォルトの名無しさん:04/10/20 21:35:05
>>778
リソースの識別子は "" で囲った文字列形式と
数値形式の2通りがあるんです。
>>778さんは数値形式でリソースを作成したのでは?

LoadImage 等の関数は文字列形式を必要とするので、
MAKEINTRESOURCEマクロでキャストする必要があります。

OSはたぶん、渡された文字列ポインタの値をみて、
もし上位ワードが0x0000ならば、
それは文字列ではなく数値をキャストしたものである、
と判断しているのでしょう。

783 :デフォルトの名無しさん:04/10/21 02:29:35
>>780
APIを徹底的に調べればわかるんでないの?

784 :デフォルトの名無しさん:04/10/21 09:02:42
>>780
やったことないので知らないけど
SetupDi〜のAPI調べるといいかも

SetupDiRemoveDeviceとかなんか怪しげ

785 :デフォルトの名無しさん:04/10/21 11:01:37
コモンコントロールのアップダウンで
下限の次を上限に、上限まで行ったら下限に行くように
ループさせたいのですが、特別なオプションってありませんでしょうか

786 :デフォルトの名無しさん:04/10/21 11:12:38
>>785
MSDNのUp-Down Control Stylesをよく見ろ。

787 :デフォルトの名無しさん:04/10/21 18:04:32
ドロップダウン型のコンボボックスで
リスト部分のウィンドウハンドルを取得する方法はないでしょうか。
GetComboBoxInfo とかだとNULLが返って来ちゃうんですよね。
お昼過ぎからずーっと探してるのですが……。
どなたかご存じでしたらご教授ください。

788 :デフォルトの名無しさん:04/10/21 18:21:55
COMBOBOXINFOを初期化してないんじゃないの?
特にcbSize

789 :787:04/10/21 19:10:02
>>788
cbSizeを設定しておく必要があったのですか!
わぁ、動いた。動きましたorz
……うわー、俺の午後ってー!
ありがとうございました(深々礼

790 :デフォルトの名無しさん:04/10/21 19:12:00
>>789
MSDN見てないのか?

791 :デフォルトの名無しさん:04/10/21 19:43:14
DLLの関数の呼び出し規約がcdeclかstdcallか、を、
ヘッダファイルや、ソースファイルが、無くても知る方法ありますか?
たとえばdumpbin.exeなどでDLLをダンプしたらわかりますでしょうか??

792 :デフォルトの名無しさん:04/10/21 20:18:06
>>791
見当がつくこともある。
#と答えておこう。

793 :789:04/10/21 20:46:30
>>790
プラットフォームSDK GetComboBoxInfo関数 のページは見たのですが……
後は、COMBOBOXINFO構造体のページとかは。
まだ始めたばかりでセオリーとか分かってなくて、申し訳なかったです。

794 :& ◆FtKQchXwgI :04/10/21 20:47:35
 

795 :794:04/10/21 21:04:09
俺のうぐいすが化け化けなのはなぜですか?(;_;)

796 :デフォルトの名無しさん:04/10/21 21:54:44
>>793
>Pointer to a COMBOBOXINFO structure that receives the information.
>Note that you must set COMBOBOXINFO.cbSize to sizeof(COMBOBOXINFO) before calling this function.

こう書いてなかった?


797 :デフォルトの名無しさん:04/10/21 22:03:09
>>792
791です、dumpbin /exports したけど、さっぱり見当がつきません。
どのあたりが見分けるポイントなんでしょうか。
(なかばアキラメモードです....)

798 :デフォルトの名無しさん:04/10/21 22:12:17
スタックを覗いてみるとか

799 :デフォルトの名無しさん:04/10/21 22:33:13
>>798
791です。
あ、なるほどね。スタックの積み順を調べたらいいんだぁ。


800 :779:04/10/21 23:05:14
ファイル保存のダイアログを出さずに、
ファイルの上書き確認ダイアログを表示させたいのです。
あとダウンロードの確認ダイアログはどうするのでしょうか?
次の場所からファイルのダウンロードするように選択しました。
「このファイルを上記の場所から開く」
「このファイルをディスクに保存する」というダイアログのことです。
簡易ブラウザを作っていてなにかダウンロードするときに
このダイアログを出そうと思っています。



801 :793:04/10/21 23:06:04
>>796
> hwndCombo コンボボックスのハンドルを渡します。
> pcbi 情報を受け取るCOMBOBOXINFO構造体へのポインタを指定します。
なるほど、MSDN Japanの方だけじゃ情報不足なんですか。
わかりました、今度からはそっちも見に行くようにします。
どうもありがとうございましたです(礼

802 :デフォルトの名無しさん:04/10/21 23:10:56
>>800
前者は MessageBox( hWnd, "上書きするよ?", "確認", MB_OKCANCEL | MB_ICONWARNING ); でええやろ。

803 :デフォルトの名無しさん:04/10/21 23:31:19
修飾された関数名の前に"_"、後ろに"@"がつくとstdcallなのだと思うけれど
これはextern "C"限定の命名規則なのかしらん

804 :デフォルトの名無しさん:04/10/21 23:49:51
そこでハンド逆アセンブルですよ。

805 :779:04/10/22 00:17:29
>>802
UIが統一されていないのであまり気が進まないけど。
用意されててもいいような気がするんだけどないのかなー?


806 :デフォルトの名無しさん:04/10/22 08:03:31
>>800
OPENFILENAME
OFN_OVERWRITEPROMPT

807 :デフォルトの名無しさん:04/10/22 11:46:51
↑質問文をよく読まないせっかち君

808 :デフォルトの名無しさん:04/10/22 16:07:17
CGIの出力をプログラムで取得したいと思い、InternetReadFileを
使用したのですが、出力ではなくCGIのソースそのものが取得されてしまいました。
CGIの出力を取得するのは無理なんでしょうか?

809 :デフォルトの名無しさん:04/10/22 16:15:50
CGI側のサーバ設定がおかしい。
もしくは何か勘違いしている。

810 :デフォルトの名無しさん:04/10/22 16:34:16
テストどぞ
http://pc5.2ch.net/test/read.cgi/tech/1095534704/l50

811 :デフォルトの名無しさん:04/10/22 17:31:37
>>808
ブラウザで開いてみそ。

あと、ココとかのURLを入れてみそ。
それでもCGIのソースが出るようだったら、大発明。

812 :デフォルトの名無しさん:04/10/22 17:39:39
脆弱性発見でつか?

813 :デフォルトの名無しさん:04/10/22 21:16:48
>>803
extern "C"をつけていなくても、stdcall関数なら当然、stdcallの修飾(前に"_"、後ろに"@"そしてプッシュするサイズ)は付く。
ただし、C++の修飾を先にしたものにstdcallの修飾がなされる。


814 :779, 800:04/10/22 21:52:02
誰か回答をくれー!

815 :デフォルトの名無しさん:04/10/22 22:01:36
>>814
IEを呼び出せばいいだろ。

816 :デフォルトの名無しさん:04/10/23 00:29:26
ビットマップのパスだけが分かっているとき、画像を表示させるにはどうすればいいですか?

817 :デフォルトの名無しさん:04/10/23 00:30:18
>>816
LoadImage

818 :デフォルトの名無しさん:04/10/23 01:51:21
>>817
LoadImage()では表示は出来ません。

819 :デフォルトの名無しさん:04/10/23 03:08:01
ShellExecuteEx

820 :デフォルトの名無しさん:04/10/23 12:54:52
>>819
ありがとうございます。確かに表示出来ました。

821 :デフォルトの名無しさん:04/10/23 17:38:02
WritePrivateProfileStringW で設定を保存してもUNICODEで保存されないのって仕様ですか?
何のためのワイド文字版APIなの??

822 :デフォルトの名無しさん:04/10/23 17:50:23
>>821
UNICODEにしかない文字を書き込んだらどうなる?

823 :デフォルトの名無しさん:04/10/23 18:08:53
A2Wを呼び出す手間を軽減するためのW版だろ

824 :デフォルトの名無しさん:04/10/23 19:18:14
>799
積み順じゃなくて、クリアの方法を見ること。
積み順は cdecl も stdcall の同じ。

825 :821:04/10/23 20:47:32
>>822
「????」とかに変換される。
唯一のメリットといえば、UNICODE使ったファイル名でもアクセス可能だということだけ…。

でも、*.regファイルなんかは、iniファイルと同じフォーマットでUTF16LEなのに、regedit.exeはAPI使わずに
アクセスしてんのかな?

826 :デフォルトの名無しさん:04/10/23 22:20:56
>>825
Unicode版のAPIで.iniファイルに書きこんだら
Unicodeで保存されるべき…。
なるほど、そういう発想はなかったな。
まあ、いろんなアプリがひとつの.iniファイルに
アクセスする可能性があるし、過去との互換性も考えると
ANSIで保存されるのは仕様なんでしょう。

.regファイルの件は何が疑問なのかよく分からない。

827 :デフォルトの名無しさん:04/10/23 22:27:56
>>825
Dependency Walkerで調べたところ、GetPrivateProfileStringW()を直接呼び出すことはしてなさそうだ。

828 :デフォルトの名無しさん:04/10/23 22:43:21
オーナードローボタンを複数画面に表示し、
それぞれ別のビットマップを貼り付ける方法を教えてください。


829 :デフォルトの名無しさん:04/10/23 23:14:28
>>826

.regを読むのに*Profile* APIを使ってるはずだと思ってるんでしょ。

830 :デフォルトの名無しさん:04/10/23 23:48:52
みんなやってそう、かつ簡単そうで難しい、(完璧ではない)

文字処理

831 :デフォルトの名無しさん:04/10/23 23:58:14
>>821
なに? WritePrivateProfileStringW 使って
引数にUNICODEの文字列を指定して
書き込んだらSJISに変換されて書き込まれるの?
まさか、引数にSJISの文字列を指定して書き込んでも
UNICODEに変換されないとか言っているわけじゃないよね?

832 :デフォルトの名無しさん:04/10/24 00:37:09
( ゚д゚)ポカーン

833 :デフォルトの名無しさん:04/10/24 01:21:27
16ビット時代の遺物なんだからUnicode対応なんかしてないよ。
レジストリ使うか自前でやれ

834 :デフォルトの名無しさん:04/10/24 02:34:26
同じファイルに読み書きするのにAPIのインターフェイスがAかWかで文字コードが変わったら使い物にならんやん

835 :デフォルトの名無しさん:04/10/24 06:14:52
WM_ACTIVE site:microsoft.comでググっても何も見つからないのですがこれはWM_ACTIVEは使うなという事ですか?


836 :デフォルトの名無しさん:04/10/24 06:36:00
>>833
レジストリも結局は一緒じゃないか?
REG_SZ型は全てUnicodeで保存されてるはず。
ユーザが意識しなくてもいいことじゃないの?

837 :デフォルトの名無しさん:04/10/24 07:35:14
WM_ACTIVATE

838 :デフォルトの名無しさん:04/10/24 08:59:32
>>836 ハァ?

839 :デフォルトの名無しさん:04/10/24 10:00:29
噛み合ってません

840 :デフォルトの名無しさん:04/10/24 10:33:28
要するに

*Private*
  AでもWでもファイルはSJIS

レジストリ
  AでもWでもファイルはUnicode

結論
  AでもWでも同じファイルを使えるように設定された仕様

ということでFA?

841 :デフォルトの名無しさん:04/10/24 12:26:31
プロパティページについてなんですが、CreatePropertySheetPageが失敗したとき
PROPSHEETPAGE::pfnCallbackで指定したコールバックは呼ばれるのでしょうか?
lParamにページで使うメモリを持たせ、コールバックのPSPCB_RELEASEで解放するようにしています。

842 :デフォルトの名無しさん:04/10/24 12:39:14
>>841
呼び出し元で確保したら呼び出し元で開放するのが基本じゃないか?

843 :841:04/10/24 12:45:14
>>842
DLLからアプリ側にHPROPSHEETPAGEを渡すので
解放するタイミングがコールバックしかないのです。

844 :デフォルトの名無しさん:04/10/24 12:45:53
>>842
時と場合による

845 :デフォルトの名無しさん:04/10/24 14:18:48
GetCharWidth32でU+10000以降の文字幅を取得できないのは仕様ですか?

846 :デフォルトの名無しさん:04/10/24 22:53:25
FindFirstFile とかで、ディレクトリツリーを辿るプログラムで、ディレクトリのシンボリックリンクを
辿らせないようにするにはどうすればいいのか教えてください偉い人。

847 :デフォルトの名無しさん:04/10/24 23:01:57
CreateWindowでEDIT(テキストエディタ)を作成し
入力を整数又は小数点にしたいのですが
整数はES_NUMBERで実現できました。
しかしながら整数だけの入力にしてしまいますと
当然ながら少数点の入力ができません。
整数と少数に入力を制限できる方法ってありますでしょうか。

848 :デフォルトの名無しさん:04/10/25 00:28:06
>>846
興味本位で訊くんだけど、NTFSはディレクトリのシンボリックリンクを作れるの?

849 :デフォルトの名無しさん:04/10/25 00:34:36
>>848
呼称は違うけど、ほぼ同等なものが作れる。

850 :デフォルトの名無しさん:04/10/25 00:47:54
\\相手のPC\共有フォルダ名
みたいなパスをFindFirstFileで検索掛けると
"ファイルが見つかりません"というエラーが返却されるんですけど、

本当にファイルがないか、それとも、ネットワーク共有名かを判断するAPI
ってないですかね?


851 :デフォルトの名無しさん:04/10/25 01:03:00
>>850
少なくとも、
\\127.0.0.1\SharedFolder\*
とかだと検索できるけど。

852 :デフォルトの名無しさん:04/10/25 01:04:36
>>850
UNC

853 :デフォルトの名無しさん:04/10/25 01:38:13
>>852
PathIsUNCですかね?
なんかいけそうです。有難う御座います。

854 :デフォルトの名無しさん:04/10/25 07:05:55
うんこネタ禁止

855 :デフォルトの名無しさん:04/10/25 09:24:47
>>854
朝起きて一発目のレスがそれかorz

856 :デフォルトの名無しさん:04/10/25 09:51:30
スピンコントロールの内容を変数にゲットしたいのですが
GetWindowTextやGetDlgItemTextでは取得できませんでした。
スピンコントロールをゲットできる関数ってありますでしょうか・・・。m(_ _)m

857 :デフォルトの名無しさん:04/10/25 10:16:16
>>856
UDM_で始まるメッセージを調べてみ

858 :デフォルトの名無しさん:04/10/25 10:18:59
MFCのCSpinButtonCtrl::GetPos()のソースを見てみるとか。

859 :デフォルトの名無しさん:04/10/25 10:59:32
MACアドレスを取りたくてGetAdaptersInfoを使ったのですが、
IEEE1394のアドレスだけ取れませんでした。
そういうものなのでしょうか。
getmac.exeとipconfig.exeの出力結果も違うし、ググっても
情報が全然ないしで困りました。

860 :デフォルトの名無しさん:04/10/25 11:26:42
>>859
WBEM 使うととれるかも。

861 :デフォルトの名無しさん:04/10/25 12:29:15
>856
ちなみにスピンコントロールは、アップダウンコントロールと
エディットコントロールの組の事。
856 が GetWindowText で得ようとしたのは
アップダウンコントロールの方のテキストだろうな。

862 :デフォルトの名無しさん:04/10/25 15:39:42
Windowsコントロールの標準のポップアップメニューにメニュー追加はどうやりますか?

863 :デフォルトの名無しさん:04/10/25 16:13:50
GetSystemTime()で世界協定時刻(UTC)を取得しているのですが
このAPIで取得出来る時刻はどの程度信頼性のあるものなのでしょうか?
ユーザが簡単に調整など出来ないようになっているものなのでしょうか?

864 :デフォルトの名無しさん:04/10/25 16:21:02
>>863
コントロールパネルの「日付と時刻」を開いてごらん。

865 :デフォルトの名無しさん:04/10/25 16:30:37
>>864
日付と時刻のプロパティが出ました。
これに何かあるのでしょうか?

866 :デフォルトの名無しさん:04/10/25 16:35:38
>>863
GetSystemTimeは世界協定時刻(UTC)を取得する関数ではありません。
システム日時をUTCに換算して取得する関数です。

信頼性は、PCの時刻に依存します。
ユーザが、PCの時刻を操作できる権限を持っていれば、変更される可能性があります。

867 :863:04/10/25 16:42:00
>>866
という事は殆ど当てにならないという事ですね…
厳密に取得するには、(UTC)が取得できる
信頼性のあるサーバから取ってくるしかないという事ですか。

868 :デフォルトの名無しさん:04/10/25 16:54:42
>>867
Windows NT 系だったら、タイムサーバーにアクセスして
時刻を正確に調整してくれるように設定できるよ。
まあ、それもユーザー(あるいは管理者)に任されているわけだけど。
企業内の大きなLAN であれば、タイムサーバー置いてるでしょう普通。

869 :デフォルトの名無しさん:04/10/25 19:48:28
http://www.uploda.org/file/uporg13472.txt

ボタン1つ作れないorz
どこがダメなんですか?

870 :デフォルトの名無しさん:04/10/25 19:58:45
>>869
#defineIDB_BUTTON1100;

このセミコロンを削除しましょう。

871 :デフォルトの名無しさん:04/10/25 20:19:36
windowsプログラミングでスクロールバーを扱う関数にSetScrollRange(hwnd,iBar,iMin,iMax,bredraw)という説明があったのですが
第2引数のiBarにはSB_VERTかSB_HORZを指定するとだけ書いてあり、これらがどういう意味を持つのかさっぱりわかりません。
この二つは何が違うのでしょうか?

872 :デフォルトの名無しさん:04/10/25 20:22:44
>>871
ttp://msdn.microsoft.com/library/

873 :デフォルトの名無しさん:04/10/25 20:25:31
>>871 SDK のドキュメント読めばわかるから。

874 :871:04/10/25 20:37:32
MFCのデータしか出ないのですが。。

875 :デフォルトの名無しさん:04/10/25 20:38:54
>>874
>>872で「SetScrollRange」で検索して上から4番目。

876 :デフォルトの名無しさん:04/10/25 20:49:55
ms-help://MS.PSDK.1033/shellcc/platform/commctls/scrollbars/scrollbarreference/scrollbarfunctions/setscrollrange.htm

877 :デフォルトの名無しさん:04/10/25 20:50:35
>>875
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_cscrollbar.3a3a.setscrollpos.asp

ここであってます?

878 :デフォルトの名無しさん:04/10/25 20:53:54
>>877
>>872

879 :デフォルトの名無しさん:04/10/25 20:56:22
>>877
違う。
あと日本語版のヘルプは肝心な記述が抜けてたりするんで、雰囲気だけ掴むだけにしとけ。

880 :871:04/10/25 21:04:12
英語版でようやくたどりつけました。。
MSDNは英語版のほうがよろしいんですかね〜?
なかなかAPIを検索しようにもMFCばっかりで。。

881 :デフォルトの名無しさん:04/10/25 21:21:04
つーか、縦か横かって話だけだろ?

882 :デフォルトの名無しさん:04/10/25 21:28:14
MFCも結局はAPI呼んでるから見て損はないと思う。
それに>>871は引数から言ってMFCじゃないのか?
あとAPIのSetScrollRangeは使うなっていうことだぞ


883 :デフォルトの名無しさん:04/10/25 21:55:51
>>882
プログラミングwindowsという本に載っていた関数なのでAPIだと思うのですが。。MFCなのですかね。。??


884 :デフォルトの名無しさん:04/10/25 22:01:58
MFCで引数がhwndってあまり無いわけだが。

885 :デフォルトの名無しさん:04/10/25 22:10:48
SB_VERT SB_HORZでイメージわかないようだと英語は厳しいだろ。

886 :デフォルトの名無しさん:04/10/25 22:34:49
自分のウインドウがアクティブになっていなくても、
あるキー(たとえばF1等)が押されたときにそれを感知するにはどうしたらいいですか?


887 :デフォルトの名無しさん:04/10/25 22:39:59
キーロガーでも作りたいのか?

888 :デフォルトの名無しさん:04/10/25 22:41:04
ほっときー

889 :デフォルトの名無しさん:04/10/25 22:42:16
監視員をつける

890 :デフォルトの名無しさん:04/10/25 22:49:18
グローバルフックを使う。DLLを作成しる

891 :886:04/10/25 22:51:30
>>888
Hot keyってコモンコントロールだったんですか……。
これを使ってみます。

892 :デフォルトの名無しさん:04/10/26 01:20:19
コモンコントロールのホットキーは違うと思う。

893 :デフォルトの名無しさん:04/10/26 01:28:19
>>891
コントロールのホットキーは、キーの組み合わせを受け取れるだけの
コントロールであって、その組み合わせを監視するには、DLL作って
フックするしかない。
ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm

894 :デフォルトの名無しさん:04/10/26 01:47:29
力業でGetAsyncKeyStateとか

895 :デフォルトの名無しさん:04/10/26 03:41:23
フックだと監視できても変更できないしなぁ・・・。見てるだけ。orz

896 :デフォルトの名無しさん:04/10/26 03:45:19
デスクトップのショートカットキーと同じようなもので良いのなら、
WM_HOTKEYを使う。

フックなら変更も可能。

897 :デフォルトの名無しさん:04/10/26 04:30:45
>>896
WH_GETMESSAGE の場合だけ?

898 :デフォルトの名無しさん:04/10/26 06:40:07
Cygwinのフォルダが消せず、フルコントロールできるのがシステムになっていたので
与えられたフォルダのパス以下を全て削除するようなプログラム書きたいんですが
システム権限で動くようにするにはどうしたらいいんでしょ?

899 :デフォルトの名無しさん:04/10/26 06:55:02
以下のキーに実行ファイル名を入れてマシンを再起動。SYSTEM権限で実行されるので注意。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
もしくは、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce

900 :898:04/10/26 07:04:35
>>899
ありがとうございます、さっそくコード書いて試してみます。

901 :でき:04/10/26 08:51:30
すいませんが、どなたか、VB.netにてwin2000、winXPの端末がコンピュータロック中か取得する方法をご存知でしょうか?
(APIを利用してできるのではと思いこちらに質問しました。)

902 :デフォルトの名無しさん:04/10/26 09:50:31
いま動いてるプロセスを管理するような関数ってある?
いくらリファレンスとか WWW の検索かましても
これといったのがないんだけど

とくに各プロセスのファイルアクセスの情報を見たいんだけど


903 :デフォルトの名無しさん:04/10/26 10:38:40
ない

904 :902:04/10/26 10:40:42
例えばタスクマネージャに使ってる関数てどんなの?


905 :デフォルトの名無しさん:04/10/26 10:44:30
タスクマネージャにファイルアクセスのログなんてあったっけ

906 :デフォルトの名無しさん:04/10/26 10:46:09
>>905
いやファイルアクセスのことはとりあえず置いといて

最終的に本当にしたいのはファイルとプロセスの関係なんだけどね

907 :デフォルトの名無しさん:04/10/26 10:47:54
>>902
NT系ならAPIでファイルハンドルの保持状況を見れないことはないが、フックしたほうが簡単。

908 :デフォルトの名無しさん:04/10/26 10:57:36
API フックのこと?
メッセージフックじゃファイルアクセスを監視できないと思うけど。

909 :デフォルトの名無しさん:04/10/26 11:01:03
漏れも linux の fuser みたいなの欲しいけど、簡単な方法はないんじゃない?
かの sysinternals の FileMon でも VxD 使ってフックかけてるし。

910 :902:04/10/26 11:02:40
あそうそう

まさに filemon みたいなことがしたいわけよ

あれ,どうやってんの?

詳しく詳細きぼん

911 :デフォルトの名無しさん:04/10/26 11:03:43

FileMon はここ。
このサイト、Windows で変なことしようとするとき参考になります。
ttp://www.sysinternals.com/ntw2k/source/filemon.shtml


912 :デフォルトの名無しさん:04/10/26 11:04:49
>>911

つーかその動作原理を知りたいのさ

そのサイトに何か書いてあるん?

913 :デフォルトの名無しさん:04/10/26 11:06:06
>>901
「コンピュータロック中」ってどういう状態?

914 :デフォルトの名無しさん:04/10/26 11:07:20
>>912
見に行きゃいいじゃん。そもそも>909にVxD使ってるって書いてあるし。

915 :デフォルトの名無しさん:04/10/26 11:13:02
”How FileMon Works”以下に必要な情報へのリンク等があるみたいです。
Windows "handle table" あたりでググルと別方向からの情報も見つかると思います。

簡単だけれども酷いやり方としては、先方のプロセスにコードをinjectして、
0x0000〜0xFFFFあたりを NtQueryObject で調べてみるとか。

916 :909=911=915:04/10/26 11:16:43
>そのサイトに何か書いてあるん?
書いてはあるけど、IFSMGR は SDK が高いので簡単には使えないですね。
しかし酷い態度。相手にするんじゃなかった・・・

917 :デフォルトの名無しさん:04/10/26 11:21:53
ちょっとでも礼が言えないヤツなんだな

918 :でき:04/10/26 11:57:34
>>913
「コンピュータロック中」とは「Alt」+「Ctrl」+「Del」をおしてするコンピュータロックのことです。


919 :デフォルトの名無しさん:04/10/26 12:11:24
OpenInputDesktopでwinlogonデスクトップがアクティブかどうか調べる

920 :デフォルトの名無しさん:04/10/26 13:13:45
丁寧な文体でない質問には答えない。これが後悔しないコツ。

921 :デフォルトの名無しさん:04/10/26 13:19:13
>>920
文体が丁寧なだけで中身が無いよりも、
必要な内容が全て含まれている崩れた文体の方が好ましい。

922 :デフォルトの名無しさん:04/10/26 13:29:26
>>921
それはそうだ。ただ態度、出方による。

923 :909=911=915:04/10/26 14:49:11
そもそもこっちが勝手にレスしてるんだから
相手の態度がどうであれ関係ないか、
と考え直しますた。

924 :デフォルトの名無しさん:04/10/26 15:17:53
理解しようとする気がない奴には答えない。これが後悔しないコツ。

925 :921:04/10/26 15:26:51
>>924
激しく同意

926 :デフォルトの名無しさん:04/10/26 15:45:35
皆さん、教えてもらったら「ありがとう」といいましょう。
善意で答えてくださっているのですから、横柄な質問はやめましょう。

927 :デフォルトの名無しさん:04/10/26 16:43:34
http://pc5.2ch.net/test/read.cgi/tech/1093519463/551-552


928 :デフォルトの名無しさん:04/10/26 17:09:48
>>921
ここに居るだけで傷ついてる人はいるけど

929 :デフォルトの名無しさん:04/10/26 17:20:02
そりゃ問題外

930 :デフォルトの名無しさん:04/10/26 17:23:13
>>929
それが大事

931 :886:04/10/26 17:28:30
>>896
RegisterHotKey()で登録したホットキーを無効にするにはどうすればいいんですか?

932 :デフォルトの名無しさん:04/10/26 17:46:14
ん?
ヘルプ見たらRegisterHotKey()のすぐ横にあるだろ

933 :デフォルトの名無しさん:04/10/26 18:26:11
初心者にまず教えるべきことはMSDNの見方だと思うんだよね。

934 :デフォルトの名無しさん:04/10/26 18:44:50
礼儀だろ

935 :デフォルトの名無しさん:04/10/26 18:45:37
カラテカを100回クリアできるまでは初心者

936 :886:04/10/26 20:41:34
……見落としていましたOrz

937 :デフォルトの名無しさん:04/10/26 21:53:36
タブを使ったチャットソフト作ろうとしているんですけど、タブ
を切り替えるときに表示内容を変更する場合、表示内容をロード
して(文字位置や、フォントサイズなど)表示を切り替えるのと、
タブごとに異なるビューが存在し、タブを押すことによって表示
が切り替わるのが思いつくんですが、後者のほうは簡単にできる
でしょうか?前者はあまりにも保持しておく情報が多そうなんで
なんかスマートじゃない感じがします。

938 :デフォルトの名無しさん:04/10/26 22:23:19
すいません。教えてください。

CreateWindowで作ったウインドウを親ウインドウとして、CreateDialogで
ウインドウにダイアログを貼り付けています。
このダイアログ内のボタンに”標準のボタン”を設定し、見た目は外枠?の
ついた標準のボタンになっているのですが、エンターを押しても実行されません。
マウスでクリックすれば実行できます。

フォーカスとかそういう問題なのでしょうか?

939 :デフォルトの名無しさん:04/10/26 22:59:36
>>937
私ならダイアログをはっつけるね。

>>938
そういう問題でしょう。恐らくは、はっついたダイアログにフォーカスが来てないのかと。

940 :デフォルトの名無しさん:04/10/26 23:17:04
>>938
エンターの押し下げはモーダルダイアログ用のダイアログプロシージャによって実行されます。
モードレスダイアログでは機能しません。

941 :デフォルトの名無しさん:04/10/26 23:20:04
>>940
つまり、ウインドウにモードレスダイアログを貼る方法の場合は、
通常のエンターでのボタン押下はつかえないということでしょうか?

もしどうしても実行したいのであれば、自分でキーイベントを拾う??

942 :デフォルトの名無しさん:04/10/26 23:22:23
IsDialogMessageをメッセージループに組み込む

943 :デフォルトの名無しさん:04/10/26 23:35:57
>>942
ありがとうございます。
今は環境がないので後日試してみます。

944 :デフォルトの名無しさん:04/10/27 00:06:41
SHQueryValueExとRegQueryValueExの違いはなんでしょうか?
MSDN見たところどちらも違いがないように思えるのですが。

945 :デフォルトの名無しさん:04/10/27 00:50:23
Photoshopのレイヤー情報表示部分のような、ペイントソフトに良くある
下記のコントロールはどの様に作るのでしょうか
_______________________
|★ ◎ レイヤー1. |
|★ ○ .////////. | ←フォーカス時の反転は文字の部分(=レイヤーxx)のみ
|☆ ◎ レイヤー3. |
|           | ★や◎はアイコンで、クリックすると状態が☆や○に変わる
|           |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
オーナードローかカスタムドローのリストビューかなとは思うのですが、
反転部分が文字部分だけというのが引っかかります。
VCLに似たような物があるとも聞いたので、もしかしたら何か
既成のコモンコントロールがあるのでしょうか?

spy等で調べてみたいのですが、自分ではPhotoshopを持って無く、
また学校のPCにexeを入れると非道く怒られるもので…ひとつよろしくお願いします

946 :デフォルトの名無しさん:04/10/27 01:01:52
Photoshopは確かすべて自前描画のコントロールだったと思うのですが。
Macと共通のインターフェイスですし。

947 :デフォルトの名無しさん:04/10/27 04:11:35
>>945
>spy等で調べてみたいのですが、自分ではPhotoshopを持って無く、
>また学校のPCにexeを入れると非道く怒られるもので…ひとつよろしくお願いします

何の学校かにもよるだろうけど、勝手にインストールするんじゃなくて、
目的を伝えて必要性を説明すれば怒られることはないと思われます。
もちろん断られるかも知れませんが。

もしプログラミング技術等を教える学校でありながらそれを断られるようなら、
選んだ学校を間違ったと思ってあきらめよう。


948 :945:04/10/27 08:10:20
>>946
ぜ、全部自前ですかぁ…。なるほどマルチプラットフォーム。
あれと同じ物を作るのは…気が遠くなりそうですが覚悟を決めることにします。

>>947
あはは、Photoshop入りのPCが他学部の端末な事もあって、
怖じ気づいていました。確かに勉強事に奥手になっちゃ駄目ですね。

お二人ともレスありがとうございました。

949 :デフォルトの名無しさん:04/10/27 08:18:26
>>916
> >そのサイトに何か書いてあるん?

大阪っぽい


950 :デフォルトの名無しさん:04/10/27 12:06:11
チェックボックスの背景色を灰色から変更したいのですが、無理でしょうか。
SetBkColorでは無理でした。。

951 :デフォルトの名無しさん:04/10/27 12:11:47
出来ます。

952 :デフォルトの名無しさん:04/10/27 12:25:08
WM_GETCTLCOLOR*かな?

953 :デフォルトの名無しさん:04/10/27 13:18:59
最近、興味のある質問がめっきり減った。

954 :デフォルトの名無しさん:04/10/27 13:41:32
ちと古いホトショップだけど
PSFloatCとかPSViewCとか独自コントロールかな?
WM_USER+αが飛び交っておりました

955 :デフォルトの名無しさん:04/10/27 14:10:05
>>953
じゃあ手本を示してみろ。

956 :デフォルトの名無しさん:04/10/27 14:14:56
>>952

WM_GETCTLCOLOR*は存在しませんでしたが、ここら辺調べ見ます。
ありがとうございまいました。

957 :デフォルトの名無しさん:04/10/27 15:54:35
スマソ ちょっと質問でつ
VB6で長時間稼動(多分100日とか連続でうごきっぱ)するシステムに
時間を計る部分があって、そこでTimegetTimeのAPIを使用しています。

しかし、ここで、TimegetTimeは連続である一定以上動かないのは周知の事実なのですが、このAPIが返す値が32Bit(VBのLong)を超えた場合、どのような動きになるのでしょうか?
テストするのが一番かとも思うのですが、そこまで時間に余裕がありません。
よろしくお願いいたします。

958 :デフォルトの名無しさん:04/10/27 15:57:36
0

959 :デフォルトの名無しさん:04/10/27 16:31:48
おぉ、ありがとうございます〜
まさかLongの最小値から始まる事は無いと思ってたんですが
これで対策が取れそうです
ありがとうございました〜

960 :デフォルトの名無しさん:04/10/27 22:11:16
作成したボタンなどを消すにはどうすればいいですか?

961 :デフォルトの名無しさん:04/10/27 22:26:36
>>960
DestroyWindow

962 :938:04/10/27 22:50:55
>>942
すいません。出来ないです。

VC++のリソースエディタで”標準のボタン”にチェックして、
以下のソースを書くだけではだめですか?

// hWndDlgはダイアログのハンドル
while(GetMessage(&msg, NULL, 0, 0)){
if (hWndDlg && IsDialogMessage(hWndDlg, &msg)) continue;
TranslateMessage(&msg);
DispatchMessage(&msg);
}




963 :960:04/10/27 22:59:59
>>961
無事消せました。ありがとうございます。

964 :デフォルトの名無しさん:04/10/27 23:08:35
>>962
ダイアログにフォーカスが無いと。
親ウィンドウに WM_SETFOCUS がきたら SetFocus(hWndDlg) してあげてください。


965 :デフォルトの名無しさん:04/10/27 23:35:37
ダイアログボックスに2つのエディットコントロール
A、BとボタンCを配置して、Aには、「%s,%d」などのフォーマットを
Bには引数リスト「a,b」を入力し、ボタンを押すと
sprintf("%s,%d",a,b);という関数を生成しようとしていますが、
巧くゆきません。引数リストがひとつの文字列となってしまいます。
"a,b"

巧い方法はないでしょうか?
宜しくお願いします。


966 :デフォルトの名無しさん:04/10/27 23:41:39
関数を生成?

最大限に意図をくんでみたところで、君には無理だな。

967 :デフォルトの名無しさん:04/10/28 00:10:18
そんなエロサイトのJavaScriptみたいなことはできない

968 :デフォルトの名無しさん:04/10/28 00:11:21
考えてみたらWin32APIの質問ですら無かったな。

969 :デフォルトの名無しさん:04/10/28 01:08:12
>>965
引数を分けたいだけなら、sprintfの前で、自分で切り出せばいいのでは?
でも、それでは文字列のままだけど。
可変引数の実装を作りたいなら、vsprintfとかを参考にすればわかります。
文字列から、実変数へ割り当てる仕組みを作るなら、
適当な配列と文字列を対応させる仕組みを作ります。stlのmapとか使えば楽できます。

970 :デフォルトの名無しさん:04/10/28 09:30:48
MessageBoxについて
文字列+変数のような形で出力はできないのでしょうか
printf("私は%d倍バカです",i);

971 :デフォルトの名無しさん:04/10/28 09:43:33
>>970
できない
wsprintfなどで、予め文字列を生成しておきましょう

972 :デフォルトの名無しさん:04/10/28 12:14:39
CreateWindowのTEXT("EDIT")をWS_DISABLEDにすると
選択できなくなり灰色になるのですが
この灰色を別の色に変えたいのですが
方法ってあります?

973 :デフォルトの名無しさん:04/10/28 13:23:45
>>972
ある。自分で別の色で塗ればよい。

974 :デフォルトの名無しさん:04/10/28 14:05:50
>>973
よく意味わかるな

975 :972:04/10/28 16:14:57
case WM_CTLCOLOREDIT:
{
//HDC hDC = (HDC)wParam;
HWND hCtrl = (HWND)lParam;
if(hCtrl == GetDlgItem(hDlg, IDC_EDIT))// エディットウィンドウのID
{
//SetBkMode(hDC, OPAQUE);// 背景を塗りつぶし
//SetTextColor(hDC, RGB(255,0,0));// テキストの色
//SetBkColor(hDC,RGB(192,192,192));// テキストが書かれている部分のテキストの背景の色
return (LRESULT)m_hBrush_BkColor;// テキストが書かれていない部分の背景の色
}
break;
}

調べて上記まで分かったのですが
4行目のlParamの値は何を入れればいいのでしょうか。
何度もすみません。


976 :デフォルトの名無しさん:04/10/28 16:39:38
>>975
藻前、メッセージを理解してないだろ・・・

977 :デフォルトの名無しさん:04/10/28 17:04:47
Win2000でファイルのプロパティを開いて
そこのセキュリティのタブにある
ユーザを追加する「追加」ボタンを押下した時に表示するダイアログを開くようなAPIって ないっすか?

978 :デフォルトの名無しさん:04/10/28 17:28:48
>>976
「4行目のlParam」が何を指しているのかがわからないよ、ママン・・・

979 :デフォルトの名無しさん:04/10/28 17:48:01
ぐぐれ

980 :デフォルトの名無しさん:04/10/28 18:49:52
ぐぐるよりMSDNだろ

981 :デフォルトの名無しさん:04/10/28 18:51:13
えぐれ

982 :デフォルトの名無しさん:04/10/28 18:54:01
>>975
lParamはもらうだけで、こちらから入れる必要はありません。

983 :デフォルトの名無しさん:04/10/28 18:58:30
くぐれ

984 :デフォルトの名無しさん:04/10/28 19:34:56
ttp://www.ne.jp/asahi/rumic/k-asuka/tokeizak/t_images/Kuguruna.jpg

985 :デフォルトの名無しさん:04/10/28 19:44:47
まぐれ

986 :デフォルトの名無しさん:04/10/28 20:05:46
OfficeXPのExcelやWordのようなメニューバーは
どうやって作成するのでしょうか?
(各メニューについている灰色の短形?みたいなののことです。)

987 :デフォルトの名無しさん:04/10/28 20:12:14
あれ不便だから知らなくて良いよ
ユーザー迷惑機能とはこのことだな
バージョン上げるネタに困ってるとしか思えない

988 :986:04/10/28 20:23:04
なにが不便なのですか?
気になります。

989 :デフォルトの名無しさん:04/10/28 21:32:33
>>987
デザインの話じゃねぇの?

もし一部のメニューが非表示になる機能だったら
絶対に止めとけ。使いにくくてしょうがない

990 :デフォルトの名無しさん:04/10/28 21:34:26
IEとかOfficeとかで実現されてるそーいう機能って、有用かどうかも
考えずに真似したがるやつが絶えないな。

991 :デフォルトの名無しさん:04/10/28 21:37:16
質問したいのでスレ立てて来るっす

992 :デフォルトの名無しさん:04/10/28 21:40:25
Win32API質問箱 Build24
http://pc5.2ch.net/test/read.cgi/tech/1098967135/

993 :デフォルトの名無しさん:04/10/28 21:52:45
というわけで質問お願いするっす

オーナードローでボタンを描くと、画面のプロパティで設定するデザイン色次第で
ボタンの色が浮いちゃったりしますが、この辺の整合性を上手く取る方法ってあるんでしょうか?
市販品は結構上手くやっているみたいですが

994 :デフォルトの名無しさん:04/10/28 21:55:46
>>993
GetSysColor

995 :デフォルトの名無しさん:04/10/28 22:17:18
>>993
XPとかでデザインいじられてるとどうがんばっても浮くので
あえて浮いてもかまわないデザインにする。

996 :デフォルトの名無しさん:04/10/28 22:32:09
>>994-995
やるとしたらGetSysColorで色取って、自分で画像の色置換ですかぁ
XPも色々出来そうで恐いっすねぇ
大人しく地のダイアログごと色固定しちゃおう…

レスありがとうございました

997 :デフォルトの名無しさん:04/10/28 22:37:08
画像の色痴漢^h^h置換?
んなことはLoadImageにやってもらえ

998 :デフォルトの名無しさん:04/10/28 22:44:45
置換を痴漢で性器表現なんつって

>>997
おおブラボー!
これで手間書けずに済みそうです、サンクスです!

999 :デフォルトの名無しさん:04/10/28 22:47:01
いやらしー自慰

1000 :デフォルトの名無しさん:04/10/28 22:48:18
お役に勃ててナニ寄りです

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

224 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)