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


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

Win32API質問箱 Build20
1 名前:デフォルトの名無しさん :04/06/25 14:10
スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
ただし、最新スレくらいは質問する前に検索してくれ。というかしろ。

過去スレなどのリンクはたぶん>>2-5くらい。

2 名前:デフォルトの名無しさん :04/06/25 14:11
- 過去スレ
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
(★は「いやー ごめんなさい。」に巻き込まれた模様

3 名前:デフォルトの名無しさん :04/06/25 14:11
- MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html
- 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
http://usr_vogel.at.infoseek.co.jp/Win32SDK/index.html
WindowsSDK入門
http://kerochan.no-ip.com/vcsdk/letsprog/letsprog-index.htm

4 名前:デフォルトの名無しさん :04/06/25 16:20
4なら海外旅行

5 名前:デフォルトの名無しさん :04/06/25 16:24
行ってらっしゃい

6 名前:デフォルトの名無しさん :04/06/25 16:34
>>1
乙。

7 名前:デフォルトの名無しさん :04/06/25 16:57
>>4
土産よろしく。

8 名前:4 ◆MwGQyQRf/o :04/06/25 17:02
今からチケット買ってくるよ(;´Д`)

9 名前:pd32c6c.tokynt01.ap.so-net.ne.jp :04/06/25 17:03
とりあえず、まだ日本。

10 名前:デフォルトの名無しさん :04/06/25 17:08
どうでもいいからきえろ

11 名前:デフォルトの名無しさん :04/06/25 18:38
IShellFolderのインスタンスの指すフォルダかアイテムIDリストを取得する方法ってありませんか?

12 名前:デフォルトの名無しさん :04/06/25 18:49
GetDislpayNameOfの第一引数にNULL
MSDNに書いてないから、使っていいのかは知らん

13 名前:デフォルトの名無しさん :04/06/25 19:12
SHGDN_FORPARSING以外を指定した場合にエラーになるからだめみたいでですね

14 名前:デフォルトの名無しさん :04/06/25 20:01
皆さんはどうやってあんなに沢山のAPIを覚えたんですか?
一つ一つテストプログラムを作っては、コンパイル・テスト
したんですか?

15 名前:デフォルトの名無しさん :04/06/25 20:04
そうだよ。
だから藻前もがんがれ。

16 名前:デフォルトの名無しさん :04/06/25 20:11
>>15
一つ一つのAPI(関数)専用テストプログラム?

17 名前:デフォルトの名無しさん :04/06/25 20:15
そうだよ。
だから藻前もがんがれ。


18 名前:デフォルトの名無しさん :04/06/25 20:50
>>13
>SHGDN_FORPARSING以外を指定した場合にエラーになるからだめみたいでですね

そいつを SHGetDesktopFolder で得た IShellFolder で ParseDisplayName してやれば
ITEMIDLIST が得られるような気がするけど。

19 名前:デフォルトの名無しさん :04/06/25 20:54
>>14
覚えない。
基本的なところだけはもちろんおさえておくが、
必要になったときにググる。
MSDNを使うよりもググったほうがだいたいは楽。

20 名前:デフォルトの名無しさん :04/06/25 21:03
fgets()の使い方を完全に忘れてて今日ぐぐったw

21 名前:デフォルトの名無しさん :04/06/25 21:36
>>14
ヒマなときに help のキーワード一覧とかをだらーっと見てる。
Path ほにゃらら系みたいな、「自分でも書けるから必要ないんだけどあれば使う」APIとかは
「何かをするのにやり方が分からなくて Google で調べる」みたいな感じじゃ出会えないから。

22 名前:デフォルトの名無しさん :04/06/25 21:48
>>14
たくさんあるけど普段使うのはかなり限られてくる。
それにCreateWindowとCreateWindowExみたいにほぼ同じ機能のものも相当あるし、
それとDestroyWindowみたいに対になるものもこれまた相当ある。

23 名前:デフォルトの名無しさん :04/06/25 22:24
MSDNヘルプだと「〜Functions」とかが結構役に立つ。
WindowsのAPIってようするに単なるライブラリだから、ジャンル分けすればそう多くないんだよな。

24 名前:デフォルトの名無しさん :04/06/25 22:28
>>23
つかAPIを直で叩かせずにオブジェクトライブラリにすりゃいいのに。


25 名前:デフォルトの名無しさん :04/06/25 22:33
>>24
WinFX

26 名前:23じゃないけど :04/06/25 22:33
>>24
C言語からじゃ利用でけへんでないか

27 名前:デフォルトの名無しさん :04/06/25 22:34
>>24
このスレじゃそれは言っちゃダメ :-)

28 名前:デフォルトの名無しさん :04/06/25 22:39
IE上で、ActiveXコントロールを使って
submitイベントをフック(メッセージのフックか?)したいんですが
どなたかやったことありますか?

29 名前:デフォルトの名無しさん :04/06/25 22:46
あのVisualC++を買おうと思ってるんですがAPIとかちゃんとヘルプにありますか?
ドットネットとかに変わって今までと何か変わりましたか?

30 名前:デフォルトの名無しさん :04/06/25 22:49
>>24
マジっすか。それは(・∀・)イイ!!

>>26
C++はどう?

>>27
(´・ω・`)


31 名前:デフォルトの名無しさん :04/06/25 22:50
>>18
レスどうもです、とりあえずはそれでできるのでしょうが、
MSDNにNULL指定についての記述が無いのと
他のフラグでエラーが出る事から見て
「たまたま」動いているという気がしなくも無いので・・・

32 名前:デフォルトの名無しさん :04/06/26 01:24
マウスカーソルをShowCursorで非表示にしようと思って使ったのですが
ウィンドウ内しかカーソル非表示にされません。
完全に非表示にするにはどのようにすればいいのでしょうか?

33 名前:デフォルトの名無しさん :04/06/26 01:25
マウスのコードを抜く

34 名前:デフォルトの名無しさん :04/06/26 01:38
>>32
勝手なことすんなヴォケ

35 名前:デフォルトの名無しさん :04/06/26 01:41
良い反応だ

36 名前:32 :04/06/26 01:42
>>33
(´・ω・`)

>>34
もちろんマウスが動いたりしたら表示しますので教えてください

37 名前:デフォルトの名無しさん :04/06/26 01:54
>>36
ソフ板の例のスレの人か?
マウスフックとウインドウフック入れて
WM_SETCURSORを乗っ取り。

38 名前:デフォルトの名無しさん :04/06/26 02:02
>>37
ありがとうございます

> ソフ板の例のスレの人か?
多分違う人です


39 名前:デフォルトの名無しさん :04/06/26 07:40
>>32
ウインドウ内からマウスカーソルがでられないようにする

40 名前:デフォルトの名無しさん :04/06/26 09:06
テンプレにある
WindowsSDK入門
http://kerochan.no-ip.com/vcsdk/letsprog/letsprog-index.htm
が見れないのは漏れだけですか?
(´・ω・`)

41 名前:デフォルトの名無しさん :04/06/26 09:25
うちも見れんな

42 名前:デフォルトの名無しさん :04/06/26 11:22
>>40
鯖ごと寝ているんじゃないか?



43 名前:デフォルトの名無しさん :04/06/26 19:35
マッピングモードをMM_LOMETRICにして、画面に2cm角の格子を書いています。
その格子に合わせてMoveWindowでコントロールを配置しようとしていますが巧くいきません。
MoveWindowの引数を論理単位(ウィンドウ)で配置できないからです。

座標を計算しようとして、

POINT pt;
 int x = GetDeviceCaps(hdc,LOGPIXELSX);
 pt.x = x / 254;
 int y = GetDeviceCaps(hdc,LOGPIXELSY);
 pt.y = y / 254;

LPtoDP(hdc,(LPPOINT)&pt,2);

とすると微妙にズレが出てしまいます。

ScrollWindowExなどの引数もそうですが、引数がビューポートで指定している関数を使う時、
結果が論理単位になるようにする巧い方法ってありますか?
宜しくお願いします。

44 名前:503です :04/06/26 23:51
WINAPIについての良い入門書があれば教えてください。

45 名前:デフォルトの名無しさん :04/06/27 00:11
>>44
お約束だがペゾルド


46 名前:デフォルトの名無しさん :04/06/27 08:51
テンプレに必読書も入れといてくれ。
・Advanced Windows

47 名前:デフォルトの名無しさん :04/06/27 09:57
>>45
APIの入門書なら取り敢えずAPIバイブルの方がいんじゃないかなぁ?
PlatformSDKでもいいけど。

ペゾルドは入門を終えて更にステップアップしたい時に最適な気がする。


48 名前:デフォルトの名無しさん :04/06/27 12:47
black.sakura〜の例のサイトが個人的には入門に一番よかった。
猫より2段ぐらい。ネットの文献である程度基礎を掴んでから本買った方が何かと便利な気がする

49 名前:デフォルトの名無しさん :04/06/27 14:57
俺も猫よりWisdom派かな。
本は買わなくてもいけるけど、買ったほうがいいのかもしれない。

50 名前:デフォルトの名無しさん :04/06/27 16:08
適当な背景に対してフォント文字列を描画するのにDrawText関数を使ってみたのですが
矩形ごと書き込まれますね(白く浮いてしまう)

文字形状だけを背景に対して上書きする方法を教えてください
(関数名、キーワードだけでも結構です)
よろしくおねがいします


51 名前:デフォルトの名無しさん :04/06/27 16:13
SetBkMode

52 名前:50 :04/06/27 18:24
>>51
ありがとうございます
天才プログラマーですね、頼もしいです


53 名前:デフォルトの名無しさん :04/06/27 18:38
猫でもわかるの161章にある
LRESULT CALLBACK MyHookProc(int nCode, WPARAM wp, LPARAM lp)
{
char str[256];

if (nCode < 0)
return CallNextHookEx(hMyHook, nCode, wp, lp);
if (wp >= 0x30 && wp <= 0x39) {
wsprintf(str, "hMyHook = %d", hMyHook);
MessageBox(NULL, str, "MyHookProc", MB_OK);
return CallNextHookEx(hMyHook, nCode, wp, lp);
}
wsprintf(str, "キー入力はインターセプトされました\n フックハンドル= %d",
hMyHook);
MessageBox(NULL, str, "インターセプト", MB_OK);
return TRUE;
}
これを実行すると
二重で動作するんですがどうしたらよいでしょうか。

54 名前:デフォルトの名無しさん :04/06/27 19:31
よくわかんねーが、キーボードフックか?
WM_KEYDOWNとKEYUP

55 名前:53 :04/06/27 19:52
ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm
此処のDLL処理なんですが
DLLのプロシージャ内でWMメッセージは
取得できるのでしょうか

56 名前:デフォルトの名無しさん :04/06/27 20:00
WMは取得できないな。
繊維状態としてLPARAMのLSBで取得できる

57 名前:53 :04/06/27 20:44
>>56
具体的にどのようなことでしょうか?

58 名前:デフォルトの名無しさん :04/06/27 21:05
質問です。

必要な時にLoadLibraryでモジュールをロードして、
用件が済んだらFreeLibraryでモジュールをアンロードすると、
タスクマネージャ等で見る所のメモリ使用量は、
モジュールをロードした直後に増えたまま、
アンロードしてもメモリ使用量は低下しません。

また、ダイアログボックス等を使用した場合でも、
EndDialogないしDestoryWindowしても、
メモリ使用量は低下しないようです。

キャッシュのような機構が働いている物と考えられますが、
不要になったメモリを明示的に開放する事は出来ないのでしょうか?

59 名前:デフォルトの名無しさん :04/06/27 21:18
ダイアログ上のリストビューをサブクラス化しようとしています。
SetWindowLong 関数を呼ぶと、戻り値で判断する限り失敗していないのですが、
設定したプロシージャにメッセージがきません。
どこかで凡ミスしているのかもしれませんが、何か考えられる原因はありますでしょうか?

60 名前:デフォルトの名無しさん :04/06/27 21:19
自プロセス内なのか外なのか

61 名前:デフォルトの名無しさん :04/06/27 21:21
>>59
SetWindowLongは自プロセスのウィンドウしかサブクラス化出来ません。

62 名前:デフォルトの名無しさん :04/06/27 21:25
>>60-61
即レス感謝です。
作っているのはDLLでして、ダイアログを生成して、
WM_INITDIALOGがきたところで、SetWindowLogを呼ぶようにしています。

この場合、自プロセス内ということにならないでしょうか?

63 名前:デフォルトの名無しさん :04/06/27 21:32
>>62
ひょっとしてキー関連のメッセージをキャッチしようとしてる?
もしくはCallWindowProcをちゃんと呼んでる?

64 名前:59 :04/06/27 22:18
解決しました。
やはり凡ミスでしたOrz
サブクラス化したいリストビューの元々のプロシージャを、
GetWindowLong 関数を使ってWNDPROC型のグローバル変数に保存してたのですが、
自分が設定したプロシージャのプロトタイプの方もWNDPROC型にしていて、
実際の関数本体では
LRESULT CALLBACK MyListViewProc(HWND, UINT, WPARAM, LPARAM)
になっていたので、SetWindowLongからは、
WNDPROC型のプロトタイプの方しか見えてなかったことが原因みたいです。

失礼致しました。

65 名前:デフォルトの名無しさん :04/06/27 22:18
(・∀・)ノシ解決おめ〜

66 名前:デフォルトの名無しさん :04/06/27 23:44
エクスプローラみたいなのを作ってるんですが、
shell namespaceを使ってエントリの列挙をすると、
IEも列挙できますよね、しかもコイツBindToObjectが可能なので、
普通に進入できやがります。当然中にはなにも無いのですが。

候補としては
・エクスプローラでやっているように、IEのコンテナになる
・エントリのリストアップをするとき、IEを上手く弾く

の二通りが考えられるのですが、
どちらもIEのクラスIDを認識して特別扱いしないと出来ませんよね?
IEだけならいいのですが、似たようなデスクトップオブジェクトがあると
その都度手動で追加しないといけないのが気分が悪いです。

何か上手く扱う方法って無いでしょうか?


67 名前:デフォルトの名無しさん :04/06/27 23:45
ついでにソースです。
なんでBindToObjectできるんだか、ホント頭にきてます。

#include <windows.h>
#include <shlobj.h>
#include <iostream>

main()
{
CoInitialize(0);
HRESULT hr;
IShellFolder *psf, *pie;
ITEMIDLIST *pidl;
wchar_t *ie=L"::{871C5380-42A0-1069-A2EA-08002B30309D}";
SHGetDesktopFolder(&psf);
psf->ParseDisplayName(0, 0, ie, 0, &pidl, 0);
hr = psf->BindToObject(pidl, 0, IID_IShellFolder, (void**)&pie);
if ( SUCCEEDED(hr) ) {
std::cout << "BindToObject成功" << std::endl;
pie->Release();
}
psf->Release();
CoTaskMemFree(pidl);
CoUninitialize();
}


68 名前:デフォルトの名無しさん :04/06/28 00:00
スタティックリンクライブラリって勝手にOSからアンロードされることって
ありえないよね?
アンロードされたって騒いでいる奴がいたもんで。

69 名前:デフォルトの名無しさん :04/06/28 00:01
ない

70 名前:デフォルトの名無しさん :04/06/28 12:52
>>68
その馬鹿を晒してくれ。笑いが止まらん。

71 名前:デフォルトの名無しさん :04/06/28 12:59
>>58
他所でメモリが必要になって初めて解放されるような、定期的に解放されたような

72 名前:デフォルトの名無しさん :04/06/28 16:30
>>繊維状態としてLPARAMのLSBで取得できる

これの意味がよく理解できないのですが
教えていただけませんか。

73 名前:デフォルトの名無しさん :04/06/28 18:24
ウインドウをベッキーや2ch専用ブラウザのように分割したいのですが、
どのようにすれば分割できるのでしょうか?
また、それぞれにスクロールをつけることは可能でしょうか?

74 名前:デフォルトの名無しさん :04/06/28 18:44
>>73
A1 可能。二つウィンドウを並べる。
A2 当然可能。普通に付ければいい。

75 名前:デフォルトの名無しさん :04/06/28 18:46
MFC相談室(http://pc5.2ch.net/test/read.cgi/tech/1088084875/39
で質問したところ、こちら向きの話題だとアドバイスを受けました。

MFCのCComboBoxを使ってコンボボックスを表示させているのですが、
これのCBS_SORT属性を動的に変更することはできないのでしょうか?
具体的には、
 1:コンボボックスの中身をクリア
 2:SetWindowLongで変更
 3:再度追加
という動作をさせたいのですが、どうも動かないようです。
うまい解決法はないでしょうか?

76 名前:デフォルトの名無しさん :04/06/28 18:49
>>74さん
2つウインドウを並べるとはどういうことでしょうか?
具体的に教えてください。お願いします。

77 名前:デフォルトの名無しさん :04/06/28 18:58
ウィンドウを分割するって事は、ウィンドウが複数必要になるってこった。

78 名前:デフォルトの名無しさん :04/06/28 18:58
>>72
lParamのbit31で、ハンドラが「押し」で呼ばれたか「離れ」で呼ばれたかが判別できるってことだろ。
MSDNのKeyboardProcのページに書いてある。


79 名前:デフォルトの名無しさん :04/06/28 19:02
>>77さん。
ウインドウを2つ用意すれば、左右に分割されたウインドウができるということですか?
それを、どのように記述すればいいのですか?
よろしくお願いします。

80 名前:デフォルトの名無しさん :04/06/28 19:04
> 左右に分割されたウインドウができるということですか
それが分割ウィンドウに見えるかどうかは藻前次第だ。
がんがれ。じゃあな。
面倒がいやならMFCとか使え。

81 名前:デフォルトの名無しさん :04/06/28 19:05
APIで分割ウィンドウを作るような機能はない。自分で実装する必要がある。
それがイヤならMFCでCSplitterWndを使えばよい。まー普通はこっちを
選択するんだろうけど。

82 名前:デフォルトの名無しさん :04/06/28 19:07
http://pc5.2ch.net/test/read.cgi/tech/1083585833/834
http://pc5.2ch.net/test/read.cgi/tech/1088140233/73
マルチ

83 名前:デフォルトの名無しさん :04/06/28 19:09
質問です

昔はテンプレ3の
- Platform SDK Update
からSDKをダウンロードし、ローカルのHDDに保存できましたが、今は出来なくなったのでしょうか?

Win32APIなどについて調べられたのですが・・・・・


84 名前:デフォルトの名無しさん :04/06/28 19:10
79に付けたしですが、
hWnd1 = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW | WS_VSCROLL,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
hWnd2 = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW | WS_VSCROLL,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
とかして、まずWindowを2つ作るということですか?
Windowを2つできたら、その後はどうすればよいのでしょうか?
よろしくお願いします。

85 名前:デフォルトの名無しさん :04/06/28 19:11
>>83
できる。少なくともできた。

86 名前:デフォルトの名無しさん :04/06/28 19:12
>>84
悪いことは言わない。お前には無理だ。
あ  き  ら  め  ろ 。

87 名前:デフォルトの名無しさん :04/06/28 19:13
>>86に激しく同意

88 名前:デフォルトの名無しさん :04/06/28 19:20
>>73
MFCのCSplitterWndのソースをパクれば?
少なくとも、こんなところでいちいち説明できるような内容ではない。

89 名前:86 :04/06/28 19:29
まあ、お前には無理だろうし、あきらめたほうがいいんだが、それだけでは思考停止なので。
いわゆる分割ウィンドウは、単純にいえば、普通の子ウィンドウのサイズをユーザー操作で
変更できるだけのモノである。
まず、サイズ変更機能を持たない通常の子ウィンドウを配置したウィンドウを作成できるようになれ。
次に、(メニューとか)ユーザー操作を伴わず、子ウィンドウの大きさを計算し変更できるコードを書け。
その後、大きさを変更したいウィンドウ感にそれ用のウィンドウを配置するか、
親ウィンドウを表示するようにし、その部分がドラッグされたときに上記の計算を行え。

90 名前:デフォルトの名無しさん :04/06/28 19:33
WTLにもついてるよ

91 名前:デフォルトの名無しさん :04/06/28 20:05
>>75
コントロールのスタイルは、ものによってはCreateWindow時にしか効果が無いものがある。
多分CBS_SORTもその類じゃないかね。解決法としては、いったんコントロールを破棄して、
該当スタイルを有効にして作り直すのが一般的。

92 名前:デフォルトの名無しさん :04/06/28 21:20
>>84
まずはテンプレサイトを見るのが作法だと思う。
「猫でもわかる」の117章あたりにそれらしいネタの解説がある。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_117.htm

93 名前:75 :04/06/28 21:47
>>91
破棄⇒再構築で目的の動作をさせることができました。
大変助かりました。ありがとうございましたm(_ _)m

94 名前:84 :04/06/28 23:09
>>92
ありがとうございます。
参考にしてみます。

95 名前:デフォルトの名無しさん :04/06/29 08:40
.NET Framework の Char.GetUnicodeCategory のような文字の種別を識別したいのですが、
Win32API で同等の事を行う方法を教えてください。

96 名前:83 :04/06/29 09:23
>>85 様

1 ローカルプロクシを通さない
2 ActiveXのダウンロードと実行をON
3 IEキャッシュ削除
そして
4 OS再起動

によってダウンロード出来ました。
スレ汚し すみませんでした。


97 名前:デフォルトの名無しさん :04/06/29 11:41
他のアプリウィンドウのHWND取ってきて弄るプログラムを書いてるん抱けど
HWNDからコントロールの種類を判別できないですか?
ボタンとかツリービューとか。

98 名前:デフォルトの名無しさん :04/06/29 11:44
出来るよ。少なくとも標準コントロールなら。

99 名前:デフォルトの名無しさん :04/06/29 11:50
GetClassName

100 名前:デフォルトの名無しさん :04/06/29 11:52
どうやるの?
GetWindowLongを調べたけどスタイルとかUserDataとかはだめだった

101 名前:デフォルトの名無しさん :04/06/29 12:01
出来たよー
\ありがとう/

λ

102 名前:58 :04/06/29 14:19
>>71
レスthanks.

ソース等ありますか?

103 名前:デフォルトの名無しさん :04/06/29 16:30
もうひとつ質問です。
他のアプリのテキストの内容を取得しようとしても取得できません。
TreeView_GetItemを使ってるんだけど、用意した文字バッファになにも
入ってきません。

104 名前:デフォルトの名無しさん :04/06/29 16:41
>>103
試しに TVM_GETITEM 投げてみ。

105 名前:デフォルトの名無しさん :04/06/29 17:01
これじゃね?
http://homepage2.nifty.com/Mr_XRAY/Halbow/VCL08.html

106 名前:デフォルトの名無しさん :04/06/29 17:21
>>105
ありがとう、いまそこ見ながら書いたんだけど動かないです;;

//...HWND hcur; //ターゲットのWindowHandle
HTREEITEM ht = 0;
TVITEMEX ti;
DWORD proid;
HANDLE hProcess;
char* pCommon;

memset(&ti, 0, sizeof(TVITEMEX));
//ターゲットのプロセスにメモリを確保
GetWindowThreadProcessId( hcur, &proid );
hProcess = OpenProcess( PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, proid );
pCommon = (char*)VirtualAllocEx( hProcess, NULL, 256, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE );
//
ht = TreeView_GetRoot( hcur );
ti.mask = TVIF_TEXT;
ti.hItem = ht;
ti.pszText = pCommon;
ti.cchTextMax = 255;

DWORD readb;
TreeView_GetItem( hcur, &ti );
if( !ReadProcessMemory(hProcess,pCommon,ffname,256,&readb) ){
 printf( "mem error...\n" );
}
printf( "*** %s ***\n", ffname );
//開放
VirtualFreeEx(hProcess,pCommon,0,MEM_RELEASE);
CloseHandle(hProcess);


107 名前:デフォルトの名無しさん :04/06/29 17:44
いきなりソースだされてもよぉ

108 名前:デフォルトの名無しさん :04/06/29 19:56
ごめんなさい
えっとhcurにはターゲットのTreeViewコントロールのHWNDが入ってるんだけど
其処のプロセスをゲットしてVirtualAllocExは成功しているもよう。
WriteProcessMemoryをやるとRead...できちんと読めた。
hcurがきちんとTreeViewをさしてないのかとも思ったけど
TreeView_Expand( hcur, ht, ...)できちんとツリーは開閉した。
後僕に考えられる原因はTreeView_GetItemに渡すtiの初期化がまずいのかと
思ったが、しかしこれでいいよね… うわーn

109 名前:デフォルトの名無しさん :04/06/29 19:58
おっ、virusでも作ってるの?イイネイイネー

110 名前:デフォルトの名無しさん :04/06/29 20:28
>>108
TVITEMEX 自体を先方のメモリに取らないとダメじゃないの?

111 名前:デフォルトの名無しさん :04/06/29 21:27
どうでもいいけどヴァイラスって作った時点で犯罪?

112 名前:デフォルトの名無しさん :04/06/29 22:12
非アクティブウィンドウ時にも休止せず、処理を継続するアプリを作りたいの
ですが、APIで制御出来るのでしょうか。可能ならAPI名を教えて下さい。

113 名前:デフォルトの名無しさん :04/06/29 22:16
>>112
もともと非アクティブ時にもプロセスは休止しない。


114 名前:デフォルトの名無しさん :04/06/29 22:22
ただCPUの割り当ては少し減るんだった気がする

115 名前:デフォルトの名無しさん :04/06/29 22:24
エクスプローラでファイルコピーさせつつ他のアプリをアクティブにすると約3〜4割速度落ちるな。
なので俺はエクスプローラの優先度をhigherに設定してる。板違いだけど一応。

116 名前:112 :04/06/29 22:40
>>113-115 素早いレスありがとうございます。

アクティブ如何を気にする必要がなければ特別な記述は不要で、逆にRTSで非
アクティブ時には進行が止まる様なのは、その様な処理を敢えて組み込んでい
ると考えていいのでしょうか?
一定時間毎(?)にGetActiveWindowを発行し、返ったのが自分自身でなければ、
なんて事はやらないですよね(即時性がないですし)。アクティブかフォーカ
ス周りのWM辺りを利用するんでしょうか

117 名前:デフォルトの名無しさん :04/06/29 22:48
>>116
そうだよ。

118 名前:デフォルトの名無しさん :04/06/29 22:50
その名もWM_ACTIVEメッセージ。アクティブ化・非アクティブ化等を教えてくれる。

119 名前:デフォルトの名無しさん :04/06/29 22:57
>>58
SetProcessWorkingSetSizeでどう?
>>68
「勝手に」OSが削除することはないけど
明示的にFreeLibraryすれば解放できるから
おおかた騒いでる奴が参照カウントの管理を間違えたんだろ

120 名前:デフォルトの名無しさん :04/06/29 23:12
>>119
Dynamic Link ならともかく Static Link では参照カウントなんてないんじゃない?

121 名前:112 :04/06/29 23:14
>>117-118
やはりそうなるんですね。回答ありがとうございました。
over

122 名前:デフォルトの名無しさん :04/06/29 23:16
>>120
なくてもあまり困らないとは思うが、Win32ではスタティックDLLの
参照カウントも管理している。起動時は1だから一回FreeLibraryすると
メモリから消え去る(ただしexeは9xだったかNT系だったか忘れたが
どちらかは解放できない)。
意図的な使用例としては自己削除インストーラなんかがたまに使う。

123 名前:デフォルトの名無しさん :04/06/29 23:17
あ、スタティックリンクって.libをリンクする場合の話か。
完全に読み間違えてたorz

124 名前:デフォルトの名無しさん :04/06/29 23:22
DLLをインポートライブラリでリンクした場合の話だと思ってたんだが違うのか?

125 名前:デフォルトの名無しさん :04/06/30 00:05
何か話が混乱してるなw

インポートライブラリでDLLを使用する方法を
ロード時動的リンク(Load-Time Dynamic Linking)

実行中に LoadLibrary でDLLを使用する方法を
実行時動的リンク(Run-Time Dynamic Linking)

と言うそうだ。
正確に伝えるためにはきちんと使い分けた方が良いかもね。

C/C++ コンパイラレベルでは
明示的にコード中で LoadLibrary しない限り、呼んだ API
はみんなロード時動的リンクになる。

Cライブラリ等は
スタティックリンク (LIBC)
とロード自動的リンク (MSVCRT)
が選べるね。


126 名前:デフォルトの名無しさん :04/06/30 00:07
linuxなんかではlibcが外にあるようなうにゃうにゃ(ry

127 名前:デフォルトの名無しさん :04/06/30 00:10
あれも動的リンク

128 名前:デフォルトの名無しさん :04/06/30 00:30
> 明示的にコード中で LoadLibrary しない限り、呼んだ API
> はみんなロード時動的リンクになる。
/delayloadで実行時動的リンクを選べる
まあ中身は LoadLibrary してるだけなんだが
コード中に明示的に書く必要はなくなる

129 名前:デフォルトの名無しさん :04/06/30 01:03
チェックボックスつきリストビューで
特定のチェックボックスを無効化or非表示
ってできるのでしょうか?

130 名前:デフォルトの名無しさん :04/06/30 03:11
>>96関連
ActiveXを使ってコンポーネント選択してインスコする方式だと6時間経ってもCoreすら終わらなかったので
フルダウンロード( http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm )やったら
2分そこらで終わった。光でよかった・・・

131 名前:デフォルトの名無しさん :04/06/30 03:25
129じゃないですけど
129に絡んで、リストビューの中のチェックボックスをオン、オフしたときに
反応を得るにはどうすればよいのでしょうか?
ずっと悩んでいます、教えてください


132 名前:デフォルトの名無しさん :04/06/30 03:34
>>126
libcなんかは静的共有ライブラリといって、
アドレスのバインドはリンク時に、イメージのバインドはロード時にやるという代物だとか。
apacheモジュール(.so)あたりはDLLと同様の動的リンクらしいね。

133 名前:デフォルトの名無しさん :04/06/30 12:18
ネットで検索するとMSDN丸写しな関数リファレンスを載せてるサイトが
やたら多いんだけど彼らはいったい何を考えているんだろう。

134 名前:デフォルトの名無しさん :04/06/30 12:38
多少見やすいとか、そういった自己満足

135 名前:デフォルトの名無しさん :04/06/30 12:43
MSDNが最新にして最良のものだという考えに変わりはない。
以下でMSDNに対する愚見を述べさせてもらう。

MSDNには確かに誤りも存在するし、邦訳版は読みづらい(誤訳を避け、あまりに保守的な訳をしている)が、
英語版は素晴らしい。(ry

136 名前:108 :04/06/30 13:25
>>110
なるほど、其処まで考えが回りませんでした。ありがとう
…でもTVITEMをターゲットのプロセスに確保してもだめだった(つД;
ターゲットのプロセスをデバッガで見て確保されたエリアにWriteProcess、
ReadProcess... はできていた。だけどやっぱりTreeView_GetItemしても
変化が無い…

137 名前:デフォルトの名無しさん :04/06/30 16:05
VirtualTreeView だったりして

138 名前:デフォルトの名無しさん :04/06/30 16:08
> …でもTVITEMをターゲットのプロセスに確保してもだめだった

普通は自プロセスに確保して、適当にフィールドを設定してから相手プロセスの
メモリにコピーする。そしてそのポインタを使って TreeView_GetItem を
呼び出す。文字列バッファのオフセット値が間違ってるとか?

139 名前:デフォルトの名無しさん :04/06/30 16:11
まず、自分のプロセス内のTreeViewでうまくいくか試してみる

140 名前:デフォルトの名無しさん :04/06/30 16:20
>ti.pszText = pCommon;

先頭に TVITEM をコピーしたとき、ti.pszText のオフセットも変えてる?
文字列専用のプロセスメモリを確保しておくと簡単。




141 名前:108 :04/06/30 17:55
組んでるものはCUIコマンドのものなんで、別にプロジェクト作って
TreeViewのGetItemを試したら上手くいきました。
んでそのプロジェクトのTreeViewをコマンドでいじろうとして失敗しました。
以下CUIソース


142 名前:108 :04/06/30 17:56
//...HWND hcur; //ターゲットのWindowHandle
HTREEITEM ht = 0;
TVITEM ti, *pComTi;
DWORD proid;
HANDLE hProcess;
char* pCommon;

memset(&ti, 255, sizeof(TVITEM));
//ターゲットのプロセスにメモリを確保
GetWindowThreadProcessId( hcur, &proid );
hProcess = OpenProcess( PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, proid );
pCommon = (char*)VirtualAllocEx( hProcess, NULL, 256, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE );
pComTi = (TVITEM*)VirtualAllocEx( hProcess, NULL, sizeof(TVITEM), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE );
//
ht = TreeView_GetRoot( hcur );
ti.mask = TVIF_TEXT;
ti.hItem = ht;
ti.pszText = pCommon;
ti.cchTextMax = 255;
DWORD readb = -1;//


143 名前:108 :04/06/30 17:56
if( !WriteProcessMemory(hProcess,pComTi,&ti,sizeof(TVITEM),&readb) ){
printf( "mem error write...\n" );
}
memset(&ti, 0, sizeof(TVITEM));
TreeView_GetItem( hcur, &pComTi );
if( !ReadProcessMemory(hProcess,pComTi,&ti,sizeof(TVITEM),&readb) ){
printf( "mem error...ti\n" );
}
if( !ReadProcessMemory(hProcess,pCommon,ffname,256,&readb) ){
printf( "mem error...\n" );
}
printf( "*** %s ***\n", ffname );
//開放
VirtualFreeEx(hProcess,pComTi ,0,MEM_RELEASE);
VirtualFreeEx(hProcess,pCommon,0,MEM_RELEASE);
CloseHandle(hProcess);


144 名前:デフォルトの名無しさん :04/06/30 18:52
WinXPでMicrosoft Visual Studio .NET 2003を使ってるんだけど
WM_MOUSEWHEELが定義されてなく
ttp://www.asahi-net.or.jp/~uk8t-ktu/wincode/global/0010.htm
ここ見て解決は出来たんだけど
最初から定義されてないものなの?

145 名前:デフォルトの名無しさん :04/06/30 19:01
>>144
#if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
#define WM_MOUSEWHEEL 0x020A
#endif


146 名前:デフォルトの名無しさん :04/06/30 19:04
> if( !ReadProcessMemory(hProcess,pCommon,ffname,256,&readb) ){

ここの ffname はローカルバッファとして256バイト割り当て済み?

147 名前:デフォルトの名無しさん :04/06/30 19:31
サブスレッドがデータをセットしたら
寝ているメインスレッドを起こしてデータを読み取らせたいのですが
どういったやり方が一般的ですか?
いまはメインスレッドでfor(;;) Sleep(100);しながらフラグを監視してます。

148 名前:デフォルトの名無しさん :04/06/30 19:33
>>143
誤: TreeView_GetItem( hcur, &pComTi );
正: TreeView_GetItem( hcur, pComTi );
では?

149 名前:デフォルトの名無しさん :04/06/30 19:34
>>147
イベント。
CreateEvent, SetEvent, WaitForSingleObject, MsgWaitForMultipleObjects あたりを調べて。

150 名前:デフォルトの名無しさん :04/06/30 22:15
リストビューに関して質問です。
ソートの昇順・降順をあらわす三角印(カラムヘッダに表示されるやつ)はどうやったら表示されるのでしょうか?
自前で描画しないとダメ?

151 名前:デフォルトの名無しさん :04/06/30 22:24
>>150
標準じゃついてないな、漏れのはWin2kだけど

152 名前:デフォルトの名無しさん :04/06/30 22:31
>>150
Common Control V6(XP以降)なら可能。
2000以前に対応させようと思ったら、自前で描画する必要がある。
▼▲で誤魔化す手もあるが……。

153 名前:150 :04/06/30 22:40
>>152
thx
やっぱ自前描画が必要なのですね…

154 名前:150 :04/06/30 22:45
「カラムヘッダ」と「DC」でググったらよさげな情報みつかりました。
http://search.acty-net.ne.jp/mfc_search/archive/2000-2/msg02144.html
これを参考にしてみます。

「カラムヘッダ」「API」「ソートアイコン」とかでググってたので見落としてたようです。(;´Д`)

155 名前:デフォルトの名無しさん :04/07/01 02:58
ExitThread について質問です。Thread の薄いラッパクラスを作成中なんですが、
SDK のドキュメントでは LPTHREAD_START_ROUTINE のリターン後、暗黙的に ExitThread が呼ばれるとありますが
何らかの処理中にメインスレッドから ExitThread を呼んだ場合、適切な後始末が行われないのでしょうか。

156 名前:デフォルトの名無しさん :04/07/01 03:16
CreateThreadで作ったスレッドの場合は問題ない

157 名前:デフォルトの名無しさん :04/07/01 03:53
>>156
なるほど問題ないのですか。サンクスです。
因みに CreateThread で作成したスレッドに対してでした。抜けてましたね。すいませんん。

ところで ExitThread て明示的に呼び出す必要があるときってどんな時なんでしょう?
何らかの処理中に ExitThread を呼んだところで直ちにスレッドが終了するわけでは無いし(当たり前ですが)
イマイチ使いどころがわからんのですが…。

158 名前:デフォルトの名無しさん :04/07/01 08:59
C++の場合、デストラクタが呼ばれないような気がするけど
大丈夫ッスか?

159 名前:デフォルトの名無しさん :04/07/01 09:11
>>158
ダメです。
なので、ExitThread()は(余程注意しないと)使えません。

160 名前:デフォルトの名無しさん :04/07/01 10:52
スタティックDLL だってさ(プ

161 名前:デフォルトの名無しさん :04/07/01 11:01
不特定多数のウィンドウを作る際、
各ウィンドウに対する処理はどのようにして行うものなんでしょうか。
以前は

1 for文をまわしウィンドウを作成する。
 その際、外部で宣言したHWND型配列に各ハンドルを代入させる
2 プロシージャで引数として渡されるハンドルと、
 ウィンドウ作成時に用意しておいた各HWND配列から内容の同じものを
 探して見つける事で多数作られる中のどのウィンドウなのかを判別し
 それに応じて異なる処理をする。

この「どのウィンドウを現在扱っているか」をプロシージャ内で判別する方法が
ややこしいし、なんだかきたないので、
スマートな方法があったら教えてください
根本的に間違っていたら正してやってください
おねがいします

162 名前:デフォルトの名無しさん :04/07/01 11:38
ぶらくらはいくない。

163 名前:デフォルトの名無しさん :04/07/01 11:39
>>161
SetProp APIを使ってウィンドウハンドルに対して付加情報をむすびつけておくってのはどうよ?

164 名前:デフォルトの名無しさん :04/07/01 12:08
ある文字の種別は GetStringTypeEx API をつかえば取れますが、
UNICODE で規定されているスクリプトタイプを調べる API はありますか?

165 名前:デフォルトの名無しさん :04/07/01 12:15
>>161
for 分で Create しつつ登録する仕組みだと、WM_CREATE あたりのメッセージが
発生するときにはまだ登録されていなくて不便です。

なので、WM_NCCREATE を受けた段階で、CREATESTRUCT 経由で渡されたウィンドウを
識別する情報 (CreateWindow時に作っておく) と hWnd のマッピングを生成すると良いでしょう。
163 の言うように SetProp で登録しても良いし、std::map に入れたりしておいても良い。


「この「どのウィンドウを現在扱っているか」をプロシージャ内で判別する方法」は
GetProp とか std::map::operator [] 一発だから、別にややこしくはないと思う。

166 名前:デフォルトの名無しさん :04/07/01 13:30
ふつー、ウィンドウ毎の情報はC++なりのクラスのメンバに格納して、そのオブジェクトへのポインタを
SetPropなりSetWindowLongなりThunkなりでウィンドウに関連付けて終わり。

167 名前:デフォルトの名無しさん :04/07/01 13:43
>>163 >>165 >>166

ありがとうございます
今さらで申し訳ないのですがC++は自分は使えなくて
C言語でやっています
SetProp関数など今まで調べていたのですが
基本的な用語すらちゃんと理解できていないみたいで
具体的にどうすればいいかわかりませんでした
hWndのマッピング という言葉もよくわからないのです
ずうずうしいとは思いますが
相当なアホでもわかるように教えてもらえないでしょうか


168 名前:デフォルトの名無しさん :04/07/01 13:56
C++を使えないってのがオブジェクト指向を理解できない知らないって意味なら悪いことは言わんからオブジェクト指向について勉強しろ。そのほうが後々楽になる。


169 名前:デフォルトの名無しさん :04/07/01 14:17
ウインドウハンドルと関連データと対応付けてメッセージループ上で使用するのは、C++使う使わないに限らず、
オブジェクト指向とは関係ない、ただのロジック。
何故C++を使うだけでオブジェクト指向と言いたがるのか、さっぱり理解できない。

170 名前:デフォルトの名無しさん :04/07/01 14:23
>>167
マッピングっていうのは、「hWnd から必要な情報への対応表」を作成するということ。
そうして、>>165 の前半でいっているのは、

for (int window_id = 0; window_id < 100; window_id++)
{
 my_data_table[window_id].data = hogehoge();
 my_data_table[window_id].hWnd = CreateWindow(...);
}
のようにしてしまうと、WM_CREATE の時にはまだ my_data_table[].hWnd が設定されていなくて
不便だから、CREATESTRUCT 経由で(この例だと) window_id を渡して、WM_NCCREATE で
my_data_table[window_id].hWnd = hWnd を実行すると良いよ、っていう話。

171 名前:デフォルトの名無しさん :04/07/01 14:38
>>167
自分で調べてどうにかしようって気が無いんだったら、
グローバル変数に入れてって既存の方法使えば?

172 名前:デフォルトの名無しさん :04/07/01 14:40
>>169
苦労したんだよ。察してあげな。

173 名前:デフォルトの名無しさん :04/07/01 15:33
BMPを表示させる方法はテンプレサイトをみて分かったのですが、
JPGを表示させる方法が分かりません・・・
簡単にJPGを扱う方法はありませんか?

174 名前:デフォルトの名無しさん :04/07/01 15:39
gdiplus系をぐぐれ

175 名前:108 :04/07/01 15:50
レストンクス
>>148を修正したら動きました
λ<アリガトー

176 名前:デフォルトの名無しさん :04/07/01 15:51
>>173
あとはOleLoadPictureとかLoadImageとか。
ただしいずれもOSバージョンに制限あり。確認汁。

177 名前:デフォルトの名無しさん :04/07/01 15:52
>>174
サンクスです

178 名前:デフォルトの名無しさん :04/07/01 16:57
依存するのはOSのバージョンではなくIEのバージョン。

179 名前:デフォルトの名無しさん :04/07/01 17:13
釣られませんよ( ̄ー ̄)ニヤリッ

180 名前:デフォルトの名無しさん :04/07/01 17:31
OleLoadPictureは組み込まれているモジュールによって、出来ることが決まる。
JPEG用のモジュールが入っているのがIEなんだが、けっこう知らない人がいるのか。
その他、標準コントロールの拡張機能もIEのバージョンに依存する部分が多い。

181 名前:デフォルトの名無しさん :04/07/01 18:34
Win32API質問箱 Build19
http://pc5.2ch.net/test/read.cgi/tech/1084697545/

>949 名前:デフォルトの名無しさん[sage] 投稿日:04/06/24 19:06
>今までDLLからウインドウを作ろうなんて考えもしなかったんだけど、
>DLLからCreateWindowをするとき、HINSTANCEにはDLLのインスタンスハンドルを指定するのですか?
>それともWinMainのHINSTANCEを指定すればいいのですか?
>NT系だと無視されるようなので、どちらが正しいかってのがちょっと分からないのですが。

催促ですみません、これわかる人いませんか?


182 名前:167 :04/07/01 18:47
>>170

わかりました!
ありがとうございます
これで外部変数は使わないで済みます。
SetPropの使い方については自分で勉強しながら確認していこうと思います。

>>168

オブジェクト指向ですか。
もうわからない事だらけでやらなきゃいけないこと
山のようにあるっぽいですが、色々調べて勉強してみます

>>171

一応結構長い時間調べたり、にらめっこしたりしてみたのですが
でもわかりませんでした。精進します

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

183 名前:デフォルトの名無しさん :04/07/01 18:47
(´∀`)ノシがんばってねー

184 名前:デフォルトの名無しさん :04/07/01 18:58
>>181
試したわけじゃないけど、
作ろうとしてるウィンドウがどこにあるリソース(メニューとか)を使うかによるんじゃない?
普通はDLLに使うリソース入れるだろうから、DLLのHINSTANCEだと思うけど。

185 名前:デフォルトの名無しさん :04/07/01 19:05
>>181
ウィンドウプロシージャの入っているモジュールの hInstance。

186 名前:デフォルトの名無しさん :04/07/01 19:06
184 の方が正解っぽいぽ

187 名前:デフォルトの名無しさん :04/07/01 19:19
>>184-186
レスありがとうございます。
ウインドクラスの場合は>>184で正しいと思うのですが、
CreateWindowの場合、メニューはリソースのIDではなく
メニューハンドルで指定しますよね?
リソースは影響しない気もするのですが、、、。

188 名前:デフォルトの名無しさん :04/07/01 19:20
とりあえずやってみれば?

189 名前:デフォルトの名無しさん :04/07/01 19:23
>>188
現状触れる範囲ではNT環境しかないもので、試せないのです。

190 名前:デフォルトの名無しさん :04/07/01 19:24
そんなときこそVirtualPC(or VMware)ですよ

191 名前:デフォルトの名無しさん :04/07/01 19:27
結局VirtualPCに9x系のOSインスコしないと動かんぞ。

192 名前:デフォルトの名無しさん :04/07/01 20:29
>>181
プログラミングWindowsでは「どっちでも構わんが私はDLLを呼び出した側のインスタンスハンドルを使うことをすすめる」と書いてある。

193 名前:デフォルトの名無しさん :04/07/01 21:57
>>192
ありがとうございました


194 名前:デフォルトの名無しさん :04/07/01 22:33
ウィンアプリで長方形の範囲を塗りつぶすAPIはあるのでしょうか。
今はSetPixelVで点をいっぱい表示したり、
CreateFontで文字サイズを変えたのを1文字を表示する、
方法でやっているのですが、あるなら教えてください。

195 名前:デフォルトの名無しさん :04/07/01 22:38
FillRect

196 名前:194 :04/07/01 22:55
>>195
ありがとうございます。やってみます。

197 名前:デフォルトの名無しさん :04/07/01 22:57
ExtTextOutのほうが楽だけどな

198 名前:194 :04/07/01 23:20
>>197
ありがとうございます。こちらもやってみます。

199 名前:デフォルトの名無しさん :04/07/01 23:53
デバイスコンテキストに描画領域を設定する方法ってありませんでしたっけ?
具体的にはWM_ERASEBKGNDである一部分だけ、再描画を停止したいのですが。

200 名前:デフォルトの名無しさん :04/07/01 23:58
IntersectClipRect()みたいなやつか?

201 名前:デフォルトの名無しさん :04/07/02 02:43
ListViewに数万アイテムを登録するとすごく時間がかかるのですが、
何とかこれを高速化する方法ないでしょうか?
ファイラーとかだとSysListView32のコントロールでも一瞬で表示されてるので、
やりようはあると思うのですが。

202 名前:デフォルトの名無しさん :04/07/02 02:50
仮想リストビュー

203 名前:デフォルトの名無しさん :04/07/02 05:53
親をHWND_DESKTOPにしてボタン作ったらスタイルにBS_PUSHBUTTONが含まれなくなりました
あとからSetWindowLongPtrとかやってもだめでした
いまのところ描写とかはうまくいってるのですがボタンであるのにBS_PUSHBUTTONでないと
問題が起きるとこってありますか?


204 名前:デフォルトの名無しさん :04/07/02 06:59
>203
C:\bcc55\Include>grep BS_PUSHBUTTON winuser.h
File winuser.h:
#define BS_PUSHBUTTON 0x00000000L

205 名前:デフォルトの名無しさん :04/07/02 07:08
>>204
あ... どうりでふくまれないはずですね
でも電卓とかのボタンをspy++で調べるとBS_PUSHBUTTONがあるのですが
今回作ったプログラムのボタンは、みかけは電卓とかのと一緒なのにふくまれません
なんでだろう...

206 名前:デフォルトの名無しさん :04/07/02 10:00
文書管理用のツールを作ってみたいんだけど、勉強がてらグリッドやツリービュー、
画像のサムネールや拡大・縮小、なども自作してみたいです。
でもグリッド一つとってもどう実装していいのかさっぱり分かりません。

参考になる本はないですか?
または参考になるソースを入手するにはどうすればいいですか?


207 名前:デフォルトの名無しさん :04/07/02 10:05
イベントとメッセージって何がどうちがうんですか?

208 名前:4 ◆MwGQyQRf/o :04/07/02 10:12
とりあえず、海外着いた

209 名前:203.208.86.147 :04/07/02 10:14
空港からだけど、アドレスはどうなんだろ?

210 名前:デフォルトの名無しさん :04/07/02 10:27
>>209
オーストラリア乙

211 名前:デフォルトの名無しさん :04/07/02 10:58
>>209
……楽しんでこいよ。

212 名前:デフォルトの名無しさん :04/07/02 11:01
>>207
イベントはキーを押したり、マウスを動かしたり、タイマーの時間が経ったり、
起こった事で、メッセージはそれをOSがプログラムに伝えてくるものかな。

213 名前:デフォルトの名無しさん :04/07/02 11:32
>>212
Windowsについてまだ勉強始めたばかりなのですが、
イベント=スレッド間の同期通信
メッセージ=スレッド間の非同期通信
という理解でとりあえずはいいんでしょうか?

214 名前:デフォルトの名無しさん :04/07/02 11:45
>>213
全く違う。
イベントってのは、英語の event そのもの。メッセージも message そのもの。
一般名詞であって、そんなに狭い意味を持って使われてるわけじゃない。

Windows の中では、イベントというと
・イベントドリブン型プログラム、という文脈でのイベント。
 Windowメッセージのうち、ユーザやシステムから非同期的に発生するもの
 WM_LBUTTONDOWN とか。WM_SETFONT などは普通「イベント」とは言わない。
・CreateEvent で作られた同期・排他・待ち合わせ用オブジェクト
・COM オブジェクトからの event sink インターフェイスへの呼び出し。
など諸々。

メッセージは、
・GetMessage や PeekMessage で得られる、ウィンドウメッセージ
・MAPI で転送されるメッセージ

など。

215 名前:デフォルトの名無しさん :04/07/02 12:19
♪これっくらいのっ
 イベント箱にっ
 おにぎり おにぎり
 チョイと詰めて
 あがり コーヒー ゆず さくらっ


216 名前:デフォルトの名無しさん :04/07/02 13:34
>>201
今MSDN開けない環境なんでうろおぼえだけど、
リストの更新(追加)時に更新描画をさせないようにするメッセージかなんかがあったはず。
それで描画をOFFにしておけばそこそこ速度が稼げた気がする。

217 名前:デフォルトの名無しさん :04/07/02 15:37
>>216

SendMessage(hListView, WM_SETREDRAW, 0, 0);

ここで項目追加

SendMessage(hListView, WM_SETREDRAW, 1, 0);

218 名前:デフォルトの名無しさん :04/07/02 16:41
すっげー初歩的な質問かもしれないけどさ

WIN32APIって何?

219 名前:デフォルトの名無しさん :04/07/02 17:06
>>218
32ビット版Windowsが用意している関数群。
Cのライブラリ関数には必要ないけど、Windows用プログラム製作には必要なものが揃っている。

220 名前:デフォルトの名無しさん :04/07/02 17:06
>>218
>>3

221 名前:デフォルトの名無しさん :04/07/02 19:31
>>216-217
201じゃないが、いい事を教えてもらった。Thx

222 名前:デフォルトの名無しさん :04/07/02 19:32
>>219
必要なくはないだろ。


223 名前:デフォルトの名無しさん :04/07/02 19:33
MSVCRTの扱いは微妙なとこだが・・・

224 名前:デフォルトの名無しさん :04/07/02 19:50
>>215
名古屋出身かよ!

225 名前:デフォルトの名無しさん :04/07/02 22:49
WinMain関数について質問なんですが、MSDNに

戻り値
関数が WM_QUIT メッセージを受け取って正常に終了する場合は、メッセージの wParam パラメータに格納されている終了コードを返してください。関数がメッセージループに入る前に終了する場合は、0 を返してください。

と書いてあります

しかし、DirectX9のマイクロソフトのサンプルコードには、

// Initialize Direct3D
if( SUCCEEDED( InitD3D( hWnd ) ) )
{
// Show the window
ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );

// Enter the message loop
MSG msg;
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}

UnregisterClass( "D3D Tutorial", wc.hInstance );
return 0;
}

と0を返しています
これでもいいのでしょうか?

226 名前:デフォルトの名無しさん :04/07/02 22:51
WinInetで接続時のタイムアウトを設定する方法はありますか?
INTERNET_OPTION_CONTROL_CONNECT_TIMEOUTとか
設定してみたけど反映されてないっぽいのですよ・・

・・どなたかご存知ないでしょうか?

227 名前:デフォルトの名無しさん :04/07/02 22:56
IE5.5だかあたりの時代のWinInetはタイムアウトがまともに動かないんで非同期API使って自力でタイムアウトしろとか言われてた気がするが。

228 名前:デフォルトの名無しさん :04/07/02 23:03
>>225
WM_DESTROYでPostQuitMessage(0);なんて決め打ちしていたら別に同じ。
それにWinMain(main)の戻り値はWindowsが使うんじゃなくて、ユーザが使うものなんだけど、
ウィンドウズではまず間違いなく使われていない(それに使う手段がないに等しい)から別にいい。

229 名前:デフォルトの名無しさん :04/07/02 23:13
>>228
そうなんですか
プログラム終了時に、0が返ってくるとなにかxpとかがカチンと来るのかなと思っていたのですが、
大丈夫なようですね

230 名前:デフォルトの名無しさん :04/07/02 23:29
>>227
あーやっぱりだめですか・・。

非同期APIつーのはこの辺ですかね?
http://support.microsoft.com/default.aspx?scid=kb;EN-US;275046
ちょっと、やってみます。



231 名前:デフォルトの名無しさん :04/07/03 00:45
>>228
スタートアップルーチンが使ってるってことはない?


232 名前:デフォルトの名無しさん :04/07/03 01:08
>>231
少なくとも俺の経験上は、無い。

233 名前:デフォルトの名無しさん :04/07/03 04:39
gdi+でjpg画像から、ビットマップのGetPixelのように
1ピクセルの画素値を抜き出すのってどのようにすれば可能でしょうか?
よろしくお願いいたします。

234 名前:Windowsマンセー :04/07/03 07:48
>>214
レスありがとうございます。
Advanced Windows 3rdを古本屋で手に入れました。
カーネルオブジェクトという観点から綺麗に書かれていて
これ、とても解り易くて良い本です。
よく読んでから出なおしてきます。

235 名前:デフォルトの名無しさん :04/07/03 10:07
ListCtrlに数値を表示する際にカンマ区切りで表示したいわけですが
何かオプションでも有りませんでしょうか。
そういうの良く見かけますけど全部自分で区切って登録してるのかな?

236 名前:デフォルトの名無しさん :04/07/03 10:21
>>235
カンマ区切りって、桁区切り表示のこと?
なら自分で実装するしかない。

237 名前:デフォルトの名無しさん :04/07/03 11:25
まあ、自分で実装しても難しくも何ともないから、おとなしく作っとけ。

238 名前:235 :04/07/03 11:45
無い様なのでそうすることにします。
桁区切りならGetNumberFormatで出来ますし。


239 名前:デフォルトの名無しさん :04/07/03 14:37
>>238
ライブラリ化しとくと便利かも

ところで、9xでWNetAddConnection2使ってネットワークドライブに割り当てた
Server2003の共有フォルダ(NTFS)を、
9x側がFATって誤認識することがあったんだが、なんか情報持ってる香具師いないか?

9x系全般で再現、同一セグメントで発生した上クライアントPCの環境には特に縛られてない模様で、
再現手順もトリガもまったくわからん状態で困ってるんだが

ローカルディスクならブートレコード読み損なったときにFATと読み違えることも
あるらしい(見たこと無い)が…?



240 名前:デフォルトの名無しさん :04/07/03 15:14
別に作ったテキストファイルを読み込ませて、
画面に表示する方法を教えて下さい。


241 名前:デフォルトの名無しさん :04/07/03 15:16
1) CreateFile()でファイルを開きます
2) ファイルの中身を読み出します(バッファ確保注意)
3) テキストウィンドウを作って2)で読んだ中身を放り込みます

242 名前:デフォルトの名無しさん :04/07/03 15:27
>>241
すばやいお答えありがとうございます

243 名前:デフォルトの名無しさん :04/07/03 15:51
>>239
ネットワークドライブの実際のフォーマットを知ってどうしようっての?
何か意味があるとは思えないが

244 名前:デフォルトの名無しさん :04/07/03 16:19
ファイル名の制約(8.3かどうか,大文字小文字を区別するか,長さ制限)を、
単にNTFSかFATかで区別しているとヤバいかもしれんね。
ちゃんとAPI叩いてればいいんだろうけど・・・

245 名前:デフォルトの名無しさん :04/07/03 16:23
mmapfileにCの文字列処理関数使った場合ファイルの末尾で'\0'でちゃんと止まってくれるの?

246 名前:デフォルトの名無しさん :04/07/03 16:31
意味が分からん
mapした領域オーバーしたらメモリ保護エラーだろ

247 名前:デフォルトの名無しさん :04/07/03 16:56
>>244
>単にNTFSかFATかで区別しているとヤバいかもしれんね。

そりゃ論外すぎる…

248 名前:デフォルトの名無しさん :04/07/03 17:38
「ひまわり」とか「TTS」でWIN32APIって使えるのか?

249 名前:デフォルトの名無しさん :04/07/03 17:55
>>244
>>247
FATと誤認識されたドライブを開いて[新規作成]→[テキストファイル]
…orz
まあ、9xが論外というならそれには激しく同意だが


250 名前:デフォルトの名無しさん :04/07/03 17:58
>>249
なにか問題が?

まさか、書込みできないFATを想像してないわけじゃないよね?


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