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

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

Win32API質問箱 Build32

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

  ∧_∧
 ( ´∀`) < 0x20

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

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


2 :デフォルトの名無しさん:2005/05/28(土) 18:18:52
-過去スレ
Build31:http://pc8.2ch.net/test/read.cgi/tech/1114762194/
Build30:ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
Build29:ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
Build28:ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
Build27:ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
Build26:ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
Build25:ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
Build24:ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
Build23:ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
Build22:ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
Build21:ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
Build20:ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/★
Build15:ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/★
Build14:ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:ttp://pc.2ch.net/tech/kako/991/991576947.html

3 :デフォルトの名無しさん:2005/05/28(土) 18:18:56
ニダ

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

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

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

>>3
プッ

5 :デフォルトの名無しさん:2005/05/28(土) 18:37:07
ごんた

6 :デフォルトの名無しさん:2005/05/28(土) 18:46:29
無駄無駄無駄ァァァァァ

7 :デフォルトの名無しさん:2005/05/28(土) 19:05:45
七面鳥

8 :デフォルトの名無しさん:2005/05/28(土) 19:17:45
うっかり八兵衛

9 :デフォルトの名無しさん:2005/05/28(土) 19:18:37
九重佑三子のコメットさん

10 :デフォルトの名無しさん:2005/05/28(土) 19:19:53
十兵衛@ハレンチ学園

11 :デフォルトの名無しさん:2005/05/28(土) 19:34:25
獣医乳首

12 :デフォルトの名無しさん:2005/05/28(土) 20:06:46
女子十二楽坊

13 :デフォルトの名無しさん:2005/05/28(土) 20:14:04
阪急十三駅

14 :デフォルトの名無しさん:2005/05/28(土) 20:15:18
尾道市十四日町

15 :デフォルトの名無しさん:2005/05/28(土) 21:11:41
十五少年漂流記

16 :デフォルトの名無しさん:2005/05/28(土) 21:15:10
http://www.microsoft.com/downloads/details.aspx?familyid=EBA0128F-A770-45F1-86F3-7AB010B398A3&displaylang=en
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm

17 :デフォルトの名無しさん:2005/05/28(土) 21:15:41
RegisterClipboardFormatで、
自分専用のクリップボードフォーマットの番号をOSから頂いたんですが、
この情報はレジストリに登録されるのでしょうか?
それとも、一時的なもので、再起動してRegisterClipboardFormatすると
再度割り当てが行われるものなのでしょうか?
(極力レジストリは汚したくないもので・・・)


18 :デフォルトの名無しさん:2005/05/28(土) 21:23:49
一時的だよ

19 :17:2005/05/28(土) 21:28:09
>>18
ありがとうございます。
心置きなく使えます。

20 :デフォルトの名無しさん:2005/05/28(土) 22:07:21
> OSから頂いた
わろた

21 :デフォルトの名無しさん:2005/05/28(土) 22:07:32
"C:\\"のプロパティ(Explorerの右クリックと同じもの)を表示するのはどうすればいいですか?

22 :デフォルトの名無しさん:2005/05/28(土) 22:30:34
>1Z

23 :デフォルトの名無しさん:2005/05/28(土) 22:35:48
>>21
ShellExecuteの2番目の引数をTEXT("properties")にしたらいけるんじゃない?

24 :デフォルトの名無しさん:2005/05/28(土) 23:06:43
CreateDialogParamでダイアログボックス何個か作って各々WM_MOVEきたら座標を記録して終了時に保存、
起動時に読み込んでMoveWindowで位置を復元してみたところ
xyともに+3pixずれてるんですがそういうもんなんでしょうか。

25 :デフォルトの名無しさん:2005/05/28(土) 23:12:19
違います

26 :デフォルトの名無しさん:2005/05/28(土) 23:12:20
>>24
WM_MOVEはクライアント領域で、
MoveWindowはウィンドウ全体の座標ですよ。

27 :デフォルトの名無しさん:2005/05/29(日) 00:35:31
質問失礼します。
キャレットが表示されたら処理を行いたいのですが
キャレットが表示された、されない、の識別方法が解りません。
ウィンドウに左右されない
キャレットの状態を監視する方法がさっぱりです・・・。
どうすればいいのでしょうか?

28 :24:2005/05/29(日) 00:46:01
レスありがとうございました。多謝。

29 :デフォルトの名無しさん:2005/05/29(日) 00:46:07
WM_SETFOCUSとか?

30 :デフォルトの名無しさん:2005/05/29(日) 01:39:51
>>17
レジストリが気になるなら、れぐもんでも使って変更点調べてみ。

31 :デフォルトの名無しさん:2005/05/29(日) 01:44:44
3D関連のAPIは無いのでしょうか?
もしくはDCに書き込めるフリーの3Dライブラリ無いでしょうか?
ワイヤーフレーム、球、半透明、程度の機能でいいんですが、、、
(独自ウインドウに書き出すようなのはいくつか見つけました)


32 :デフォルトの名無しさん:2005/05/29(日) 01:51:27
DirectXはお嫌い?

33 :31:2005/05/29(日) 02:08:13
DirectXとOpenGLは無しでお願いします。
あまり大層じゃなくやりたいので、、、


34 :デフォルトの名無しさん:2005/05/29(日) 02:21:48
DirectGL作れ

35 :デフォルトの名無しさん:2005/05/29(日) 03:22:14
OpenGL = IndirectX

36 :デフォルトの名無しさん:2005/05/29(日) 03:48:20
>>31
大層なものじゃなくてもDirectX使ったほうが楽な結果に終わることもあるよ
GDIのみ→GDI+→DirectXと結局作り変えてる俺

ご利用は計画的にorz


37 :デフォルトの名無しさん:2005/05/29(日) 04:11:54
つーか、GDI+DIBSectionあたりでガリゴリやるほうがDirectXよりよっぽど大層なことだろ

38 :デフォルトの名無しさん:2005/05/29(日) 04:21:38
>>31
MoveToEx();
LineTo();


39 :デフォルトの名無しさん:2005/05/29(日) 11:54:24
ウインドウメッセージやスタイルを,0x0201→WM_PAINTといった感じに,数値から文字列に変換する方法を探しています。
FormatMessageの様な便利なAPIは用意されてないのでしょうか?

40 :デフォルトの名無しさん:2005/05/29(日) 12:26:09
前スレ1000は、ギャグのつもりでやっちゃたんだろうか

41 :デフォルトの名無しさん:2005/05/29(日) 13:23:03
>>39
ないよ
windows.hのWM_〜部分を全部持ってきて
Cならマクロで値と文字列のテーブル作るのが簡単
#defile WM_DEF(msg) {msg, #msg},
struct {
UINT msg;
const char *msg_str;
} msgtbl[] = {
WM_DEF(WM_CREATE)
WM_DEF(WM_DESTROY)
WM_DEF(WM_COMMAND)


};


struct {
UINT msg;
const char *msg_str;
} msgtbl[] = {
{WM_CREATE, "WM_CREATE"},
{WM_DESTROY, "WM_DESTROY"},
{WM_COMMAND, "WM_COMMAND"},

};
というのができる

42 :デフォルトの名無しさん:2005/05/29(日) 13:23:48
すいません、質問させてください。
MBCSかどうかをチェックするAPIがあったはずですが、
忘れてしまいました。
今Googleで調べてますが、ご存知な方がいらっしゃいましたら、教えていただけないでしょうか?

よろしくお願いいたします。

43 :デフォルトの名無しさん:2005/05/29(日) 13:28:29
>>42
IsDBCSLeadByte()
あとCharNext()とCharPrev()もある。

44 :42:2005/05/29(日) 13:32:37
>>43
即答いただきまして、ありがとうございます。
助かりました。

45 :デフォルトの名無しさん:2005/05/29(日) 15:01:34
キーボードやマウスの操作を無効にしたいと思いBlockInputを使ってみたのですが
Windows95などでは使えないみたいなんです。Hookする以外に方法は無いでしょうか?

46 :デフォルトの名無しさん:2005/05/29(日) 17:22:55
>>41
ありがとうございます。
Spy++等で表示されてるのを見てひょっとしたらと思ったのですが用意されてないのですね。
てきとーに置換してテーブル作ることにします。

47 :デフォルトの名無しさん:2005/05/29(日) 18:08:57
ttp://www.kumei.ne.jp/c_lang/sdk/sdk_100.htm
ここのスクロール量の正規化について疑問があるので、教えてください。
>dy = max(-1 * si.nPos, min(dy, si.nMax - si.nPos));
なのですが、外側のmaxが必要になるケースが思いつかないのですが、どんなときですか?

48 :デフォルトの名無しさん:2005/05/29(日) 18:16:40
その前の章に解説があるようだが?

49 :デフォルトの名無しさん:2005/05/29(日) 18:20:44
すいません、どうしてもわからなかったんで質問させてください。
↓このアプリのように、トレイに表示されているアイコンに対して、外部からクリック操作をするには
どのようなAPIを使えばいいんでしょうか?
http://www.forest.impress.co.jp/article/2005/05/24/traycommand.html

50 :デフォルトの名無しさん:2005/05/29(日) 18:23:59
おとなしくそのアプリを使えよ。

51 :49:2005/05/29(日) 18:29:03
>>50
うーん、自アプリにこの機能を組み込みたいんですよね。
どうかお願いします。

52 :デフォルトの名無しさん:2005/05/29(日) 18:29:25
こぴぺっぽい前スレ998だけど、北斗の拳は実写版があるぞ。
たしかハリウッドで。

53 :デフォルトの名無しさん:2005/05/29(日) 18:30:20
>>48
ありがとうございます、でも分かりませんでした。
外側のmaxはスクロール後の位置がマイナスにならないように正規化するためのものですよね。
でも、SetScrollInfoはオーバーフローとアンダーフローを自動的に補正してくれます。
また、内側のminでの計算でnPageが考慮されていないのでオーバーし放題です。



54 :デフォルトの名無しさん:2005/05/29(日) 19:04:27
( ・ω・)∩先生!質問です!

[hoge]
hage=100,200,300

という感じで一つのキーに複数の整数パラメータがあるiniファイルで
二つ目以降のパラメータを整数型で取得する方法は無いのでしょうか?

GetPrivateProfileIntは試してみたけど一つ目のパラメータしか取れないみたいだし、
GetPrivateProfileStructは文字コードのまま構造体に放り込むだけだし・・・
やっぱりGetPrivateProvileStringで文字列から整数に変換するしか方法はないんでしょうか?

55 :デフォルトの名無しさん:2005/05/29(日) 19:08:00
>54
API だけだと無理だと思う。素直に解析しましょう。
あるいは、ini ファイル側の仕様を変えて

[hoge]
foo1=100
foo2=200
foo3=300

みたいにするか。

56 :デフォルトの名無しさん:2005/05/29(日) 19:23:09
MFCなら GetProfileBinary WriteProfileBinary があるんだが


57 :54:2005/05/29(日) 20:41:08
>>55
やっぱり無理なんですね(´・ω・`)
作ろうとしているのが他の人が作ったソフトのiniファイルを編集するツールなので
iniファイルの仕様を変えることができないので素直に解析するようにします。

>>56
「へぇ〜そんな関数があるのか」とMSDNライブラリを見てみたけど
MSDNライブラリに載っていなかったのでぐぐったらあっさり見つけました。
これなら希望通りの動作をしそうですね。
今回はMFCを使わないのですが、MFCを使うことがあれば利用したいと思います。

もう一つ質問なんですが、
文字列を整数型に変化するにはatoiなどの標準ライブラリの関数を使うしかないのでしょうか?

初歩的な質問ばかりで申し訳ないですがよろしくお願いします。

58 :デフォルトの名無しさん:2005/05/29(日) 20:52:52
>>57
っ[ 文字コード表 ]

59 :デフォルトの名無しさん:2005/05/29(日) 20:54:57
>>57
StrToInt

60 :デフォルトの名無しさん:2005/05/29(日) 22:24:32
>>57
APIでなくてもいいならsscanf()

61 :デフォルトの名無しさん:2005/05/29(日) 23:52:26
>>49
Spy++でメッセージを拾うとか、
ApiMonで呼んでいるAPIを見るとか。

62 :デフォルトの名無しさん:2005/05/30(月) 01:00:11
そんな面倒なことやってられないからここで聞いているんだろうに、
使えない奴は答えるなよ、ボケ

63 :54=57:2005/05/30(月) 03:36:45
StrToIntを試してみたら希望通りの動作をしたので今回はStrToIntを使うことにしました。

初心者丸出しの質問に答えてくださった皆さんありがとうございました。

・・・もっと勉強しなきゃ・・・sscanfも知らなかったし(;´д`)

64 :デフォルトの名無しさん:2005/05/30(月) 05:18:19
>> 49

www.autohotkey.com

オープンソースらしい.

65 :デフォルトの名無しさん:2005/05/30(月) 08:17:32
リストビューの横スクロールバーだけ自動で出現しないようにする方法ありませんか?

66 :デフォルトの名無しさん:2005/05/30(月) 08:54:04
>>65
カラム幅を制御して横スクロールバーのいらない寸法を維持する。

67 :siokosho:2005/05/30(月) 09:00:34
素人の質問ですみません。うまく日本語化できないのですがどうしたらよいでしょう?
お願いします。

68 :デフォルトの名無しさん:2005/05/30(月) 09:12:00
まず日本語を勉強する

69 :デフォルトの名無しさん:2005/05/30(月) 09:58:56
>>66
WM_SIZEを乗っ取ってカラム幅とウインドウのクライアント幅を同じにしました。

ウインドウの縦サイズを調整して、縦スクロールバーがない状態からある状態にすると縦&横スクロールバーが出現するので、
カラム幅をクライアント幅に一致するように縮めスクロールしないでも収まるようにしたのですが、
それが横スクロールバーに反映されないので困っています。もう一段階サイズを変更すると消えるのですが・・・。

70 :デフォルトの名無しさん:2005/05/30(月) 12:19:05
CloseDriver
DRV_CLOSE

と同様の機能らしいAPIが二つあるのですが
使い方の違いですか?

71 :デフォルトの名無しさん:2005/05/30(月) 17:04:14
標準入出力のストリームをバイナリモードにするAPIを教えてください。

72 :デフォルトの名無しさん:2005/05/30(月) 17:31:18
>>71
後から変更することは出来ない。
が、改めてオープンしなおすことは出来る。
CreateFile(TEXT("CON"),

73 :デフォルトの名無しさん:2005/05/30(月) 18:25:12
>>72
それは標準入力ではない。

>>71
ファイルハンドルを複製せよ。

74 :デフォルトの名無しさん:2005/05/30(月) 18:42:49
Window Media Playerの設定を変更するアプリケーションが作りたいのですが
経験者の方はおられますか?

75 :デフォルトの名無しさん:2005/05/30(月) 21:52:13
おりますよ。何でも聞いてござれ。

76 :デフォルトの名無しさん:2005/05/31(火) 00:00:36
Explorerをシェル拡張するのではなく、
リパースポイントを使いたいのですが、
マイクロソフトと何か契約を結んだりしないとダメですか?

77 :デフォルトの名無しさん:2005/05/31(火) 00:59:00
質問です。
CreateEventをリモートで実現するにはどうしたらいいでしょう?
ソケットとか使わないとダメ?


78 :デフォルトの名無しさん:2005/05/31(火) 02:52:03
>>76
ttp://msdn.microsoft.com/library/en-us/fileio/fs/fsctl_set_reparse_point.asp

79 :74:2005/05/31(火) 07:15:14
>>75
[ツール]-[オプション]-[ネットワーク]タブにあるチェックボックスを
ON/OFFすることなんてできますか?

80 :デフォルトの名無しさん:2005/05/31(火) 13:10:46
メッセージ処理(WM_TIMER)に依存しないウェイトのかけ方を教えてください>w<
SetTimerは内部でメッセージ使ってるようなので‥‥

81 :デフォルトの名無しさん:2005/05/31(火) 13:30:55
Sleepとか?

82 :デフォルトの名無しさん:2005/05/31(火) 13:44:00
昔はリソースの関係でタイマーを大量に作れなかったので
Sleepで実装したりもした、と聞く。

83 :デフォルトの名無しさん:2005/05/31(火) 13:46:43
Sleepだとスレッドが寝ちゃうから中断できなくてダメなんです>w<


84 :デフォルトの名無しさん:2005/05/31(火) 13:55:24
MsgWaitForMultipleObjects

85 :デフォルトの名無しさん:2005/05/31(火) 14:05:51
タイマスレッド、イベントオブジェクト

86 :デフォルトの名無しさん:2005/05/31(火) 14:09:25
空ループ

87 :デフォルトの名無しさん:2005/05/31(火) 14:18:29
日本語版Windows2000 VC6にて 入力された文字をStaticで表示させるDLLを
作っている(MFC無し)のですが、英語版NT4(GlobalIME IE4)環境下にて、
日本語が文字化けします。どなたかうまく表示させる方法をご存知ではない
でしょうか?

以下はソース抜粋です。
#include <windows.h>
#include <stdio.h>
#include <tchar.h>

void SetTxtMsg(LPCTSTR lpTxtMsg)
{
LOGFONT lf;
memset(&lf, NULL, sizeof(lf));

lf.lfCharSet= SHIFTJIS_CHARSET;
lf.lfOutPrecision= OUT_OUTLINE_PRECIS;
lf.lfClipPrecision= CLIP_STROKE_PRECIS;
lf.lfPitchAndFamily= DEFAULT_PITCH | FF_SWISS;
lstrcpy(lf.lfFaceName, TEXT("MS Gothic"));

hFont = CreateFontIndirect(&lf);

msg_hWnd = CreateWindowEx( NULL,
"STATIC", TEXT(lpTxtMsg),
WS_CHILD | WS_VISIBLE | SS_CENTER,
WNDMSG_X, WNDMSG_Y, WNDMSG_WIDTH, WNDMSG_HEIGHT,
hWnd, NULL, hInst, NULL);
SendMessage(msg_hWnd, WM_SETFONT, (WPARAM)hFont, TRUE);
}


88 :デフォルトの名無しさん:2005/05/31(火) 14:24:59
m9(^Д^)プギャーーーッ!

89 :デフォルトの名無しさん:2005/05/31(火) 15:08:37
やはwwwwwwwwwwwwwwwwwwうぇwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

90 :デフォルトの名無しさん:2005/05/31(火) 15:09:32
>>80
timeSetEvent() とか SetWaitableTimer() とかは?

91 :デフォルトの名無しさん:2005/05/31(火) 21:12:03
タイマーは、呼び出される関数のポインタをNULLにするとメッセージで来るんだけどな
正確なのがほしけりゃマルチメディアタイマー使ったら

92 :デフォルトの名無しさん:2005/05/31(火) 21:40:11
スレッドとプロセスの違いを教えてください。

93 :デフォルトの名無しさん:2005/05/31(火) 21:42:22
それはいい所に気付いたね。

94 :デフォルトの名無しさん:2005/05/31(火) 21:56:30
DirectDrawあたりのSetDisplayModeとかそのへんで
適当に解像度を落としてから解像度を戻すと
Windowの配置が目茶目茶になるので
EnumWindowsとGet/SetWindowPlacementで処理したは良いが、
なぜか最大化しているWindowがタスクバーの下にえぐれてしまうのです。
タスクバーに適当にメッセージでも流せば戻るのかと思ったんですが
試した限りでは駄目でした。

タスクバーのエッジをクリックするとか、何か新しいWindowでも開くと直るのですが
何とかする手立ては無いんでしょうか。

ちなみにWindows2000上でしか試していませんので他の環境では分かりません。

95 :デフォルトの名無しさん:2005/05/31(火) 22:23:20
質問させて頂きます。
アクセラレータのメッセージが親ウィンドウに来ないで
そのときフォーカスのある子ウィンドウに行くようになってしまったのですが
私は何をしてしまったのでしょうか。

96 :デフォルトの名無しさん:2005/05/31(火) 22:24:45
ミス。

97 :デフォルトの名無しさん:2005/05/31(火) 22:59:43
アクセラレータはTransrateMessageだけど
何か思い当たる事ないか

98 :デフォルトの名無しさん:2005/05/31(火) 23:16:21
TranslateAcceleratorじゃなかったっけ

99 :デフォルトの名無しさん:2005/05/31(火) 23:23:42
イベントログファイル(*.evt)からイベント情報を取得してダンプするためには、
ReadEventLog関数を用いて1つずつレコードの内容をファイル等に書き出して
いくしかないのでしょうか?
もし書き込み用関数やサンプルソース等がありましたら教えて頂きたいので
よろしくお願いします。

100 :デフォルトの名無しさん:2005/05/31(火) 23:24:31
>なぜか最大化しているWindowがタスクバーの下にえぐれてしまうのです。
えぐれる?

101 :明日のために:2005/05/31(火) 23:30:46
えぐるように打つべし!

102 :デフォルトの名無しさん:2005/05/31(火) 23:53:51
>>95
TranslateAccelerator( HWND hWnd, HACCEL hAccTable, LPMSG lpMsg );
このHWNDに、呼び出すその時のMSG構造体のHWND渡してるとかじゃないか?


103 :94:2005/06/01(水) 00:00:42
最大化Windowがタスクバーの下にもぐりこんでいる状態と言えばいいでしょうか。

104 :デフォルトの名無しさん:2005/06/01(水) 00:05:18
普通に最大化するとタスクバーを避けるように大きさが決まるのに解像度変更から
復帰したときはなぜかタスクバーを無視して最大化されてしまうってこと?

105 :デフォルトの名無しさん:2005/06/01(水) 00:12:15
タスクバーが原点方向(左・上)にあるときの話ならGetWindowPlacement/SetWindowPlacementの仕様上の問題。というか罠。

106 :デフォルトの名無しさん:2005/06/01(水) 01:21:58
XPでWindowsキー + [U]を押してユーティリティ マネージャーを開くと、
まずsystemアカウントでutilman.exeが起動して、その子プロセスとして
現在ログオンしているユーザーの権限でutilman.exeが実行されているのですが、
どうやってパスワードなしで現在のユーザーのトークンを得ているのでしょうか?

107 :94:2005/06/01(水) 01:27:27
>>104
そんな感じですかね。SetWindowPlacementすると
最大化していたWindowがタスクバーの下に滑り込んでしまいます。

>>105
一応タスクバーはBottomに置いてあります。
今確認したところ左と上の時はいい感じですが、
右と下だとやっぱりタスクバーを無視した感じのサイズになるようです。

108 :デフォルトの名無しさん:2005/06/01(水) 02:15:02
>>99

BackupEventLog()じゃダメ?
リモート接続ならリモート先にしか保存できないという素敵な関数さんだけど

情報メッセージとかちゃんと変換して吐き出すなら
1レコード読み込んで吐き出すしかないと思われ

109 :95:2005/06/01(水) 03:35:46
>>102
その通りでした。
「猫でも〜」を見て作ったときは
TranslateAccelerator(hWnd, hAccel, &msg)
としていたのですが、VCにひな形を作ってもらうと
TranslateAccelerator(msg.hwnd, hAccelTable, &msg)
このように作るようです。
どうもありがとうございました。

110 :デフォルトの名無しさん:2005/06/01(水) 04:16:01
今までWANIPの取得はENVを表示するCGIにアクセスさせて取得させていたのですが
WANIPを取得できるような関数ってありますか?

111 :デフォルトの名無しさん:2005/06/01(水) 05:51:38
>>110
残念ながらOSが管理してる情報じゃないのでそんなAPIはありません


112 :デフォルトの名無しさん:2005/06/01(水) 06:21:20
>>110
DDNSで登録しといて、Winsockでgethostbynameするとか

113 :デフォルトの名無しさん:2005/06/01(水) 08:57:15
>>110
UPnPに対応しているルータならUPnPで取れる

114 :110:2005/06/01(水) 12:19:53
皆さんレスありがとうございます。検討してみます。
とても参考になりました。

115 :デフォルトの名無しさん:2005/06/01(水) 12:21:30
チルトホイールマウスのチルトに反応するにはどうしたらよいのでしょうか?

116 :デフォルトの名無しさん:2005/06/01(水) 13:41:10
・spyでなんかメッセージが出てないか見る
・MSでそれっぽいSDKが出てないか探してみる

117 :デフォルトの名無しさん:2005/06/01(水) 19:13:50
質問です。
スクリーンセーバーを作りたいのですが、
外部シンボル 'WinMain' が未解決
とエラーがでてしまいます。
ソースは「猫でも〜」のコピペなので間違いはないと思います。
コンパイラはBCCで開発環境はBCCDeveloperです。
原因があるとすればどこでしょうか?

118 :デフォルトの名無しさん:2005/06/01(水) 19:22:10
>>117
猫にはscrnsave.libを使うと書いてあるだろうが、これはVC++の本当のライブラリで、BCCには存在しない。
DLLのインポートライブラリではないからimplibで解決できるわけでもない。

119 :デフォルトの名無しさん:2005/06/01(水) 19:37:13
>>117
写したから間違いは無いと思うその思考がまず間違い
人間とは間違うはずの無いところで間違うもの

何よりも、間違いが無いならエラーが出るわけがない
エラーが出るということは間違っているということ


120 :デフォルトの名無しさん:2005/06/01(水) 19:52:01
>118-119
dクス ( ノД`)゚・。

121 :デフォルトの名無しさん:2005/06/01(水) 19:56:16
>>120
http://homepage2.nifty.com/tenk/prog/scrnsvr.htm

122 :デフォルトの名無しさん:2005/06/01(水) 20:25:41
>121
クスコ

123 :デフォルトの名無しさん:2005/06/01(水) 20:33:55
>>108
レスくれてありがとうございます。
BackupEventLog関数でファイルそのものを
バックアップすることはできるのですが、
1レコード読み込んで、そのメッセージ内容を
dllから読み込み変換、ファイルに出力という事を
やろうとしています。
そういう処理は、LoadLibrary、ReadEventLog、FormatMessage等を
駆使してやるしかなさそうですね。
数少ないながらもネット上にサンプルがありまして、
参考にして何とか実装することができました。

Windowsのイベントビューア上で、「ログファイルの名前を付けて保存」と
同じ事をしたいわけですが、どういう実装になってるか予想できますか?
(それ使えばいちいち作らなくてもいいわけですが…)

124 :デフォルトの名無しさん:2005/06/01(水) 20:59:33
>>123
プラットフォームSDKにサンプルがあったような希ガス。

125 :デフォルトの名無しさん:2005/06/01(水) 21:26:57
>>124
Platform SDKではないですが、サンプルがあっさりと見つかりました。
英語の本家サイトもきちんとチェックするようにしないといけませんね。反省。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/reading_the_event_log.asp

自分が作成したものとは全く違うわけで…。
自分の場合は、ログのレコードを格納するためのバッファのサイズを
取得するために、ReadEventLog関数を2回呼び出すようにしていました。

126 :デフォルトの名無しさん:2005/06/02(木) 02:41:30
質問です。

現在、テキストエディタを制作しているのですが、
保存処理で詰まっています。

CreateWindow()で生成したエディットコントロールから文字数を
取得してmalloc()でその分のバッファを用意します。
そのバッファにエディットコントロールの内容をコピーして、
WriteFile()でファイルに書き込む、という感で作りたいのですが
どうすればエディットコントロール文字数を取得できるのか
がわかりません。どうすればいいのでしょうか?




127 :デフォルトの名無しさん:2005/06/02(木) 03:19:19
エディットコントロールはコントロールの一つ。
コントロールはウィンドウの一種だ。
Windowsは1個のウィンドウに対して一つの名前(文字列)を付けることが出来、
その名前を操作するためのAPIを提供している。

タイトルバーのタイトル文字列はメインウィンドウの名前を表示している。
そして、コントロールはこの名前(文字列)をスタティックコントロールの文字列や
エディットコントールの編集しているテキストとして扱っている。


128 :126:2005/06/02(木) 03:30:46
>>127
ありがとうございます。
GetWindowText()ってことですよね?
GetWindowText()でバッファに文字列を格納する前に
malloc()でバッファを作りたいのですが・・・


129 :デフォルトの名無しさん:2005/06/02(木) 03:32:59
つGetWindowTextLength

130 :126:2005/06/02(木) 03:57:33
>>127 >>129
ありがとうございます!解決しました。
こんな関数があったとは知りませんでした。


131 :デフォルトの名無しさん:2005/06/02(木) 05:20:50
こんな関数があったとはって、MSDNでGetWIndowTextの次に出てくるんだがなぁ・・・

132 :デフォルトの名無しさん:2005/06/02(木) 07:20:41
こういう奴はいつまでたっても無能

133 :デフォルトの名無しさん:2005/06/02(木) 10:32:13
無能といえば無能だが、title bar の caption を取るのも GetWindowText() ってのは
最初はとっつきにくい感じはある。空の window で文字列があるのは title bar
だけだから text はそこしかないが、多くの window にはあちこちに text が
あるように「見えて」そんなことは最初は分りにくい。
dialog には GetDlgItemText() が用意されているが、GetEditControlText() や
GetTitleBarText() とかあると直感的には分りやすいと思う。
マクロ定義で済むのにね。

134 :デフォルトの名無しさん:2005/06/02(木) 11:01:07
違うだろGetWindowTextLengthを探せないのが無能なんだよ

135 :デフォルトの名無しさん:2005/06/02(木) 13:43:04
>>133
Edit_GetText()

136 :デフォルトの名無しさん:2005/06/02(木) 17:09:06
ISAPIの一覧が見たいのですがどこにあるかわかりますでしょうか?

137 :デフォルトの名無しさん:2005/06/02(木) 20:25:44
16x16のビットマップをアイコンとして使用したいのですが
hIcon = LoadImage(hInst, "test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
としてロードしたものを
ImageList_AddIcon(hIList, hIcon)
として利用可能でしょうか?


138 :デフォルトの名無しさん:2005/06/02(木) 20:48:46
Altキーを押したり、マウスカーソルを一番上に持っていった時だけメニューが出るようにするAPIはどれ?

139 :デフォルトの名無しさん:2005/06/02(木) 20:49:40
無い

140 :デフォルトの名無しさん:2005/06/02(木) 21:04:56
ビットマップを横に並べて表示させたいのですが、
何も表示されません
case WM_PAINT:
hdc = BeginPaint(hWnd , &ps);
for(i = 0;i > 256;i+=64) {
BitBlt(hdc , i , 0 , 64 , 64 ,
hMem2 , 0 , 0 , SRCCOPY);
BitBlt(hdc , i , 0 , 64 , 64 ,
hMem1 , 0 , 0 , SRCCOPY);
}
EndPaint(hWnd , &ps);
break;
原因を教えてください。お願いします。

141 :デフォルトの名無しさん:2005/06/02(木) 21:06:48
ループが1回も回らないから。

142 :デフォルトの名無しさん:2005/06/02(木) 21:10:56
>>133
それはWindowsのWindowの構造が理解できてないからだ

>>137
LoadImageでIMAGE_BITMAPで何が返って来ると思う?
てか似たような質問前スレにもあったぞ

>>140
まずhMem1とhMem2の出所を教えてくれ

143 :140:2005/06/02(木) 21:18:55
HDC hdc;
static HDC hMem1 , hMem2;//メモリデバイスコンテキスト
PAINTSTRUCT ps;
HBITMAP hBmp;
int i;

case WM_CREATE:
hdc = GetDC(hWnd);
hBmp = LoadBitmap(
((LPCREATESTRUCT)lp)->hInstance ,
TEXT("BASE")
);
hMem1 = CreateCompatibleDC(hdc);
SelectObject(hMem1 , hBmp);
DeleteObject(hBmp);
hBmp = LoadBitmap(
((LPCREATESTRUCT)lp)->hInstance ,
TEXT("BASE_M")
);
hMem2 = CreateCompatibleDC(hdc);
SelectObject(hMem2 , hBmp);
DeleteObject(hBmp);
ReleaseDC(hWnd , hdc);
break;
小出しスマソ。
マスク画像を表示するプログラムにしようと思ってます。

144 :141:2005/06/02(木) 21:26:30
俺は無視かい

145 :137:2005/06/02(木) 21:26:48
>>142
すんません、過去ログみれないんです;;

146 :デフォルトの名無しさん:2005/06/02(木) 21:30:57
>144
スマソ。よく分かりません。。。

147 :141:2005/06/02(木) 21:35:28
for(i = 0;i > 256;i+=64)
~~~~~~~

148 :デフォルトの名無しさん:2005/06/02(木) 21:39:24
>>137
最初のインスタンスハンドルはリソースを読み込むときに使うものだから、
LR_LOADFROMFILEを指定するときにはNULLで良い。

149 :デフォルトの名無しさん:2005/06/02(木) 21:40:33
>147
神様ありがとう。馬鹿だ漏れ。。。

150 :デフォルトの名無しさん:2005/06/02(木) 21:48:27
DeleteObject(hBmp);
もつっこんどいてやったほうが親切?

151 :137:2005/06/02(木) 21:58:46
>>148
NULLですね・・すんません;;

で、やはり .bmpを読み込んで
ImageList_AddIconに渡しても-1が戻ってだめぽ、なんで
何らかの解決方法ってないですかね・・
bmpを読み込んで動的にiconに変換させるとか
そのままiconとして扱えるとか、お手軽なAPIとか手法はないものでしょうか?
おとなしくiconファイルに変換したものを渡した方が無難でしょうか・・・?

152 :デフォルトの名無しさん:2005/06/02(木) 22:27:07
CreateIconIndirect

153 :デフォルトの名無しさん:2005/06/02(木) 22:56:28
HDCをstaticにするのも感心しないが・・・

154 :デフォルトの名無しさん:2005/06/02(木) 22:58:04
NTFSに複数同時にログを書き込むと高確率でフラグメントが発生してしまうんですが
最終的に書き込むサイズが(だいたい)わかっている場合ヒントを与えるような仕組みってないですか?

155 :デフォルトの名無しさん:2005/06/02(木) 22:59:56
ファイルマッピングでやったら確実かもね

156 :デフォルトの名無しさん:2005/06/03(金) 00:01:02
>>154
SetFilePointer
SetEndOfFile

157 :149:2005/06/03(金) 06:56:48
>150
ごめん、気になるから教えて神様。

>153
グローバルにすればいいですか?

158 :デフォルトの名無しさん:2005/06/03(金) 07:06:21
>>157
必要な時に宣言するという思考は無いのか?

159 :デフォルトの名無しさん:2005/06/03(金) 07:25:03
>>157
case の中でも、{ } でくくればブロックの先頭で変数の宣言できるよ

160 :デフォルトの名無しさん:2005/06/03(金) 07:48:36
そもそも複数の処理を記述するのに{}でブロックを作らないVCの雛型がおかしい

161 :デフォルトの名無しさん:2005/06/03(金) 09:25:27
そんな雛型に頼るのがおかしい。

162 :デフォルトの名無しさん:2005/06/03(金) 10:07:15
Windows 2000 で
USBメモリ等のリムーヴァブルメディアの
とりはずし操作
# 物理的なとりはずしではなく,
# 前もってOS上でやる「安全なとりはずし」
が行われたらそれを検知したいのですが,
方法はありますか?

163 :デフォルトの名無しさん:2005/06/03(金) 10:41:49
>>162
WM_DEVICECHANGEはどう?

164 :162:2005/06/03(金) 10:54:46
>>163
いまドキュメントを読んでも
要領をえないんですが,

WM_DEVICECHANGE

が実際にメディアを抜いたときにくる
メッセージなんですか?

OS の「ハードウェアの取り出し」操作を
キャッチしたいのですが,
このメッセージでできるんでしょうか?

165 :デフォルトの名無しさん:2005/06/03(金) 10:56:04
質問する前に試せ

166 :163:2005/06/03(金) 11:25:38
>>164
『OS のハードウェアの取り出し操作をキャッチ』というのは
ハードウェアの取り外しダイアログで[停止]ボタンを押したときのことか?
今試したらWM_DEVICECHANGEが来たぞ。
何かLPARAMに値がセットされてたが、それは面倒なので調べてないが。

(調査にはWin2000&WTLを使用)

167 :164:2005/06/03(金) 12:31:29
>>166
> ハードウェアの取り外しダイアログで[停止]ボタンを押したときのことか?

まさにそれです

> 今試したらWM_DEVICECHANGEが来たぞ。

ならばいけそうです


168 :デフォルトの名無しさん:2005/06/03(金) 12:54:48
実際の経過時間を知りたいのですが。
time()やGetSystemTime()などでは時刻の設定をされたり「Windows Time
サービス」がSetSystemTimeAdjustment()をしていたりするので、正しい
経過時間が不明です。ハード的な誤差はあってもよいがソフト的な設定
による影響を避けたい。

169 :デフォルトの名無しさん:2005/06/03(金) 13:16:25
GetTickCount

170 :149:2005/06/03(金) 13:45:23
>159-160
亀レスですが、よく分かりません。
詳細キボンです。

171 :デフォルトの名無しさん:2005/06/03(金) 13:55:11
>>170
こういうことかと思われ

×な例
case WM_PAINT:
  int a;

○な例
case WM_PAINT:
{
  int a;
}

172 :デフォルトの名無しさん:2005/06/03(金) 14:04:41
>>170
PAINTSTRUCT ps; が戦先頭にあったもんでね。
WM_PAINTでしか使わないようなこういうのは、
case WM_PAINT:
{
  PAINTSTRUCT ps;
  ・
  ・
  break;
}

とかね

173 :デフォルトの名無しさん:2005/06/03(金) 14:04:57
>171
な〜る。dクス

174 :149:2005/06/03(金) 15:02:13
>172
d

しかし>>150の言いたいことがよく分かりません。
誰かつっこんでくれる方いませんか?

175 :デフォルトの名無しさん:2005/06/03(金) 15:28:11
>>174
hDCにSELECT中のhBmpをDeleteObjectしてどーすんの

176 :デフォルトの名無しさん:2005/06/03(金) 15:31:41
>169
望みどおりのことができました。ありがとうございます。

177 :164:2005/06/03(金) 15:54:25
WM_DEVICECHANGE

このメッセージなんですが

> ハードウェアの取り外しダイアログで[停止]ボタンを押したときのことか?

のときにたしかにくるんですが,
当然,USBメモリをさしたときとか
CD をぬきさししたときにもきます.

このメッセージがきたときに

> ハードウェアの取り外しダイアログで[停止]ボタンを押したときのことか?

かどうかを判定し,どのドライヴ文字にわりあてられていた
記憶装置かを知ることはできますか?

178 :デフォルトの名無しさん:2005/06/03(金) 16:05:21
>>177
PlaformSDK or MSDN LibraryのWM_DEVICECHANGEの説明嫁


179 :149:2005/06/03(金) 16:29:04
>175
dです。
つまり二番目のビットマップをロードする前に
Deleteする必要ないってことですか?

180 :デフォルトの名無しさん:2005/06/03(金) 16:35:38
>>179
おそらくそのDeleteObject失敗してるよ。
戻り値調べてごらん。
DeleteObjectするときは、hDCを使わなくなったときに
別のhBmpをSelectしたときに返ってくるhBmpを使うか
しないとね。

hDCにSelectされた状態でDeleteするなって書いてなかったか?

181 :180:2005/06/03(金) 16:53:12
何か日本語変だけど、めんどくさいので察してくれたまい

182 :デフォルトの名無しさん:2005/06/03(金) 16:59:05
>>179
とりあえずおまいはMSDNをよーく読め

183 :180:2005/06/03(金) 17:09:39
実際にやってみたらDeleteObjectはTRUEを返して
かつ表示はできてたな、、、、
まあやっちゃいけないことではあるが

184 :149:2005/06/03(金) 17:18:27
>180
色々とdクス。
何となく理解できますた希ガス。

185 :デフォルトの名無しさん:2005/06/03(金) 19:52:24
すべての Windows API の関数プロトタイプを
プログラムから操作したいのですが、
API の宣言を、C 言語のヘッダーではなくて、
XML などの扱いやすい形式で入手することはできないでしょうか?

186 :デフォルトの名無しさん:2005/06/03(金) 19:55:18
フォルダ内のアイコンの表示位置を取得・設定することってできますか?

187 :デフォルトの名無しさん:2005/06/03(金) 19:58:54
>>186
マルチは芯でいいよ(´・ω・`)

188 :デフォルトの名無しさん:2005/06/03(金) 20:07:39
>>185
可能

189 :デフォルトの名無しさん:2005/06/03(金) 20:10:52
>>185
既に出来上がってる関数の宣言を弄って何をしようと言うのだ・・・

190 :デフォルトの名無しさん:2005/06/03(金) 20:17:45
>>189
とある言語で、Win32 API を使いたくて、
すべての宣言をコンバートしたい。

191 :デフォルトの名無しさん:2005/06/03(金) 21:39:03
昔のSDKはCSVで関数名とライブラリ名が
入ったファイルがついてたけど今は無いのかな

192 :デフォルトの名無しさん:2005/06/03(金) 21:41:06
関数名だけならBccのimpdefとかで取り出せばいいじゃないか。

193 :デフォルトの名無しさん:2005/06/03(金) 23:19:43
>>192
もちろん、プロトタイプが必要だよ。
構造体のサイズとかアラインメントとかも。

194 :デフォルトの名無しさん:2005/06/04(土) 01:59:14
とある言語ってなんだ?

195 :デフォルトの名無しさん:2005/06/04(土) 02:30:04
すいません、メインウィンドウのみで子ウィンドウを一つも
持たないアプリケーションがあってそのアプリケーション上で
ふつうにキー入力をする分には認識しますがプログラムで
メインウィンドウにWM_CHARを送っても認識していません。
恐らくそのアプリケーションでそういったことを対策してると思うのですが
どういったトリックを使ってるのでしょうか?教えてくださいお願いします

196 :デフォルトの名無しさん:2005/06/04(土) 02:33:21
ハァ?
WM_CHAR 以外でキー処理してるんじゃねーの?

197 :デフォルトの名無しさん:2005/06/04(土) 02:33:39
ちなみにそのアプリーションはdirectXを使っています。
明らかにメインウィンドウのほかにも別のコントロールが存在してると
思うのですがEnumChildWindowsでは検出できませんでした。

198 :デフォルトの名無しさん:2005/06/04(土) 02:34:08
>>196
馬鹿はすっこんでろボケ

199 :デフォルトの名無しさん:2005/06/04(土) 02:52:42
DirectX使ってるならWM_CHARでキー入力処理してないって推論で何も間違ってないと思うが。
煽り口調でレスされると中身とは無関係にとにかく煽り返さないと気が済まない人ですか?

200 :デフォルトの名無しさん:2005/06/04(土) 02:55:45
198はボクではありません

201 :デフォルトの名無しさん:2005/06/04(土) 03:59:15
200はボクではありません

202 :ボク:2005/06/04(土) 04:12:06
さて問題です。
ボクとは誰でしょうか?

203 :デフォルトの名無しさん:2005/06/04(土) 04:15:31
ボクではありません。

204 :デフォルトの名無しさん:2005/06/04(土) 05:23:14
急速にスレの質が低下してまいりました

205 :デフォルトの名無しさん:2005/06/04(土) 08:59:57
>>195
普通キー入力の処理はKEY_DOWN
DirectXアプリならDirectInput使ってる可能性もある

206 :デフォルトの名無しさん:2005/06/04(土) 09:32:17
ページテーブルを見たくてCR3を調べたのですが、変な値(1とか20hとか)しか出てきません。
この値は本当の値なのでしょうか、それとも例外ハンドラに引っかかってでたらめな値になっているのでしょうか?
ページテーブルを取得する方法があったら教えて下さい。

207 :デフォルトの名無しさん:2005/06/04(土) 10:05:32
ボクの振りしないでください。

208 :デフォルトの名無しさん:2005/06/04(土) 12:25:10
ボクボク、ボクだよ。
鯛焼き屋さんのおじさんに捕まっちゃった。
今まで盗った鯛焼き代払えって放してくれないんだよ。うぐぅ。
今すぐ口座に100万円振り込んでよ、
ねえ、アッコさん。

209 :デフォルトの名無しさん:2005/06/04(土) 13:13:59
現実と空想の区別がつかなくなった妄想オタが引っかかりそうだな。

210 :デフォルトの名無しさん:2005/06/04(土) 16:08:59
今あるCのプログラムでSTLを利用した機能をつけたいのですが、
C++で作成したdllやlibを、Cで作成したプログラムから使用することはできるのでしょうか?
(クラスを使用するとしてもライブラリの中だけで使用して、exportは行いません。)


211 :デフォルトの名無しさん:2005/06/04(土) 16:14:02
>>210
extern "C" でCリンケージを指定すれば、その関数は普通にCから使えるよ

212 :デフォルトの名無しさん:2005/06/04(土) 17:55:02
>>211
志村、逆! 逆!


213 :デフォルトの名無しさん:2005/06/04(土) 18:03:31
>>206
デバイスドライバ書いてください。

214 :デフォルトの名無しさん:2005/06/04(土) 19:51:49
>>212
逆じゃないだろ。

C++で作成するライブラリの外に見せる部分を
extern "C" {


}
で囲うのが正解。

Cからextern "C++"を使うのは邪道。

215 :デフォルトの名無しさん:2005/06/04(土) 19:53:42
>214
よく嫁よ

216 :デフォルトの名無しさん:2005/06/04(土) 20:08:49
Cの方を修正で ってことだよねぇ?
extern "C++"やるよりかは、C++の方直してやったほうが良いと思うに一票

ってかWinAPIと関係ねぇw

217 :デフォルトの名無しさん:2005/06/04(土) 20:13:25
C++でCリンケージが指定されてないんなら、ねーむあんまんぐる
された名前でCから呼ぶしかなくなるが、あれってCシンボルとして
つかっていい文字以外とかも使われてるからダメかもな。
試したことないからわからんが。

218 :デフォルトの名無しさん:2005/06/04(土) 20:54:49
>>210のやりたいことって、dllにするほどのことなんだろうか。
単に、Cで書いたobjファイルとC++で書いたobjファイルをリンクすればいいだけのような気もするが。

219 :デフォルトの名無しさん:2005/06/04(土) 21:19:17
>>218
それは今回の問題にはあまり関係がないけどな
どっちみちリンケージ指定は必要だし

220 :デフォルトの名無しさん:2005/06/04(土) 22:09:36
>>218



221 :デフォルトの名無しさん:2005/06/04(土) 23:44:23
ファイルマッピングって、メモリに読み込むわけじゃ無いんですか?

222 :デフォルトの名無しさん:2005/06/05(日) 00:01:03
アクセスする段階ではメモリに読み込まれている。仮想メモリの応用だな。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dngenlib/html/msdn_manamemo.asp

223 :デフォルトの名無しさん:2005/06/05(日) 05:01:07
ローカルエリア接続に割り当てられたネットワークデバイスに
ネットワークケーブル(LANケーブル)が接続されているかどうかを検出するAPIってありますか?


224 :デフォルトの名無しさん:2005/06/05(日) 05:52:36
無い

225 :デフォルトの名無しさん:2005/06/05(日) 05:52:52
>>223
あります。

226 :デフォルトの名無しさん:2005/06/05(日) 09:42:08
>>225
あるというなら提示してみろ。

227 :デフォルトの名無しさん:2005/06/05(日) 09:51:51
ip helper apiにあるんでねーの?

228 :デフォルトの名無しさん:2005/06/05(日) 11:14:08
>>223
もちろんあるが、今、出先だから思い出せない。
ところで対象OSは何?

229 :デフォルトの名無しさん:2005/06/05(日) 13:27:35
ありますん

230 :デフォルトの名無しさん:2005/06/05(日) 14:14:41
有無だけ聞いているんだから有るだけでいいよ

231 :デフォルトの名無しさん:2005/06/05(日) 14:43:22
昔はヘルプファイルとかCSVファイルとかにAPIの一覧とか解説がビッシリあったのに
最近は凄く説明がいい加減になっているのは何故ですか?

もうAPIという物を無くしたいのかなM$は('A`)

232 :デフォルトの名無しさん:2005/06/05(日) 14:54:20
昔はなかったサンプルコードが増えてる

233 :223:2005/06/05(日) 16:55:17
GetIfEntry()でネットワークケーブルの接続されているか検出できました。
MibIfRowのdwOperStatusで5だったら接続されてて0だったら切断されてるっぽいです。
それ以外のステータスがよくわからない・・・orz

234 :デフォルトの名無しさん:2005/06/05(日) 17:10:14
>>231
Blogや掲示板が増えている。

235 :デフォルトの名無しさん:2005/06/05(日) 17:56:49
>>231
日本語ドキュメント作るのマンドクセ(M$談)

236 :デフォルトの名無しさん:2005/06/05(日) 19:14:36
GetWindowModuleFileName()って役立たず?

237 :デフォルトの名無しさん:2005/06/05(日) 19:25:15
うん

238 :デフォルトの名無しさん:2005/06/05(日) 19:31:49
オマエのチソコと同じだなww

239 :デフォルトの名無しさん:2005/06/05(日) 19:32:32
Windows XP上で、FDからプログラムを立ち上げた場合、プログラム中でスレッドを作成
(CreateThread()や_beginthreadex()を実行)するたびにディスクへのアクセスを行うようです。
おそらく、ライブラリを検索しているんだと思うのですが(違っていたらご指摘ください)、
この(FDへの)ディスクアクセスを抑制する方法がありましたらご教示ください。

240 :デフォルトの名無しさん:2005/06/05(日) 19:33:56
スマン、知らん

241 :デフォルトの名無しさん:2005/06/05(日) 19:34:35
SetCurrentDirectory

242 :デフォルトの名無しさん:2005/06/05(日) 19:50:27
>>241
ありがとうございます。早速試してみたのですが、残念ながらだめでした。
どうやらカレントディレクトリを調べているというわけではなさそうです。
ちなみに、リストビューのアイテムを最初にクリックしたときも >>239 と同じ現象が見られるんですよね…。

243 :デフォルトの名無しさん:2005/06/05(日) 21:08:20
CDみたいなリムーバブルメディアから起動したときのための
何かがあった気がする

244 :239:2005/06/05(日) 22:48:36
>>243
どうもありがとうございます。
で、ヒントをもとに探してみたのですがやっぱり分かりませんでした_| ̄|○

245 :デフォルトの名無しさん:2005/06/06(月) 00:30:36
>>243
たまたまAdvancedWindowsのメモリ管理のページ読んでたら、
それ関連の記述があった。リンク時に/SWAPRUNなんとかってオプション付けると、
実行時にメモリ上に実行イメージ全てを読み込むらしい。

98や2000だと、FDから実行した場合は標準で/SWAPRUNな動作になるらしいんだが、
それだと>>239みたいな動作にはならなさそうだよな。標準動作が変わったのかね?

246 :デフォルトの名無しさん:2005/06/06(月) 01:48:17
.exeのあるディレクトリを探索する何かが実行されてんだろうか
よそうだけど、SWAPRUNが影響するのは、
.exeとそれに暗黙にリンクされたdllだけだろうし・・・

247 :デフォルトの名無しさん:2005/06/06(月) 02:20:24
LoadLibraryとかが呼ばれるとexeのあるフォルダから検索される。

248 :239:2005/06/06(月) 02:36:47
>>245
Advanced Windows を持っているのにそのあたりは読み飛ばしていました_| ̄|○
>>243 さんがおっしゃっているのは、どうやら /SWAPRUN のことみたいですね。
試していなかったのですが、Windows 98 と 2000 ではFDへのアクセスは発生しないようです。
しかし、リンク時に /SWAPRUN を付けてもXPだとやはりFDへのアクセスが発生してしまいます。

>>246 >>247
そうですね…「.exeのあるフォルダ」の情報を上書きするAPIでもあると
一気に解決するのですが、それも見つからないので困ってしまいます。

249 :デフォルトの名無しさん:2005/06/06(月) 12:37:02
こんにちは

ユーザーに色を選ばせる様なポップアップ
またはダイアログを表示したいんだけど、
VBのプロパティのBackColorで出てくるような
ポップアップとかChooseFontみたいな便利な
関数ってありますか?
やさしいお兄さん教えて

WinXPpro、VC++6.0

250 :デフォルトの名無しさん:2005/06/06(月) 13:27:54
ChooseColor

251 :249:2005/06/06(月) 13:40:41
>>250
ありがとう!的中しました。
いや〜ChoseFontは知ってたんだが、
Colorバージョンもあったなんて
目から鱗のクラッカー

愛してるよ

252 :デフォルトの名無しさん:2005/06/06(月) 14:48:30
>>248
2000 で起きなくて XP で送るなら、漏れなら manifest を疑う。

253 :デフォルトの名無しさん:2005/06/06(月) 16:46:24
VC++6.0 を携えて出てくる初心者が後を絶たないんだが、
どうして新参者が6.0を持ってるんだろう?
それも決まって6.0だ。5.0じゃない。
どうなっているのか?

254 :デフォルトの名無しさん:2005/06/06(月) 16:49:43
.NETを購入していない大学or会社でピコったに100ガバス

255 :デフォルトの名無しさん:2005/06/06(月) 17:03:46
新参者がVS6.0持ってちゃあかんのか?

256 :デフォルトの名無しさん:2005/06/06(月) 17:12:16
確かに253の疑問はもっともだが、どうせ割れなら最新のを使わない手はない気もするしなぁ。
俺もそろそろIDE買い換えたいなぁ…。最近のは関数毎にテキストを畳めるらしいな…。

257 :デフォルトの名無しさん:2005/06/06(月) 17:19:33
VC7以降のIDEは、常時使用するにはモッサリしすぎな気がするが。
デバッガは我慢して使ってるが、
それ以外はコマンドライン+makefileに逆戻りしたよおかげさまで。


258 :デフォルトの名無しさん:2005/06/06(月) 17:23:43
>>253
2003に移行した人から貰ったんじゃないの?

259 :デフォルトの名無しさん:2005/06/06(月) 17:25:05
>>255
新参者なら最近開発環境購入したはずなのだからVC++6.0であるはずがない、
ということでしょ。

>>257
確かにVC++6.0やVB6.0あたりとは軽さが圧倒的に違うね。
でも、インテリセンスつきのエディタとデバッガはやはり欲しいから、IDEから離れられない。

260 :デフォルトの名無しさん:2005/06/06(月) 17:44:02
>>257
( ・∀・)人(・∀・ )ナカーマ

261 :デフォルトの名無しさん:2005/06/06(月) 17:44:29
上げてしまった...orzスマソ

262 :デフォルトの名無しさん:2005/06/06(月) 17:44:29
>>259
プログラマとして新参者でも、最近開発環境購入したとは限らんだろう

263 :デフォルトの名無しさん:2005/06/06(月) 18:04:44
貧乏会社に就職したばかりの新人プログラマとかなー


264 :デフォルトの名無しさん:2005/06/06(月) 18:15:01
こんばんわ

質問ですが
リストビュー(リストコントロール)に挿入されてるカラムの数を取得したいのですが、
そのAPIを教えていただけないでしょうか。

アイテムを取得するAPIはわかったのですが、どうしてもカラムの数がわかりません。

265 :デフォルトの名無しさん:2005/06/06(月) 18:47:29
GDIの座標の変換のところで
三角関数とか行列とかでてきた。

図形の回転。。。XFORM構造体。。。
やはりこれは高校の教科書なの、だろう。

266 :239:2005/06/06(月) 19:14:50
>>252
manifestって、XPスタイルにするための.manifestファイルのことでいいんですよね?
とりあえず、次の2つを試してみました。
・設定をクラシックスタイルに変更して実行
・.exeファイルのリソースにmanifestを埋め込んで実行
やっぱりどちらもスレッド作成時にFDをアクセスしに行きます…もうだめぽ

267 :デフォルトの名無しさん:2005/06/06(月) 19:26:11
>>264
ヘッダーコントロールに対して HDM_GETITEMCOUNT とか Header_GetItemCount() とか

268 :デフォルトの名無しさん:2005/06/06(月) 20:56:47
>>248
一時的にハードディスクにコピーして実行するのが簡単だと思うよ

269 :239:2005/06/06(月) 22:20:26
>>268
そうですね…確かに現時点ではそれが最も手っ取り早い解決方法かもしれません。
まあ、そもそもいまどきFDから起動するという状況自体がレアケースなので、
無視してもどうということはないのですが…あまり気持ちのいいものではないですよね。

270 :デフォルトの名無しさん:2005/06/06(月) 22:44:57
漏れはVS.NET 2002を買ってMSDNで送られてきたVC6を愛用してるよ。
大したことをやっていない、というのもあるけどね。

ちなみに会社では今だにVC4.2

271 :デフォルトの名無しさん:2005/06/06(月) 23:12:05
ダイアログボックスを使用したプログラムを組んだんですがウィンドウとは
別でダイアログでもうひとるウィンドウみたいなのができますよね。
これをウィンドウとあわせたりできますか?

272 :デフォルトの名無しさん:2005/06/06(月) 23:16:58
うひとるウィンドウ
ってなんだ?

273 :デフォルトの名無しさん:2005/06/06(月) 23:19:53
RegOpenKeyExでKEY_ALL_ACCESSで開いているのに
RegEnumValueでキー名がFilterClassesとか出て値が得られないんだけど、
これらを得る方法はありますか?

例えば
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Network
以下にあるキーとか。

274 :デフォルトの名無しさん:2005/06/06(月) 23:25:09
#include <windows.h>

/* 島津印のマーカーを、出す */
void Marker(LONG x, LONG y, HWND hwnd)
{
HDChdc;

hdc = GetDC(hwnd);
MoveToEx(hdc, (int)x - 10, (int)y, (LPPOINT)NULL);
LineTo(hdc, (int)x + 10, (int)y, (LPPOINT)NULL);
MoveToEx(hdc, (int)x, (int)y - 10, (LPPOINT)NULL);
LineTo(hdc, (int)x, (int)y + 10, (LPPOINT)NULL);
ReleaseDC(hwnd, hdc);
}

LRESULT CALLBACK MainWndProc(HWND hwnd,
UINT messge,
WPARAM wParam,
LPARAM lParam)
{
/* FIXME: もうねる */


275 :デフォルトの名無しさん:2005/06/06(月) 23:42:48
>>270
漏れは古いソースをコンパイルするときはそのとき使っていたものをずっと使ってる
新しいのでコンパイルし直すだけで古い環境では動作しなくなるらしいから

276 :デフォルトの名無しさん:2005/06/06(月) 23:49:16
>>273
>HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Network
>以下にあるキーとか。
サブキーを列挙したいのなら RegEnumKeyEx な。
RegEnumValue はエントリ(値)の列挙。

277 :デフォルトの名無しさん:2005/06/07(火) 00:50:04
>>273
方法を問わなければ、WSHで列挙してテキストファイルに写すってのはどうよ?
たしか、WSHなら制限無く値を得れるはず。(RegEnumValueで制限あるなんて知らなかったが)
指定の値を取れる記述をしたvbsをShellExecuteで呼び出してとかね。

>>276
値が得られないって言ってるんだから、RegEnumValueでいいだろう。
以下のキーの値が得られないって言ってるんだと思う

278 :デフォルトの名無しさん:2005/06/07(火) 02:28:19
WindowsXPやWindows2000でパスを追加したいのですが、環境変数を操作する方法を教えてください。

279 :デフォルトの名無しさん:2005/06/07(火) 02:51:00
>>278
Get/SetEnvironmentVariable APIがあるけどシステム環境変数は無理っぽいから
レジストリを操作するしかないとおもふ

280 :デフォルトの名無しさん:2005/06/07(火) 12:10:05
GetAsyncKeyState()の引数にVK_Aと書いたら
'VK_A' : 定義されていない識別子です。
というエラーになってしまいます。
VK_LEFTやVK_UPなどは大丈夫です。
何故でしょうか?

281 :デフォルトの名無しさん:2005/06/07(火) 12:13:42
定義されていないからだよ。

282 :280:2005/06/07(火) 12:33:05
でも仮想キーコードの表などにはVK_Aが載ってるから使えると思ったんですけど、
どうしたら使えるようになるんでしょうか?

283 :デフォルトの名無しさん:2005/06/07(火) 12:39:34
>>282
どうしても、その記述が使いたければ自分で定義するしかないんじゃない?

漏れのwinuser.hにはコメントで↓のように書いてあるし
VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)

284 :デフォルトの名無しさん:2005/06/07(火) 12:54:22
ありがとうございました。
単に'A'と書いたら大丈夫だったんで、これでいきます。

285 :デフォルトの名無しさん:2005/06/07(火) 12:56:35
質問させてください。
マウスフック(グローバルフック)を使いたいのですが、うまくいきません。
1回のクリックにつき10回くらい呼び出されてしまいます。
何か対処方法はありますか?
現在下記のようなコードで試しています。

//フックするプロシージャ
LRESULT __stdcall CallWndProc(int nCode,WPARAM wParam,LPARAM lParam) {
  if (nCode == HC_ACTION) {
    if (wParam == WM_RBUTTONUP) {
      //処理
    }
  }
  return CallNextHookEx(g_hHookWnd, nCode, wParam, lParam);
}

286 :デフォルトの名無しさん:2005/06/07(火) 16:01:04
一度はずしたUSB機器(特にUSBメモリ)を
つかみ直す方法を教えてください
# プログラミングで


287 :デフォルトの名無しさん:2005/06/07(火) 16:03:57
ExitWindowsExでEWX_REBOOT

288 :286:2005/06/07(火) 16:08:24
「デヴァイスマネージャ」の
「USBルートハブ」を無効にして
再度,有効にするとUSB機器が再度認識されます
# USB を物理的にはずすことなく

これをプログラミングでやりたいんです

289 :デフォルトの名無しさん:2005/06/07(火) 16:40:07
deviceをデヴァイスなんて気持ち悪い読み方するなら、
managerもマネイジャと読めよ。

んで、使ったことないけどMSDNのDevice Managementあたりを
みりゃいいんじゃないか?

290 :デフォルトの名無しさん:2005/06/07(火) 16:47:22
ヴァイブ

291 :デフォルトの名無しさん:2005/06/07(火) 16:51:30
ヴァイヴ

292 :デフォルトの名無しさん:2005/06/07(火) 16:53:25
ゔぁいゔ

293 :デフォルトの名無しさん:2005/06/07(火) 17:03:34
ジャグァ

294 :デフォルトの名無しさん:2005/06/07(火) 17:05:44
>>280=282
「ちゃんと定義してある」のか「ただファイル内にそういう文字列があるだけ」なのかが判らんようじゃアプリ開発など夢のまた夢じゃ

295 :デフォルトの名無しさん:2005/06/07(火) 17:09:34
OpenMutexって重いですか軽いですか?

全てのトップレベルウィンドウのHWNDにちなんだ文字列の
Mutexを順々に検索してヒットしたHWNDに対してメッセージを
投げるという処理をしたいんですが。

296 :デフォルトの名無しさん:2005/06/07(火) 17:21:23
>>288
なんとなくマジレスしたくないけど、マジレスすると

SetupDiGetClassDevs
SetupDiSetClassInstallParamsでDICS_PROPCHANGE
SetupDiChangeState

でいけるハズ

297 :デフォルトの名無しさん:2005/06/07(火) 17:31:44
>>295
関数がわかってるならやってみりゃいいだろ
そんな自分で計測すりゃわかるようなことを聞きに来るな

298 :デフォルトの名無しさん:2005/06/07(火) 17:39:34
相手にしてもらえると喜ぶからスルー汁 >297

299 :デフォルトの名無しさん:2005/06/07(火) 17:53:29
>>295
あくまでも一般論としてだけど、Open〜は反復呼び出しを
想定されているので*比較的*軽いと言える。


>>297,298
分かんないんなら無理して反応すんなよ。
この板は答えられない質問を見かけると、ムキになって
否定して掛かるのがときどきいるな。

300 :デフォルトの名無しさん:2005/06/07(火) 18:04:18
と、やっと自分が答えられる質問が来てちょっと得意げなヒキデブでした。

301 :デフォルトの名無しさん:2005/06/07(火) 18:17:57
>>300
  ↑ コイツは >>297-298 にちがいない^^

302 :デフォルトの名無しさん:2005/06/07(火) 18:19:37
>>301
  ↑ コイツは>>299に違いない(^ω^)

303 :デフォルトの名無しさん:2005/06/07(火) 18:22:17
ヴァイブレイシャン

304 :デフォルトの名無しさん:2005/06/07(火) 18:25:41
盛り上がってまいりました(゜∀゜)ノ

305 :デフォルトの名無しさん:2005/06/07(火) 18:35:01
そして盛り下がってまいりました(゜д゜)

306 :デフォルトの名無しさん:2005/06/07(火) 18:38:01
急速にスレェァドゥのクァリティが低下してまいりましたフォー

307 :デフォルトの名無しさん:2005/06/07(火) 18:55:24
だれもムキになってないと思うけど
面白がってるだけだからフォー

308 :デフォルトの名無しさん:2005/06/07(火) 19:27:13
ゲイは帰れフォー

309 :デフォルトの名無しさん:2005/06/07(火) 19:29:46
何この流れフォー

310 :295:2005/06/07(火) 19:30:45
>>299
ありがとうございました。

311 :デフォルトの名無しさん:2005/06/07(火) 19:58:59
    〃                 i,        ,. -‐
   r'   ィ=ゝー-、-、、r=‐ヮォ.〈    /
    !  :l      ,リ|}    |. }   /   .や
.   {.   |          ′    | }    l
    レ-、{∠ニ'==ァ   、==ニゞ<    |    ら
    !∩|.}. '"旬゙`   ./''旬 ` f^|    |
   l(( ゙′` ̄'"   f::` ̄  |l.|   |     な
.    ヽ.ヽ        {:.    lリ     |
.    }.iーi       ^ r'    ,'    ノ    い
     !| ヽ.   ー===-   /    ⌒ヽ
.   /}   \    ー‐   ,イ       l    か
 __/ ‖  .  ヽ、_!__/:::|\       ヽ

312 :デフォルトの名無しさん:2005/06/07(火) 20:53:56
だが断る!

313 :デフォルトの名無しさん:2005/06/07(火) 20:59:03
ヮォ

314 :デフォルトの名無しさん:2005/06/07(火) 23:36:48
>285
「処理」の中で MessageBox() とか呼んでない?

315 :デフォルトの名無しさん:2005/06/08(水) 00:15:26
>>285
nCode < 0 ならCallNextHookExだってばよ
んで改善されないならハンドルみて確認しろや グローバルなんだべ?

316 :285:2005/06/08(水) 01:18:16
>314
>「処理」の中で MessageBox() とか呼んでない?
あ、呼んでます。フックできてるか確認するために、
とりあえずMessageBox()で確認しているので。
このせいですかね?他の方法で確認してみます。

317 :デフォルトの名無しさん:2005/06/08(水) 01:27:24
OpenPrinter をする際に、ネットワークプリンタの場合は文字数が30文字を超えてしまって
オープンエラーになってしました(GetLastErr では、1801 プリンタ名がおかしい)

長い名前のネットワークプリンタの場合の OpenPrinter はどうやるのでしょうか?

318 :にゃこ:2005/06/08(水) 02:57:24
質問させて頂きます

WindowsMediaPlayerのように歪んだウインドウをつくるには
どのようにすればよいのでしょうか

319 :デフォルトの名無しさん:2005/06/08(水) 03:30:35
検索キーワード「ウィンドウリージョン」または「レイヤードウィンドウ」

ウィンドウリージョンの方が難易度は低いと思う。


320 :デフォルトの名無しさん:2005/06/08(水) 03:31:08
>>318
たしかSetWindowRgn

321 :にゃこ:2005/06/08(水) 03:48:05
319さん、320さん ありがとうございます。がんばってみます。

322 :デフォルトの名無しさん:2005/06/08(水) 04:33:04
そういうアプリは好きじゃないな。


323 :デフォルトの名無しさん:2005/06/08(水) 09:37:06
>>299
答えるまでもない質問にいちいち答えるなよ
スレがみにくくなる

324 :デフォルトの名無しさん:2005/06/08(水) 10:37:47
>>323
( ゚д゚)ポカーン

325 :デフォルトの名無しさん:2005/06/08(水) 10:54:48
タイムポカーン

326 :デフォルトの名無しさん:2005/06/08(水) 12:30:48
オーナードローでリストビューを描画しています。

ところが、アプリ側でLVM_SETITEMSTATEを使い、リストビューの項目を選択状態にしても、
WM_DRAWITEM時に、ODS_SELECTEDフラグが立ってくれなくて困っています。
(マウスで普通に項目を選択した場合は、問題なくODS_SELECTEDが付いてます。)

何か解決方法をご存知の方、ひとつよろしくお願いします。

327 :デフォルトの名無しさん:2005/06/08(水) 13:44:53
>>322
あなたの好みは訊いてません

328 :デフォルトの名無しさん:2005/06/08(水) 14:01:30
>>327
じゃあ、君の好みはどうですか?

329 :デフォルトの名無しさん:2005/06/08(水) 14:56:25
>>311

330 :デフォルトの名無しさん:2005/06/08(水) 18:36:51
乱数の初期化は、こんな↓でいいですか?
GetSystemTime(&t);
srand((t.wSecond << 16 | t.wMilliseconds));

331 :330:2005/06/08(水) 18:40:42
すいませんtime()ありました。

332 :デフォルトの名無しさん:2005/06/08(水) 18:46:25
>>330-331
GetTickCount()なんてのもある。

333 :デフォルトの名無しさん:2005/06/08(水) 18:55:00
QueryPerformanceCounter()なんt(ry

334 :デフォルトの名無しさん:2005/06/08(水) 19:24:02
好みはSetWindowRgn

335 :デフォルトの名無しさん:2005/06/08(水) 20:43:54
乱数の使用目的による。
ゲーム程度ならそれで十分だが
暗号鍵の作成だったらやめとけとか

336 :デフォルトの名無しさん:2005/06/08(水) 21:14:47
暗号鍵の作成にsrandとかrandとか使うなよ(w

337 :デフォルトの名無しさん:2005/06/08(水) 21:58:58
乱数とはちょと違うがGUIDを生成する手もある。

338 :デフォルトの名無しさん:2005/06/08(水) 22:04:11
>>326
それ俺もなったなぁ
MFCでだけど

339 :デフォルトの名無しさん:2005/06/08(水) 23:20:16
>>326
LVM_SETITEMSTATE送るときにLVITEMのstateMaskを間違えてない?
(ListView_SetItemStateマクロの方なら第四引数のmask)

340 :デフォルトの名無しさん:2005/06/09(木) 06:05:43
すいません、特定のアプリケーションのプロシージャとかではなくて
windowsがアプリケーションにメッセージを送る前にメッセージを
フックしたいのですがどうすればいいですか。教えてくださいお願いします。

341 :デフォルトの名無しさん:2005/06/09(木) 06:08:55
”グローバルフック”か”システムフック”でサーチすると幸せになれると思うよ。

342 :デフォルトの名無しさん:2005/06/09(木) 10:39:34
こんにちは

質問ですが、
タブコントロールのタブ部分につけるテキストのサイズを変更したい場合は、
どのようにすればよいのでしょうか。

343 :デフォルトの名無しさん:2005/06/09(木) 11:10:30
質問なんですが、プロセスIDを取得済みのExplorerに対して、トップウィンドウなりフォルダビューなりにメッセージを送るなどして、他のフォルダに移動したいのですが、どうしたらよいでしょうか?(新しくウィンドウを開くのではなく)
とりあえず今の時点では、その時に表示中のフォルダのサブフォルダの一つに名前を指定して移動できればいいので、キーボード系のメッセージをフォルダ名の順番に送って最後にエンター送ろうかとも思ったのですが、それだと日本語のフォルダ名に対応できません。
将来的には任意のフォルダにフルパス指定で移動っていうのも視野に入れたいので、何かいい方法があったら教えてください。

344 :デフォルトの名無しさん:2005/06/09(木) 11:20:07
リストビューのアイテムの中にコンボボックスを入れることはできますか?

345 :デフォルトの名無しさん:2005/06/09(木) 11:40:00
USB接続の新しいドライブが増えたり、フォルダ内の内容が変わったりしたときに、それを検出するにはどうしたらよいのでしょうか?


346 :デフォルトの名無しさん:2005/06/09(木) 11:53:41
RegisterDeviceNotification

347 :デフォルトの名無しさん:2005/06/09(木) 13:39:28
FindFirstChangeNotification

348 :デフォルトの名無しさん:2005/06/09(木) 15:31:58
現在のデフォルトプリンタと、給紙トレイを取得する方法を教えて下さい。

349 :デフォルトの名無しさん:2005/06/09(木) 15:55:20
トイレの紙を補給する方法を教えて下さい。


350 :デフォルトの名無しさん:2005/06/09(木) 15:58:27
マニュアルを読んでください。

351 :デフォルトの名無しさん:2005/06/09(木) 16:06:09
>>349
手でふきなさい。

352 :デフォルトの名無しさん:2005/06/09(木) 16:29:38
>>349
むしろ拭かなくてよい。

353 :デフォルトの名無しさん:2005/06/09(木) 16:44:54
拭き取るのは、体に付いた栄養素を取ってしまうことと一緒だからな。

354 :デフォルトの名無しさん:2005/06/09(木) 17:13:36
>>344
無理

355 :デフォルトの名無しさん:2005/06/09(木) 17:28:58
>>353
つまり、拭き取ってもう一度口から摂取すればいいわけですね。

356 :デフォルトの名無しさん:2005/06/09(木) 17:34:17
デフォルトプリンタはたしか
GetProfileString("windows", "device",・・・
でいいんじゃなかったかなあ

357 :デフォルトの名無しさん:2005/06/09(木) 17:41:37
PrintDlg / PD_RETURNDEFAULT

358 :デフォルトの名無しさん:2005/06/09(木) 18:14:12
指定したフォルダにあるファイル一覧を取得したい場合はどのようにすればよいのでしょうか。
よろしくお願いします。

359 :デフォルトの名無しさん:2005/06/09(木) 18:31:18
>>358
FindFirstFile()
FindNextFile()
FindClose()

360 :デフォルトの名無しさん:2005/06/09(木) 19:24:21
デスクトップ上のウィンドウで一番手前にあるウィンドウをアクティブにするにはどうすればいいですか?

361 :デフォルトの名無しさん:2005/06/09(木) 20:03:07
一番手前にあるのにアクティブじゃないWindowなんてありません

362 :デフォルトの名無しさん:2005/06/09(木) 20:07:47
なこたない

363 :デフォルトの名無しさん:2005/06/09(木) 20:12:15
>>360
理屈ではSetActiveWindow(GetTopWindow(NULL));
でもXPとかでは勝手に手前に出さないようになった。

364 :デフォルトの名無しさん:2005/06/09(木) 20:16:21
PlgBlt、
MicroSoftによると2000、XPは対応で
95,98は未対応とのことだが、

これってMeは未対応ってことですよね。

365 :デフォルトの名無しさん:2005/06/09(木) 20:18:40
ウィンドウの背景描画用ブラシを動的に交換することはできますか?
あるラジオボタンがクリックされたときに、そのラジオボタンの領域
の色(これはウィンドウの背景色ですよね?)を変更したいのです。

366 :デフォルトの名無しさん:2005/06/09(木) 20:18:52
そう。

367 :デフォルトの名無しさん:2005/06/09(木) 20:21:41
>>366
タイミングとレス内容からして>>364へのレスですよね。
やっぱりそうか。どもです。

368 :デフォルトの名無しさん:2005/06/09(木) 20:28:31
>>365
オーナードロー

369 :デフォルトの名無しさん:2005/06/09(木) 20:48:07
WM_CTLCOLOR

370 :デフォルトの名無しさん:2005/06/09(木) 20:49:29
>>362
なこたないこたぁない

371 :デフォルトの名無しさん:2005/06/09(木) 20:55:05
HWND_TOPMOST ((HWND)-1) winuser.h
ウィンドウをすべての最前面ウィンドウよりも前に置きます。ウィンドウは、 アクティブでなくても手前に置かれます。

372 :デフォルトの名無しさん:2005/06/09(木) 20:55:16
MFCではなくAPIを使ったSDKというのでプログラムを書けるようになるのが目標の
初心者プログラマです
今後の勉強の仕方に悩んでおり、相談にのっていただけると助かります
Cの入門書が終わり、この後、VC++を購入して
猫でもわかるWINDOWSプログラミング
プログラミングWindows第5版〈上、下〉
Win32API完璧マスタ―Visual C++プログラミング
のどれかの本を購入して勉強していこうと思っております

正直、VC++とかMFC・SDKとかAPIとかについて良く分かっておらず
このような勉強の仕方でよいのか不安があります

私の認識では
・VC++とは、コンパイラ・デバッガ・MFCと呼ばれる各種ライブラリ等が入った
開発環境で、MFCではなくSDKを使いたい人にも便利で、Cをやるなら買っておいた
ほうがよいソフト
・MFCとは、WINDOWS用プログラムを作る際、知らなければならないAPIは命令の数も
多く難しい。VC++では、APIを知らない人でもWINDOWSプログラムが簡単に作れるように
MFCという各種ライブラリがある。一般的にVC++用の初級本では、特にAPI・SDK用と書いていない場合
MFCを中心とした本が多い
・SDKとは、APIを使ってWINDOWSプログラムを作る技術
・APIとは、WINDOWSプログラムを作る際、WINDOWSのOSに命令を渡す方法
こんな認識であってますか?
また、C入門書の後、前記の3つの本でVC++とWINDOWSプログラムを勉強しようと
思っておりますが、これらの中でC++やVC++の使い方を前もって知らないときつい
本はありますか?
このような勉強方法以外に、お勧めの勉強法はありますか?
長くなりましたが、宜しくお願いします

373 :デフォルトの名無しさん:2005/06/09(木) 21:11:11
コンパイラ・デバッガはツールでMFCはライブラリでVC++はそれらを含む
パッケージ。SDKだけならVC++はそう便利でもないような。API知らないと
MFCは苦しい。むしろMFCで覚える量は増える。減るのはコーディングの
量だけ。本は「ウィザードで雛形を作りましょう」って感じのが殆ど。コードを
直に書きましょうってのはほとんどない。そしてウィザードの作ったコードの
意味が分からずにドツボにハマる。SDKはSoftware Development Kitの略。
その名の通り、kit。技術ではない。APIは渡す「方法」ではなく、命令(または
その集合)そのもの。

374 :デフォルトの名無しさん:2005/06/09(木) 21:13:31
SDKだけでもVC++は便利だと思います

375 :デフォルトの名無しさん:2005/06/09(木) 21:21:44
>>372
http://e-words.jp/w/Visual20C2B2B.html
http://e-words.jp/w/mfc.html
http://e-words.jp/w/API.html
http://e-words.jp/w/SDK.html

猫でも〜 なら↓覗いてみ
http://www.kumei.ne.jp/c_lang/

俺ならクラスの勉強に移る

376 :375:2005/06/09(木) 21:24:33
クラスってかC++だな

377 :デフォルトの名無しさん:2005/06/09(木) 21:59:39
>>368
「オーナードロー」を調べてみました。そして、WM_DRAWITEM がプローシージャにきた時に、
そのまま return 0; するプログラムを書いてみたのですが、ラジオボタンの◎もテキストも
表示されなくなりました。なんだかよくわかりません。ラジオボタンの◎とテキストを返し
てください。

>>369
WM_CTLCOLOR は windows.h で定義されていないようです。コンパイラに怒られました。

378 :デフォルトの名無しさん:2005/06/09(木) 22:01:55
コンパイラに怒られる前にMSDNあたってみろよ

379 :デフォルトの名無しさん:2005/06/09(木) 22:07:27
>377
オーナードローというのはコントロールの描画をコントロールに任せず自前で描く事。
チェックの状態やテキストは BM_GETCHECK や WM_GETTEXT で取得。

380 :デフォルトの名無しさん:2005/06/09(木) 22:11:30
>>363
GetTopWindowするとうちの環境ではIMEのツールバーが返ってきてしまい
それをアクティブにするとエラーがでてしまいます(成功してもあまり意味ないですし・・・)。
Alt+TABで切り替えられるウィンドウに限定することは出来るでしょうか?
やりたいのはこんなことなんですが
// アクティブウィンドウを裏に回して次のウィンドウに切り替える
HWND h = GetForegroundWindow();
SetWindowPos(h, HWND_BOTTOM, ...);
h = GetTopWindow(0); // <-ここでIMEのツールバーが引っかかる
SetActiveWindow(h);

381 :デフォルトの名無しさん:2005/06/09(木) 22:14:20
>>361 ( ´,_ゝ`)プッ・・

382 :デフォルトの名無しさん:2005/06/09(木) 22:21:19
>>379
ということは◎やテキストも自分で描くんですか?背景色を変えたいだけ
なんですけど。今、ラジオボタンの領域の背景はグレーなのですが、
クリックして選択された場合には赤などに(選択されたことを強調する意味)
したいのです。その他の点はまったく同じで。

383 :デフォルトの名無しさん:2005/06/09(木) 22:39:11
漏れは、サブクラス化してWM_PAINTを乗っ取る方法を
使ったな。ほかにも幾つか捕まえるべきメッセージが
あったはずだけど、それは忘れた。

384 :デフォルトの名無しさん:2005/06/09(木) 22:39:17
だから、WM_CTLCOLOR

385 :デフォルトの名無しさん:2005/06/09(木) 22:51:50
>>384
調べたらMFCがどうたらとか出てきたのですが。。。
このスレMFCはなしでしょ?Win32APIの呼び出しで解決したいのですが。
WindowBackgroundBrushChangeHappy(hMyRadioButton, hMyBrush) みたいな。

386 :デフォルトの名無しさん:2005/06/09(木) 22:52:30
WM_CTLCOLORはWIN16時代のもので、
今は
WM_CTLCOLORBTN、WM_CTLCOLORDLG、WM_CTLCOLOREDIT、...
に分かれている
つかMSDN嫁

387 :デフォルトの名無しさん:2005/06/09(木) 22:59:06
>>381
(^ω^;)そう笑うなよ

388 :365:2005/06/09(木) 23:47:44
>>386
ありがとう。ありました。でもうまくいきません。どなたかソース見てください。
元の質問は >>365 です。

#include <windows.h>

#define IDR_COKE 10001
#define IDR_COFFEE 10002

void OnCreate(HWND hWnd)
{
CreateWindow("BUTTON", "コーラ", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON | WS_GROUP,
0, 0, 100, 18, hWnd, (HMENU)IDR_COKE, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), 0);

CreateWindow("BUTTON", "コーヒー", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
0, 20, 100, 18, hWnd, (HMENU)IDR_COFFEE, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), 0);
}

389 :続き:2005/06/09(木) 23:48:47
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch (msg) {
case WM_CREATE:
OnCreate(hWnd);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CTLCOLORBTN:
return (LRESULT)CreateSolidBrush(RGB(0xff, 0, 0));
default:
return DefWindowProc(hWnd, msg, wp, lp);
}
}

390 :続き:2005/06/09(木) 23:50:05
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int nCmdShow)
{
WNDCLASS winclass = {
CS_HREDRAW | CS_VREDRAW, WndProc, 0, 0, hInst, 0, LoadCursor(0, IDC_ARROW),
(HBRUSH)(COLOR_WINDOW+1), 0, "MainWindow",
};
RegisterClass(&winclass);

HWND hWnd = CreateWindow("MainWindow", "test", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0,
CW_USEDEFAULT, 0, 0, 0, hInst, 0);

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

MSG msg;
while (int rt = GetMessage(&msg, 0, 0, 0)) {
if (rt == -1) break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

391 :デフォルトの名無しさん:2005/06/09(木) 23:51:43
ソースを貼り付けんな馬鹿。
どっかにうぷってそのアドレスを貼り付けろ

392 :365:2005/06/09(木) 23:53:36
どっかにうっぷる方法が分かりません。もうしないので、ご勘弁を。

393 :デフォルトの名無しさん:2005/06/09(木) 23:54:41
荒らしヨクナイ

394 :デフォルトの名無しさん:2005/06/10(金) 01:18:35
> return (LRESULT)CreateSolidBrush(RGB(0xff, 0, 0));
アフォ

395 :365:2005/06/10(金) 01:28:33
>>394
もっと詳しく。リークなら怖くありません。テストプログラムなので。

396 :デフォルトの名無しさん:2005/06/10(金) 02:14:42
ラジオボタンなら
WM_CTLCOLORBTN じゃなくて
WM_CTLCOLORSTATIC だ。

397 :デフォルトの名無しさん:2005/06/10(金) 02:17:12
どうでもいいけど >>365 はC++で完全にC + SDKスタイルで書いてるんだな
そういう人、結構いるの?

398 :デフォルトの名無しさん:2005/06/10(金) 06:13:59
個人でMFC使う利点がわからないので俺もSDKスタイル

399 :デフォルトの名無しさん:2005/06/10(金) 06:26:02
COM関係扱うときはMFCとかATL/WTLのほうが楽じゃないか?
といいつつ俺も普段は生APIだな。

400 :デフォルトの名無しさん:2005/06/10(金) 06:33:16
俺は生APIから入ったからAPIは知ってるけどMFC・ATL/WTLを知らない

401 :デフォルトの名無しさん:2005/06/10(金) 07:15:36
ぶっちゃけ生API派な俺にはMFCとかキモ過ぎ
自分で必要なクラス設計した方が気持ちいい

402 :デフォルトの名無しさん:2005/06/10(金) 07:40:40
ATL/WTLはいいと思うけどな。ATL/WTLを使い出す前はメッセージクラッカー使っていた。
どっちも使っている人少ない……。 ○| ̄|_

403 :デフォルトの名無しさん:2005/06/10(金) 07:52:08
生APIはソースが汚くなるから、ATL/WTLかMFCを使う。

404 :デフォルトの名無しさん:2005/06/10(金) 07:55:04
ここは生々しいインターネッツですね。

405 :デフォルトの名無しさん:2005/06/10(金) 08:09:24
やっぱり生がいちばん

406 :デフォルトの名無しさん:2005/06/10(金) 08:16:29
質問です

コンパネにある「サウンドとオーディオ」の
ハードウェアtabにある既定のデバイスを、
ソフト側から変えたい
(たとえばあるソフトを使うときは特定のデバイスを出力対象にしたい)
のですが、APIは何を使えばよいんでしょう?

ボリュームをかえるmixerってのはよく検索にひっかかるんですが、
どうも求めるものじゃなさそうだし・・・
ちなみに開発環境はXPでVB

407 :デフォルトの名無しさん:2005/06/10(金) 09:27:16
しかし、MFCにあるけどAPIに無い、って場合
ソース見てどのAPI使ってるかの確認くらい
できないのかねぇ

408 :デフォルトの名無しさん:2005/06/10(金) 09:35:21
FillSolidRectとかな

409 :デフォルトの名無しさん:2005/06/10(金) 10:27:36
Windows 2000

「ハードウェアの取り外し」ダイアログで
適当な装置に対して取り外し操作がおこなわれたときの
アクションをつくる必要があります

APIドキュメントを読むと

WM_DEVICECHANGE

というメッセージがきて
「取りはずし要求」をしめす

DBT_DEVICEQUERYREMOVE

というイベントをもっている,
ということになっています.

ところが実験してもこのイベントのメッセージがきません

「取りはずし」が終わったことを示す

DBT_DEVICEREMOVECOMPLETE

というイベントはちゃんときています.

ほしいのは「取りはずし」の事前のメッセージなんです
なぜこれが来ずに終わった後のは来るのでしょうか?
どうしたら事前に来るようになるのでしょうか?



410 :デフォルトの名無しさん:2005/06/10(金) 11:32:12
SDKでグローバル変数を使わず作るのが本当の熟練者。

411 :デフォルトの名無しさん:2005/06/10(金) 11:34:39
>>410
熟練者とまで行かなくても使わずに済ませられると思うが

412 :デフォルトの名無しさん:2005/06/10(金) 11:43:05
もちろんウィンドウプロシージャ内でのstatic変数も駄目。

413 :デフォルトの名無しさん:2005/06/10(金) 11:43:10
使っても問題ないしな

414 :デフォルトの名無しさん:2005/06/10(金) 12:01:33
GetWindowLongだのGetPropだのサンクだの程度では熟練者じゃないな。

415 :デフォルトの名無しさん:2005/06/10(金) 14:18:43
>>402
ATLはやはりCOM系の開発で使われることが多い希ガス

ATL7+WTLで普通のWindowプログラム書くの、悪くないんだけどWTLは
非標準だしドキュメント不足なので、仕事で使うには二の足を踏んでしまう

まあATL7だけでも、生APIゴリゴリよりはぜんぜんマシだと思うけど。
特にActive X controlのホスティングとか、生APIではやってらんない。
あれと同等のものを作るのは車輪の再発明でしかないよ。


416 :デフォルトの名無しさん:2005/06/10(金) 15:20:05
>WTLは非標準だし
WindowsAPI、MFCは標準なのか?


417 :デフォルトの名無しさん:2005/06/10(金) 15:32:07
最近メッセージクラッカーを覚えて少しだけソースが読みやすくなったと思っています。

MFCとかATL/WTLってどういうもの?
Win32APIをクラスでラップしたものという解釈でいいの?

覚えてみようかとも思っているけど、MFCとATLってどっちがいいのかわからないんですが。

418 :デフォルトの名無しさん:2005/06/10(金) 15:58:16
>>417
MFCよりATLの方がAPIをラップしただけという感が強いと思う。
ATL自体はメッセージクラッカーのような物を持っていない。(W/LPARAMがそのまま渡される)
そこへWTLを使うとメッセージをクラックするのがついてくる。

419 :デフォルトの名無しさん:2005/06/10(金) 16:11:21
FindFirstFileを使って、フォルダ内のファイルを検索したんですが、
FindFirstFileからWIN32_FIND_DATAに格納される値が必ず"フフフフフフフフフフフフフフフ"となってしまいます。
なぜなのでしょうか。
C言語ソースファイルだけを抽出しようとしています。

ちなみに、指定しているパス名は、
WIN32_FIND_DATA FindFileData;
HANDLE hFind;

hFind=::FindFirstFile("C:\\MySourceFile\\*.c",&FindFileData);
というかんじです。

420 :デフォルトの名無しさん:2005/06/10(金) 16:13:02
>>416
MS的には非標準でしょ

>>417
C++使ってオブジェクト指向でWindowを扱おうとすると

Window class --> C++ class
Window --> C++ object

のように対応付けるのが普通。というかそうしたくなる。
そうすると問題になるのが、グローバル/staticな関数であるWindowProcで、
これをC++クラスのインスタンスメソッド(メンバ関数)にマップしたい訳。

で、その方法は色々あって、一番単純なのはSetWindowLongでC++クラスの
インスタンスのポインタをWindowに設定してしまうことなのだが、
# こうした方法の例はPlatformSDKのCOMサンプルなどに存在する。
ATLのようなライブラリではもっとマシで効率の良い方法が用いられている。

まあC APIのラッパーで基本的には間違ってないんだけど、
上述したように、よりC++的にWindowingできる仕組み・フレームワークを提供している
という点がまあ一番のポイントじゃないかな。
それと、利便性だけで言うなら、COMコンポーネントを使うのは
MFCやATLを使う方がCで直触りするよりずっと簡単。
COMサポートに関しては、ただの「薄いラッパー」をはるかに超える
充実した機能が提供されてるから。

421 :デフォルトの名無しさん:2005/06/10(金) 16:15:59
>>419
関数が失敗してるんじゃね?

戻り値をチェックしる

422 :デフォルトの名無しさん:2005/06/10(金) 16:51:23
フフフ・・・はdebugモードでの未初期化の内容
つまり、フフフがセットされたのではなくて
誰もセットしてないってこと。
>>421の言うように失敗してると思われ

423 :デフォルトの名無しさん:2005/06/10(金) 17:22:23
ちょいと気になることなんだけど
VirtualAllocVlmのような64bitAPIは抹殺されたの?
英語版のMSDNに載ってないんだけど。

424 :デフォルトの名無しさん:2005/06/10(金) 17:29:38
フフフはint3

425 :デフォルトの名無しさん:2005/06/10(金) 17:31:11
ヒヒヒヒヒ は ネオ麦茶

426 :デフォルトの名無しさん:2005/06/10(金) 17:52:00
ウホッ は ヤマジュン

427 :デフォルトの名無しさん:2005/06/10(金) 19:03:17
>>416
このスレでそれを言っちゃおしまいよ

428 :デフォルトの名無しさん:2005/06/10(金) 19:03:56
>>417
ATL にも MFC にも、APIを適当にラップしたクラスと、
アプリケーションやコンポーネントを作るためのフレームワークとの
両方が入ってます(他にユーティリティ的なものもある)。

API をラップした部分ははっきりいってどうでも良いものが大半なのですが、
フレームワークの方は VC++ の独自拡張構文や VisualStudio の支援とも
有機的に結合していて大変結構役に立ちます。

429 :417:2005/06/10(金) 19:24:59
ちょっと調べてみたところ、ATLやWTLが面白そうです。
Win32APIは今までどおり使いたいけど、
生でAPIを使ってGUIを書くと面倒ですし。

といっても、その辺に転がっているGUIの独自なライブラリだと、
自由にできなくて不満だったり。


WindowsのGUIの仕組みって、もう少し簡単にはできなかったのかな。
といっても、現行のメッセージを投げる以上にいい仕組みが思いつかないへたれですがorz

430 :365:2005/06/10(金) 21:31:05
>>396
ありがとう。まだうまくいかないけどがんばってみます。

431 :デフォルトの名無しさん:2005/06/10(金) 23:48:22
フフフフフフフフフ って笑われてんだよ おめー何つくってんだよって

432 :デフォルトの名無しさん:2005/06/11(土) 00:06:43
WTLがバージョンアップした日にWTLスレよりWTL関係のレスが多いスレはここですか。

433 :デフォルトの名無しさん:2005/06/11(土) 01:15:56
Windowsプログラミングの達人になるためにはどのくらいの期間が必要ですか?

434 :デフォルトの名無しさん:2005/06/11(土) 01:18:00
今まで食ったパンの枚数×秒

435 :デフォルトの名無しさん:2005/06/11(土) 01:24:04
まじめに頼む。

436 :デフォルトの名無しさん:2005/06/11(土) 01:24:05
すまんかった

437 :デフォルトの名無しさん:2005/06/11(土) 01:24:59
1秒でレスが。。。

438 :デフォルトの名無しさん:2005/06/11(土) 02:00:02
>>435
人それぞれ

439 :デフォルトの名無しさん:2005/06/11(土) 02:02:34
どれぐらいのレベルならWindowsプログラミングの達人なんだろうな
IEやMicrosoft Excelが自分で組めたら達人か?
カーネル書くとかは、Windowsプログラミングとはいえないような気がするな

440 :デフォルトの名無しさん:2005/06/11(土) 02:10:45
>>439
初心者の質問に
迅速かつ丁寧に答えられるようになったらマスターだぜъ( ゚ー^)

441 :デフォルトの名無しさん:2005/06/11(土) 02:52:05
デュアルディスプレイの環境で2つ目のディスプレイのDCを取得するにはどうしたらいいのでしょうか?

442 :デフォルトの名無しさん:2005/06/11(土) 05:21:09
Windowsのページ保護を勉強して悩んでいるんですが、プロセス空間内に、読めるけど書き込めないページが存在してますよね?
これはページ属性のR/Wビット(PTE-b1)を0にしているからだと思うんですが、このビットは486以降の機能だと本に書いてありました。(アスキー出版局「はじめて読む486」P.308)
Windows95や以前のWindowsNTでは386(SX)が最低スペックですよね?
だとするとそうしたマシンではこの機能が実現されてなかった、というわけなんでしょうか・・・?(どのページも書き込めてしまったのか!?)
誰か、386で95やNTを動かしてみた、あるいは現在動かしている、という方、いらっしゃいますかね?
ご存じの方、お教え下さい。


443 :デフォルトの名無しさん:2005/06/11(土) 08:18:27
ウィンドウを作って、ステータスバーを付けたのですが
スクロールバーを付けていると、水平スクロールバーの
上にステータスバーが表示されてしまいます。
ステータスバーをウィンドウの1番下に表示したいのですが
なにかいい方法はないでしょうか。

444 :デフォルトの名無しさん:2005/06/11(土) 08:40:11
親ウィンドウにステータスバーを貼り付け残りの部分に子ウィンドウを一枚張る。
その子ウィンドウにスクロールバーをつける。

445 :デフォルトの名無しさん:2005/06/11(土) 11:12:42
>>442
スレタイ嫁

446 :デフォルトの名無しさん:2005/06/11(土) 12:23:52
>>445
「質問箱」ですよね。だからここで質問してるのです。

447 :デフォルトの名無しさん:2005/06/11(土) 12:45:08
何の質問箱か。それが重要だ。

448 :デフォルトの名無しさん:2005/06/11(土) 13:09:34
一応メモリ割り当てAPI関係の質問じゃないか?
というか他に該当スレ思いつかん



分かるのがいるかどうかは別として
386SXじゃ95はおろか3.1でも実用にならないしなぁ

449 :デフォルトの名無しさん:2005/06/11(土) 16:17:33
APIをはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?

450 :デフォルトの名無しさん:2005/06/11(土) 16:19:23
APIとは関係ありません。

451 :デフォルトの名無しさん:2005/06/11(土) 16:43:20
こんばんわ

リソースにあるビットマップファイルをLoadBitmapで読み込むのはわかりますが、
ファイルとしてある.bmpを読み込みHBITMAPへ格納するための手順がわかりません。

簡単で構いませんので、使用するAPIを教えていただけ無いでしょうか。
後は私が調べます。

よろしくお願いいたします。

452 :デフォルトの名無しさん:2005/06/11(土) 16:45:25
LoadImage

453 :デフォルトの名無しさん:2005/06/11(土) 16:46:58
>>451
LoadImage()でLR_LOADFROMFILE指定

454 :デフォルトの名無しさん:2005/06/11(土) 16:52:13
リストビューのアイテム欄にコンボボックスつけられたっけ?

455 :デフォルトの名無しさん:2005/06/11(土) 16:55:17
そんな機能はリストビューには無い。

456 :デフォルトの名無しさん:2005/06/11(土) 17:16:48
>>454
付けようと思えば付けれる

457 :デフォルトの名無しさん:2005/06/11(土) 17:31:16
ただ上に被せるだけだがな

458 :デフォルトの名無しさん:2005/06/11(土) 17:44:00
リストビュー+エディットやコンボでお手軽グリッドみたいなのは
よくやるな

459 :デフォルトの名無しさん:2005/06/11(土) 20:19:51
OfficeやVisualStudioで使われているリバー(ウィンドウ上側についてる)のライブラリは一般公開されてますか?
是非使いたいのですが。

460 :デフォルトの名無しさん:2005/06/11(土) 20:30:45
>>459
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/msdn_rebar.asp

461 :デフォルトの名無しさん:2005/06/11(土) 21:57:59
>>444
助かりました。
ありがとうございます。

462 :デフォルトの名無しさん:2005/06/11(土) 21:59:31
>>460
それはOfficeで使われてるツールバーとは違いますよ。

463 :デフォルトの名無しさん:2005/06/11(土) 22:22:24
じゃXPとか2003とか言わんと

464 :デフォルトの名無しさん:2005/06/11(土) 22:57:04
Windowのコンテントカラーを変えたい場合はどのAPIを呼べばいいのでしょうか?

Windowsの場合は、ウィンドウでデフォルトが白、ダイアログで灰色ですよね。

465 :デフォルトの名無しさん:2005/06/11(土) 23:04:07
>>464
http://wisdom.sakura.ne.jp/system/winapi/win32/win60.html

466 :464:2005/06/11(土) 23:36:49
>>465
できれば、ウィンドウ個別に色を変えたいのですが。

467 :デフォルトの名無しさん:2005/06/11(土) 23:43:27
VCでウィンドウソフトを作っているんだけど(APIのみ)
そのソフトを閉じるときタマに反応が返ってこなくなりOS(XP)の動作もおかしく
なってしまいます。
原因はスレッドのシグナル待ちが考えられるけどそれ以外に原因が思いつきません。
メモリーはリークはしていません。
誰かアドバイスください。


468 :デフォルトの名無しさん:2005/06/11(土) 23:45:44
>>467
そのスレッドのシグナル待ちをどうにかしろよとしか言えない。

469 :デフォルトの名無しさん:2005/06/11(土) 23:45:59
>>467
ソース晒せ


470 :デフォルトの名無しさん:2005/06/11(土) 23:46:16
>>466
諦めろ

471 :デフォルトの名無しさん:2005/06/12(日) 00:21:55
>>459
http://www.bcgsoft.com/bcgcontrolbar.htm
こんなのあるぐらいだから、されてねーんじゃね?

472 :デフォルトの名無しさん:2005/06/12(日) 00:54:46
>>467
デバッグ実行すれば、どこで制御が返って来なくなるかわかるだろ。

473 :デフォルトの名無しさん:2005/06/12(日) 01:23:34
>>467
GetMessageが-1返してるとか

474 :デフォルトの名無しさん:2005/06/12(日) 04:47:42
CPUとHDDの温度を取得する方法を教えてください

475 :デフォルトの名無しさん:2005/06/12(日) 08:21:32
>>466
オーナードロー

476 :デフォルトの名無しさん:2005/06/12(日) 08:21:55
>>474
BIOS依存。確かAPIでは無い。

477 :デフォルトの名無しさん:2005/06/12(日) 08:43:36
ThemeAPI関係で質問させてください。
VSを適用したときのReBarコントロールの背景を描画したいので
すが、OpenThemeDataでReBarのテーマハンドルを取得し、
DrawThemeBackgroundでRP_BANDを指定したのですが何も描画
されませんでした。

CodeProjectから
ttp://www.codeproject.com/w2k/xpvisualstyle.asp
このようなものをみつけ、RebarのRP_BANDを調べてみたのです
が、どのテーマを調べても何もセットされないことがほとんどでした。
他のパーツなのかと思い、一致するものを探したのですがどうも
同じパーツを見つける事ができません。

Rebar(もしくはToolbar)コントロールの背景はどうすれば描画できる
のでしょうか?

478 :デフォルトの名無しさん:2005/06/12(日) 09:56:41
CPUの現在のクロック数などを取得するにはどうしたらよいのでしょうか?

479 :デフォルトの名無しさん:2005/06/12(日) 12:35:09
GetCPUClock

480 :デフォルトの名無しさん:2005/06/12(日) 13:48:17
GetCPUClockAndSoOn

481 :デフォルトの名無しさん:2005/06/12(日) 14:09:55
TreeView_SetItem(m_hWnd,pItem);で、TV_ITEMをセットした後、なぜか強制終了するのですが、
このような不具合ってご存知な人はいますか?

case WM_NOTIFY:
{
MSGFILTER *pmf;
TV_DISPINFO *ptv_disp;
int x,y;

if (wp==11000) {
ptv_disp=(TV_DISPINFO *)lp;
if(ptv_disp->hdr.code==TVN_ENDLABELEDIT)
{
tree.SetItem(&ptv_disp->item);
}
}
}


void CWinMyLapTree::SetItem(TV_ITEM* pItem)
{
TreeView_SetItem(m_hWnd,pItem);
}

482 :デフォルトの名無しさん:2005/06/12(日) 14:10:31
if (wp==11000) {

11000というのは、リストビューのIDです

483 :デフォルトの名無しさん:2005/06/12(日) 14:12:15
TreeView_SetItem(m_hWnd,pItem)の返り値は0で成功してます。

484 :デフォルトの各無しさん:2005/06/12(日) 14:38:58
return も break もしてないから次のラベルまで走ってんジャネーノ
知らねーけど

485 :デフォルトの名無しさん:2005/06/12(日) 15:28:32
C言語を一週間前に始めてifとかwhileとかを一通り覚えただけの俺が
今すぐにwinAPIでのゲーム作りにとりかかるのって無謀ですかね?

486 :483:2005/06/12(日) 15:32:40
どうやら、TreeView_EditLabelを呼び出し処理後(エディット後)、強制終了します。
現在、原因究明中です。

487 :デフォルトの名無しさん:2005/06/12(日) 15:32:55
>>485
無謀だと思う。
平仮名覚えたてで小説書こうとするようなもんだ。

488 :デフォルトの名無しさん:2005/06/12(日) 15:33:34
やりながら覚えるしかねーよ やらなきゃ覚えねーよ
目標あるのはいいことだ ただ自分の予定してる期間の100倍はかかると思っとけ
ゲームの内容にもよるが

489 :デフォルトの名無しさん:2005/06/12(日) 15:44:50
レスどうも。
やはり無謀でしたか・・・。HPとかみてもチンプンカンプンなわけだ。
出直してまいります。

490 :デフォルトの名無しさん:2005/06/12(日) 15:46:31
シューティングやアクション系なら素直にHSPでもつかっとけ

491 :デフォルトの名無しさん:2005/06/12(日) 16:11:42
俺は29歳だけど、Win32APIは余裕だよ。
MFCもマスターしてるし。
今から.NET覚えるつもり。

ただ、そんな俺も、18歳の時に始めてMacintoshのToolboxAPIを見て、「なんじゃこれ!???」と驚いたものです。
あまりの難しさに。

492 :デフォルトの名無しさん:2005/06/12(日) 16:13:47
つ チラシの裏

493 :デフォルトの名無しさん:2005/06/12(日) 16:45:21
   φ(・∀・)
チラシの裏

494 :483:2005/06/12(日) 17:13:46
解決しました。

ツリービューのエディタ部分って、編集が終わったらマウスのクリックじゃないと終われないんだな。
キーボードのリターンキーだと無反応だわ。

495 :デフォルトの名無しさん:2005/06/12(日) 17:19:20
CPUの現在のクロック数などを取得するにはどうしたらよいのでしょうか?

496 :デフォルトの名無しさん:2005/06/12(日) 17:27:21

その質問最近どこかで見かけたな


497 :デフォルトの名無しさん:2005/06/12(日) 17:28:14
>>496
>>478

498 :デフォルトの名無しさん:2005/06/12(日) 17:55:01
CPUの現在のクロック数などを取得するにはどうしたらよいのでしょうか?

499 :デフォルトの名無しさん:2005/06/12(日) 18:10:57
>>442
PTEのR/Wビットなら386の時代からあるよ。
その本が変なこと書いてるか、喪前さんが誤読してるかのどっちかだろ。

あと、CPU特化話だから機械語なんとかってスレで聞いた方がいいかと。

>>491
難しいっていうか、面倒臭いんだよな。
WinAPIからDefWindowProc()を取り除いた風って言えばわかりやすいかな。

500 :デフォルトの名無しさん:2005/06/12(日) 18:16:16
最新技術.NETのほうがWin32より簡単な罠

501 :デフォルトの名無しさん:2005/06/12(日) 18:18:20
>>442
はじめて読む486にはこう書いてるよ。

>リードライトビット
>0ならば、特権レベル3では書き込みできない
>0ならば、CR0レジスタのWPビットが1のとき、特権レベル2以下でも書き込みできない(486のみ)

要するに一番下の行に書いてあることが\486のみだっていうことだ

502 :デフォルトの名無しさん:2005/06/12(日) 19:16:08
すいません、WM_APPというのが具具ってもよくわかりません。
グローバルフックでWM_APP+100までのメッセージを受け取って
キー入力があったこと自体は判別できたのですがWM_CHARの
wparamのように入力されたキーを判別する方法がわかりません。教えてくださいおねがいします

503 :デフォルトの名無しさん:2005/06/12(日) 19:27:44
WM_APPは、アプリケーションが勝手に定義して勝手に使うメッセージ。
だから、WM_APPでキー入力の判定が出来るというのが、そもそも
そのアプリケーション特有の動作。

504 :デフォルトの名無しさん:2005/06/12(日) 22:39:04
エスパーだな

505 :デフォルトの名無しさん:2005/06/12(日) 22:41:22
>>498
1クロック命令を1秒間繰り返し実行して、実行した回数を取得する。

506 :デフォルトの名無しさん:2005/06/12(日) 22:48:13
winプログラムでゲームを作ろうとしているのですが、
ビットマップを描き消しするためにInvalidateRectを使っています。
しかし、頻繁に使っているせいでもありますが、ちらつきがよく目立ちます。
なんとかならないでしょうか?

507 :デフォルトの名無しさん:2005/06/12(日) 22:49:46
WM_ERASEBKGND でも抑制したら。

508 :デフォルトの名無しさん:2005/06/12(日) 22:50:21
>>506
つ DirectX

509 :デフォルトの名無しさん:2005/06/12(日) 22:51:48
ダイアログボックスをつっくてEDITTEXTコントロールを使用したのですが、何も表示されないのですがこれはなぜでしょう。
EDITTEXTの部分は
  EDITTEXT IDC_EDIT,59,7,60,13,ES_AUTOHSCROLL
となっております。

510 :477:2005/06/12(日) 22:56:37
うーん丸一日弄ってたけどさっぱりわからなかった…。
CodeProjectのほうでも同じような質問が出てるっぽいし解決法
なしでFAなのかな。

511 :デフォルトの名無しさん:2005/06/12(日) 23:00:10
>507-508
おお、早々とありがとうございます。

512 :デフォルトの名無しさん:2005/06/12(日) 23:02:40
>>510
fMaskにRBBIM_BACKGROUNDじゃだめなのか?

513 :477:2005/06/12(日) 23:15:54
>>512
すみません、たびたび質問で申し訳ないのですがfMaskとは
どの関数のパラメータでしょうか。
DrawThemeBackground(Ex)には見あたらなかったもので。

514 :デフォルトの名無しさん:2005/06/12(日) 23:22:25
あ、悪い。
通常のrebarと勘違いしてた。

515 :477:2005/06/13(月) 01:28:36
>>514
申し訳ないです、通常のReBarならそのまま作ってやればいいん
ですけどねぇ。
いろいろ探ってみます。ありがとうございました。

516 :デフォルトの名無しさん:2005/06/13(月) 03:39:27
winのアクセサリのペイントなどでBMPを扱う際に
範囲指定などで始点と終点を結ぶ点線の矩形を表示していますが
あれはどのように実装すればいいのでしょうか?
MFC使用不可でおねがいします。

517 :デフォルトの名無しさん:2005/06/13(月) 05:30:25
>>516
普通にAPIで矩形描画すりゃいいじゃん

518 :デフォルトの名無しさん:2005/06/13(月) 09:01:27
すいません、猫でもの通りにdll作ってみたのですがlibファイルが生成されません。なぜでしょうか教えてください

519 :デフォルトの名無しさん:2005/06/13(月) 09:18:16
>>516
CreatePen()で破線作って書いたり消したり。
ちらつきが気になるならバックバッファでも作る。

XORペンってなかったっけーとおもったけど見あたらなかった。
漏れなんか勘違いしてるのかな・・・。

>>518
猫でものとおりにやってないor猫と環境が違う。

520 :デフォルトの名無しさん:2005/06/13(月) 09:43:53
猫でもの簡単に作るのとこのはできるんだよ。161章のソースで
"hookdll.h"とか存在しないファイルをインクルードしてるたり
ソースの途中にコメント入れてたりして激しくむかついてくるんだが


521 :デフォルトの名無しさん:2005/06/13(月) 10:00:34
他のサイトみてやっとできたぜ。EXPORTの説明ぐらい書けよ糞猫が

522 :デフォルトの名無しさん:2005/06/13(月) 14:17:03
そもそも猫は勉強するためには使わない方が吉。
Win32のソース集だけと思っておけ。

523 :デフォルトの名無しさん:2005/06/13(月) 15:11:57
>>519

SetROP2(hdc,R2_COPYPEN);
SetROP2(hdc,R2_XORPEN);



524 :デフォルトの名無しさん:2005/06/13(月) 15:55:01
ニャンコと呼べ

525 :デフォルトの名無しさん:2005/06/13(月) 15:56:33
>>516
MFCのソースを見ると、リージョンを駆使した挙句にPatBltしてる。
MFC使用不可でもソース見てみたら?

526 :デフォルトの名無しさん:2005/06/13(月) 16:16:25
>>520-521
帰れ

527 :デフォルトの名無しさん:2005/06/13(月) 16:56:14
>>523
ソレダ すっきりした。ありがとん。

528 :デフォルトの名無しさん:2005/06/13(月) 17:22:28
ロックしてるファイルを削除したいの
どお、できそう?

529 :デフォルトの名無しさん:2005/06/13(月) 17:33:15
マシン再起動して起動時に削除

530 :デフォルトの名無しさん:2005/06/13(月) 17:40:30
他に意見のある方いますか?

531 :デフォルトの名無しさん:2005/06/13(月) 17:48:07
異議な〜し

532 :デフォルトの名無しさん:2005/06/13(月) 17:51:06
待て待て、ロックを解除してからファイルを削除すると言うのはどうだ?

533 :デフォルトの名無しさん:2005/06/13(月) 18:06:05
他の人(アプリ)がロックしたものでも
だいじょうぶ?

534 :デフォルトの名無しさん:2005/06/13(月) 18:08:24
ロックもへったくれも無いな

535 :デフォルトの名無しさん:2005/06/13(月) 18:19:56
そこをなんとか

536 :デフォルトの名無しさん:2005/06/13(月) 18:25:54
窓から投げ捨てろ。

537 :デフォルトの名無しさん:2005/06/13(月) 18:28:37
他のアプリがロックしてるならそのアプリを終了させればよかろ?

538 :デフォルトの名無しさん:2005/06/13(月) 19:41:08
タブコントロールの指定したタブをアクティブにしたいのですが、
Win32の場合ですと、どのようにするのでしょうか。
おそらく、SendMessageで何かしらのメッセージを送っていると思いますが。

539 :デフォルトの名無しさん:2005/06/13(月) 19:46:25
>>537
やっぱそうなる?

他に意見のある方いますか?

540 :デフォルトの名無しさん:2005/06/13(月) 19:49:12
EDITTEXTを使っているのに画像の様に何も表示されません。
しかし、ダイアログを移動させると表示されます。これはどうしてでしょうか?
ttp://sakots.pekori.jp/cgi/sn/src/up22563.png

541 :デフォルトの名無しさん:2005/06/13(月) 19:50:52
ロックを強制的に解除できるIFSレイヤでも書いたら。

542 :デフォルトの名無しさん:2005/06/13(月) 19:51:58
SendMessageとPostMessageの違いですが、
イベントキューに入れるのではなく、即メッセージ処理をしてくれるのはどっちのほうでしょうか?

543 :デフォルトの名無しさん:2005/06/13(月) 19:54:00
>>542
MSDN読めば分かるだろう

544 :デフォルトの名無しさん:2005/06/13(月) 19:57:11
>>542
「即メッセージ処理」させるAPIなんてない。
どっちもメッセージキューに入れられる。

545 :デフォルトの名無しさん:2005/06/13(月) 20:20:20
リッチエディトの選択範囲の文字サイズを変えたいのですが、
どうもうまくいきません。
何に問題があるのでしょうか?

void CMyRichEdit::SetFontSelected(char* pFontName,int fontSize)
{
HDC hDC=::GetDC(m_hWnd);

CHARFORMAT cfm;
memset(&cfm,0,sizeof(CHARFORMAT));
cfm.cbSize=sizeof(CHARFORMAT);

cfm.dwMask=CFM_CHARSET|CFM_FACE|CFM_SIZE;
cfm.bCharSet=SHIFTJIS_CHARSET;
cfm.dwEffects=0;
cfm.yHeight=MulDiv(fontSize,GetDeviceCaps(hDC,LOGPIXELSY),-1440);
strcpy(cfm.szFaceName,pFontName);

::SendMessage(m_hWnd,EM_SETCHARFORMAT,SCF_SELECTION | SCF_WORD,(LPARAM)&cfm);

::ReleaseDC(m_hWnd,hDC);
}

546 :545:2005/06/13(月) 20:26:39
上記は解決しました。

もう一点ですが、リッチエディットに設定されてる文字数を得るにはどうすればいいのでしょうか?

547 :デフォルトの名無しさん:2005/06/13(月) 21:20:10
>>546
GetWindowTextLengthは駄目?

548 :デフォルトの名無しさん:2005/06/13(月) 21:51:46
ロックを解除するソフトなら、http://ccollomb.free.fr/unlocker/ などがある。
どうやって実現しているのか興味があるが、分からん。

549 :デフォルトの名無しさん:2005/06/13(月) 23:53:38
>>540
絵だけ見ても判らんが、描画順序の問題じゃないの?
EDITTEXTを描画した後に同じ座標に重なっている別のWindowをSW_HIDEしているとか。

550 :デフォルトの名無しさん:2005/06/14(火) 00:07:30
>>544


551 :デフォルトの名無しさん:2005/06/14(火) 00:17:04
SendMessageは投げたメッセージを処理するまで帰ってこない
PostMessageは投げたら即帰ってくる

どっちもメッセージキューにはいることに変わりは無い。

552 :デフォルトの名無しさん:2005/06/14(火) 00:23:10
>>551
そうじゃない説明よく見るけどなぁ。ほんとう?

553 :デフォルトの名無しさん:2005/06/14(火) 00:23:32
MSDNのSendMessageの解説より

指定されたウィンドウが、呼び出し側スレッドが作成したものであった場合、
そのウィンドウのウィンドウプロシージャがサブルーチンとして即座に呼び
出されます。指定されたウィンドウが、他のスレッドが作成したものであっ
た場合、システムはそのスレッドへの切り替えを行い、次に適切なウィンド
ウプロシージャを呼び出します。複数のスレッド間で送信されたメッセージ
が処理されるのは、受信側スレッドがメッセージ取得コードを実行したとき
だけです。送信側スレッドは、受信側スレッドがメッセージの処理を終える
まで、ブロックされます(待機状態になります)。



554 :デフォルトの名無しさん:2005/06/14(火) 00:26:10
>>551
大嘘つきだな

555 :デフォルトの名無しさん:2005/06/14(火) 00:37:43
Advanced Windows に何か書いてたような気がするけど、
手元にないからわからん。

でも
GetQueueStatus
には
> QS_SENDMESSAGE
> A message sent by another thread or application is in the queue.

これって関係ないかな?

556 :デフォルトの名無しさん:2005/06/14(火) 01:03:59
Sendされたメッセージの処理中に別のメッセージがSendされて来たら
どうなる?

557 :デフォルトの名無しさん:2005/06/14(火) 01:08:33
>>556
Windowsメッセージなら、キューにたまるだけだろ

558 :デフォルトの名無しさん:2005/06/14(火) 01:08:57
>>554
そうか?>>551であってると思うけど

559 :デフォルトの名無しさん:2005/06/14(火) 01:13:07
SendMessageされたメッセージがキューに入るって事は、
GetMessageやPeekMessageで取れるってこと?

560 :デフォルトの名無しさん:2005/06/14(火) 01:17:13
つか>>553のはキューを介さずに直接呼ぶよって説明でないの?
別スレッドからの時はよく分からんけど。

561 :デフォルトの名無しさん:2005/06/14(火) 01:26:14
>>560
ああなるほど、そっちか。
確かにそうだな。

562 :デフォルトの名無しさん:2005/06/14(火) 01:28:54
プ

563 :デフォルトの名無しさん:2005/06/14(火) 02:07:38
AdvancedWindows読め、の一言なんだけどな、実際。>>553をもちょっとかみ砕くと:

スレッドDが作成したウィンドウに、スレッドDまたはSからSendMessage()するとしよう。

(1)スレッドDからSendMessage()した場合
メッセージキューを介さずに直接WinProc()が(関数コールで)呼ばれる。これは皆も知っての通り。

(2)スレッドSからSendMessage()した場合
メッセージはスレッドDの「SendMessage専用メッセージキュー」に一旦溜まり、
スレッドDの「プロキシ的何か」がWinProc()を(関数コールで)呼ぶ。

つまり、Post用のキューとは独立して、他スレッドからのSendMessage用のキューがあって、
「プロキシ的何か」がスレッドSの代わりにスレッドD内でWinProc()を呼び出す仕組み。

>>556
上の例だと、スレッドDの「SendMessage専用メッセージキュー」に溜まって順次処理される。

ちなみに、「プロキシ的何か」ってのはGet/Peek/WaitMessage()なんだけど、
内部的に、暗黙的に処理してるので、外部からはその様子はうかがえない。
なので>>559はNO。

564 :デフォルトの名無しさん:2005/06/14(火) 02:18:38
ちゅうことは、スレッドDがGetMessage等の関数を呼び出した際に、
「SendMessage専用メッセージキュー」を処理して、何食わぬ顔で
通常のメッセージキューの内容をもって返ってくると言うことか。


565 :477:2005/06/14(火) 03:22:31
すみませんが自己解決したっぽいので報告しておきます。
HTHEME hTheme = OpenThemeData(hWnd, "REBAR");
if ( hTheme != NULL) {
 DrawThemeBackground(hTheme, hDC, 0, 0, pRect, NULL);
}
ってな感じのコードで描画することが出来ました。
0とかあのリスト見たら指定しちゃいけないっぽい感じがするよ…。
何はともあれやりたいことは実現できちゃったということで。
レスいただいた方ありがとうございました。

566 :デフォルトの名無しさん:2005/06/14(火) 07:39:25
>>563
知らなかったー。役に立つ情報さんくす。

567 :デフォルトの名無しさん:2005/06/14(火) 08:12:04
>>563
グローバルフック中、Postしたメッセージが
再度フックにかからない理由がようやく分かった気がする
俺からもd

568 :デフォルトの名無しさん:2005/06/14(火) 09:09:34
>>548
寝てる間に遅レスになってしまったが
何らかの方法で出来ることが分かった
Thinks

569 :デフォルトの名無しさん:2005/06/14(火) 09:18:49
使ってみたけど、ファイルを掴んでる
プロセスを殺さないと削除できないのね。
でも、ヒントになったよ。

570 :デフォルトの名無しさん:2005/06/14(火) 09:26:00
質問ですが
タブコントロールでマルチライン表示をした場合ですが、
複数行あるタブの下側にタブ別のウィンドウを表示させますが、
その複数行の一番下の行の位置を得るにはどうすればいいのでしょうか?

今までシングルラインでタブを作ってまして、
タブごとのウィンドウを表示させるにはシングルライン(一行)の後なので、必ず決まった位置になるので
ウィンドウ表示もできますが、

マルチラインタブの場合、動的に複数行になることもあるので、
一番下の行の位置がどこになるのかがわからないので、どのように調べればいいのか教えていただきたいのですが。

571 :デフォルトの名無しさん:2005/06/14(火) 12:50:29
>>570
TCM_ADJUSTRECT。きめうちだと、タブ下側とかにつけたとき困るだろ。

572 :540:2005/06/14(火) 18:40:50
>>549
特に別のWindowをSW_HIDEなどはしていません。
全てのソースを晒すってのもありですか?

573 :デフォルトの名無しさん:2005/06/14(火) 18:59:28
最新のPSDKをインストールしてみたら、WinMainがこんな風に説明されているんだけど……。


int WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
);

なんで__stdcallついてないんだろう。

574 :デフォルトの名無しさん:2005/06/14(火) 19:54:53
>>573
俺はPSDKでは呼び出し規約は省略されているのが当たり前だと思っていたけど。

575 :デフォルトの名無しさん:2005/06/14(火) 20:13:05
>>569
548のページにはハンドルだけ閉じる機能があるって書いてるけどできないの?

576 :デフォルトの名無しさん:2005/06/14(火) 21:22:40
異なるプライオリティをもつ2つの(レディな)スレッドがあるとします。
プライオリティが高い方をスレッドA、低いほうをスレッドBとします。このとき、

1. B は A よりプライオリティが低いのでプロセッサタイムを全くもらえない。
2. B は A よりプライオリティが低いので A と比べて少しのプロセッサタイム
 しかもらえない。

どちらが正しいのでしょうか。

577 :デフォルトの名無しさん:2005/06/14(火) 21:41:03
>>576
B よりも優先度(スレッドのプライオリティとプロセスのプライオリティクラス、
およびプライオリティブーストの状態によって決まる)が高いスレッドが一つも
実行可能な状態でなければ、Bも実行される。

ただし、Bが何かのリソースをロックして、Aがそのロックの取得待ちになったような
場合には、Bには一時的にAと同じ優先度が与えられる。

また、ウィンドウメッセージを受け取った、Wait状態が解除され(てReadyになっ)た、
というような何気ないことでもプライオリティはブーストされるということにも注意。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/scheduling_priorities.asp

578 :デフォルトの名無しさん:2005/06/14(火) 21:42:18
>>576
Aが処理している間は一切Bには時間は与えられない。
AがヘヴィループをまわしているならBは動かないし
IO待ちなんかでAが寝ればその間(だけ)Bが動く。
Aが起きたらその瞬間Bは止まる。

579 :デフォルトの名無しさん:2005/06/14(火) 21:56:15
リアルタイム優先度クラスのスレッドを作ると簡単にシステムをロックできるんだったな
lazy writeのスレッドとかも動けないからデータあぼーん
これもAdvanced Windowsに出てたような

580 :デフォルトの名無しさん:2005/06/14(火) 22:18:34
>>577 >>578
ありがとうございます。間違った先入観をもっていたので、スケジューリングが理解
できずにいました。ちょうど>>577のリンク先のドキュメントを読んでいたところです。

581 :デフォルトの名無しさん:2005/06/14(火) 22:45:54
PostMessageで画面を再描画しているのですが、再描画するまえに次のPostMessageが
呼ばれたら処理がおもくなってしまいます。メッセージキューを削除みたいなことは可能でしょうか?



582 :デフォルトの名無しさん:2005/06/14(火) 22:48:40
>>581
よくわからんがSendMessageにしたらだめ?

583 :デフォルトの名無しさん:2005/06/14(火) 23:01:49
>>581
PeekMessageでPM_REMOVEを指定

584 :デフォルトの名無しさん:2005/06/14(火) 23:05:58
WM_PAINT(とWM_TIMERとWM_QUIT)は
ほかのメッセージが空になるまで
アプリケーションキューの中にあって、
しかも複数きたら、ひとつにまとめる、
と、PSDKの付属文書に書いてあり、てすと

>メッセージキューを削除みたいな
PeekMessage()の最後の引数がなんかそんなみたいな

585 :デフォルトの名無しさん:2005/06/14(火) 23:18:51
UpdateWindow()はWM_PAINTがメッセージキューに溜まっていたら即座にSendすると書かれている。

586 :デフォルトの名無しさん:2005/06/14(火) 23:41:55
せんせい、
アプリケーションキューをバイパスして直接hWndのWndProcにおくる、
とかいてあります

587 :デフォルトの名無しさん:2005/06/14(火) 23:44:02
>>586
それをSendすると言う。

588 :デフォルトの名無しさん:2005/06/14(火) 23:49:30
...すると、GetMessage()でWM_PAINTをフィルタすると
WndProcにはとどかないのでせうか?

すいません、もうねます。

589 :デフォルトの名無しさん:2005/06/14(火) 23:54:25
いやむしろ
キューにたまってるWM_PAINTを出して
UpdateなリージョンをSendMessage()の出した
WM_PAINTのとmergeして、

おくる、
ということなのか、と
おもいますたほんとにねます

590 :デフォルトの名無しさん:2005/06/14(火) 23:56:52
WM_PAINTはユーザが直接Sned/Postしてはいけないものだぞ。
ユーザーから出したいときにはInvalidateRect/Rgn

591 :デフォルトの名無しさん:2005/06/15(水) 00:03:04
>>578
Windowsの場合はAが処理中であっても、Bも動くよ。
あまりにもCPU時間が与えられていないスレッドに対しても
動的なブーストがかかる。

592 :デフォルトの名無しさん:2005/06/15(水) 00:20:05
>>581
PostMessageで良いんなら、InvalidateRect でも構わんのじゃないか?


593 :デフォルトの名無しさん:2005/06/15(水) 01:19:28
>>591
ああ、そのへんもAdvanced Windowsに書いてあったなあ。

594 :デフォルトの名無しさん:2005/06/15(水) 06:51:04
for(;;) printf("%d", c++);
で普通と低で試してみたら低の方は数秒に一度1,2回カウンタが上がるな。
一応終了できるようにメッセージループを回してあげようって事なのか。

595 :デフォルトの名無しさん:2005/06/15(水) 09:47:51
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/priority_inversion.asp

ランダムにブーストするのかな?

596 :デフォルトの名無しさん:2005/06/15(水) 09:55:55
お前ら大して英語読めないくせに生意気に本家へのリンク貼るのやめろよ

597 :デフォルトの名無しさん:2005/06/15(水) 10:17:58
ファイルを新規作成されたときや
削除されたときに出るメッセージってありますか?

598 :デフォルトの名無しさん:2005/06/15(水) 10:30:43
微妙に違うけどIShellChangeNotifyとか

599 :デフォルトの名無しさん:2005/06/15(水) 12:01:42
FindFirstChangeNotification

600 :デフォルトの名無しさん:2005/06/15(水) 12:19:14
>>597
ReadDirectoryChangesW()

601 :597:2005/06/15(水) 12:52:05
FindFirstChangeNotification
ReadDirectoryChangesW()

こういうのは知ってますが
さる事情で使えないので
もしメッセージが出てるなら
それを横取りしたいのですが

602 :デフォルトの名無しさん:2005/06/15(水) 13:06:35
サル地蔵

603 :デフォルトの名無しさん:2005/06/15(水) 13:26:38
>>601
どの程度ちゃんととれるのか知らないけど
SHChangeNotifyRegister

604 :デフォルトの名無しさん:2005/06/15(水) 13:27:03
メッセージって?

605 :デフォルトの名無しさん:2005/06/15(水) 15:14:24
OSはみんなこれから自分が作るアプリに都合がいい仕様になってるのさ

606 :デフォルトの名無しさん:2005/06/15(水) 17:26:25
さる事情:能力がサル以下なので。

それはそうと、IRPはメッセージと言ってもよくね?

607 :デフォルトの名無しさん:2005/06/15(水) 17:55:33
>>603

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shchangenotifyregister.asp

608 :デフォルトの名無しさん:2005/06/15(水) 19:46:42
>>606
メッセージっぽいと言って言えないこともないとは思うけど、
デバドラはさすがにスレ違いな希ガス。

でも、ファイル単位で変更通知あげてくれるフィルタドライバなんてあったら便利そうね。

609 :デフォルトの名無しさん:2005/06/15(水) 19:50:27
タブを下に表示させるのには
どうしたらよいのでしょうか

610 :デフォルトの名無しさん:2005/06/15(水) 20:08:43
TCS_

611 :576:2005/06/15(水) 22:01:54
>>591
>>書いてないですが、576の質問の中の「プライオリティ」はブースト後
のプライオリティ(ダイナミックプライオリティ)です。

それでもスレッドBはプロセッサタイムを(ほんの少しでも)もらえますか?

612 :デフォルトの名無しさん:2005/06/15(水) 22:03:21
>>594

613 :576:2005/06/15(水) 22:24:44
>>612
この実験では、次の(A)なのか(B)なのか分かりません。

(A) プライオリティが低い方のスレッドにブーストがかかってそのスレッドの
  プライオリティが高くなり、そのためそのスレッドが実行された。

(B) プライオリティが低いほうのスレッドが低いまま実行された。

「(B)みたいなことがありえるのか?」が質問です。つまり「プライオリティ」
の根本的な意味が知りたいのです。

614 :デフォルトの名無しさん:2005/06/15(水) 22:40:31
リッチエディット2.0でEM_AUTOURLDETECTを使ってURLを
検出しているんですけど、リッチエディットの背景を黒色に
していると、URLの文字も黒くなって見えなくなってしまいます。

これの対処方法ってないでしょうか?
ぐぐってみたところ、同様の問題の報告は見つかりましたが
対処法はみつかりませんでした。

615 :デフォルトの名無しさん:2005/06/15(水) 22:52:33
>>613
Aだといっても納得しないんだろうな・・・

616 :デフォルトの名無しさん:2005/06/15(水) 23:30:38
>>613
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/scheduling_priorities.asp

ブーストを考えなければ、レディでプライオリティの高いスレッドが常に
実行される。

617 :デフォルトの名無しさん:2005/06/15(水) 23:46:39
シリアル通信のCreateFileのフックについて質問です。

現状、シリアル通信のCreateFileをフックするアプリケーションを作成しています。
C++で作成したWindowsAPIのCreateFileを行うテストプログラムは、
フックできています。

そこで、質問なのですが、VBで作成した
通信制御用ActiveXのMSCommでのPortOpenを行うプログラムを
フックさせたいのですが、上手くいきません。

ActiveXも最終的には、WindowsAPIをコールしているのかなと思って、
いたのですが、全くフックできず、途方にくれています。
そもそも前提であるWindowsAPIをコールしていると思っている、
発想が間違えているのでしょうか?

618 :デフォルトの名無しさん:2005/06/16(木) 00:01:41
CreateFileをフックする? どういうことだろ・・・メッセージは何だろう・・・

619 :デフォルトの名無しさん:2005/06/16(木) 00:07:56
へたれ発見

620 :デフォルトの名無しさん:2005/06/16(木) 00:15:05
>>617
OpenFileとかCOMポートを開きうる命令は他にもある。

>>618
API HOOKでぐぐってみ?

621 :デフォルトの名無しさん:2005/06/16(木) 00:24:45
ども。へたれです。SetWindowHookExとかサブクラス化などをイメージしてしまいました。
ぐぐりました。とても勉強になりました。620さんありがとう。
フックっつーかハックのような感じですね スレ汚しすまん

622 :デフォルトの名無しさん:2005/06/16(木) 00:33:25
>>621
いいえフックです

623 :デフォルトの名無しさん:2005/06/16(木) 00:52:19
いいえホックです

624 :デフォルトの名無しさん:2005/06/16(木) 00:55:27
はいジャックです

625 :デフォルトの名無しさん:2005/06/16(木) 00:57:20
>>596
そもそもリファレンス以外は翻訳がないわけだが

626 :デフォルトの名無しさん:2005/06/16(木) 00:58:47
>>623
Q. スティックですか?
A. いいえステッキです

627 :デフォルトの名無しさん:2005/06/16(木) 01:30:08
素敵なステッキ

628 :デフォルトの名無しさん:2005/06/16(木) 02:29:11
すいませんが質問させてください
スレ違いなら誘導おねがいしますm(__)m

OleLoadPictureを使って読み込んだGIFファイルを
ウィンドウに表示しようとしたのですが、GIF画像の
タテヨコのサイズによっては画像が一部ズレて表示されます。
例えば240x240のgif画像なら正しく表示されるのに238x240だと少しズレます。

こういうものなのでしょうか?

具体的にはIPictureを使って以下のようにしています

OLE_XSIZE_HIMETRIC stWidth;
OLE_YSIZE_HIMETRIC stHeight;

iPicture->get_Width( &stWidth );
iPicture->get_Height( &stHeight );

HDC hdc = GetDC( hWnd );
long w = MulDiv( stWidth, GetDeviceCaps( hdc, LOGPIXELSX ), 2540 );
long h = MulDiv( stHeight, GetDeviceCaps( hdc, LOGPIXELSY ), 2540 );

iPicture->Render( hdc, 0, 0, w, h, 0, stHeight, stWidth, -stHeight, NULL );

ネット上に落ちているプログラムも上記となんら変りないので
ちっとも原因が分かりません。
ご存知の方、ご教授お願いします。

629 :デフォルトの名無しさん:2005/06/16(木) 02:41:52
>>625
だから何?

630 :デフォルトの名無しさん:2005/06/16(木) 05:30:53
>>628
GIFを使おうとしたことが無いんでよくわからんが、
1ラインの総バイト数が4の倍数になるようにパディングがしてあったりしないか?
BMPはばっちりされてるんだが、GIFはどうなんだろか

631 :630:2005/06/16(木) 05:32:02
直接操作してるわけじゃないから関係ねぇな・・・スルーしてくれ・・・

632 :デフォルトの名無しさん:2005/06/16(木) 05:37:05
>>629
何を貼ればいいのかと

633 :デフォルトの名無しさん:2005/06/16(木) 09:52:03
** DrawText() **
どうも、本家のが、間違ってる、もよう。

~~~
nCount
文字列の文字数を指定します。
このパラメータに -1 を指定すると、
lpString パラメータは NULL で終わる文字列へのポインタであると見なされます。
この場合、文字列の長さは自動的に計算されます。
http://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_drawtext.asp


nCount
[in] Specifies the length of the string.
<...>
If nCount is 1, then
the lpString parameter is assumed to be a pointer to a null-terminated string and
DrawText computes the character count automatically.

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_0odw.asp

634 :614:2005/06/16(木) 10:48:58
もう少し詳しく調べてみました。

リッチエディットコントロールの背景色をRGB(27,27,27)では大丈夫なのですが
RGB(26,26,26)にした途端に、リンクの色が黒になってしまいました。
また、RGB(26,27,27)は大丈夫で、RGB(26,26,27)は駄目でした。
青成分を0に固定した場合はRGB(40,40,0)まで問題なく、RGB(39,40,0)で黒く
なりました。

コントロールの背景色ではなく、部分的に文字列の背景色だけを設定した場合も
同様の現象が起こっています。

この件に関して、対処法などの情報があれば教えてください。

635 :デフォルトの名無しさん:2005/06/16(木) 11:12:43
>>634
背景を余り暗くしない(R+G+B>=80)か、リンク文字色も自分で設定するしかないんでね?

636 :デフォルトの名無しさん:2005/06/16(木) 12:14:25
>>628
DC側を SetMapMode で MM_HIMETRIC にして、w と h を使わずに
HIMETRIC のままでサイズ指定するとどうなりますか?

637 :デフォルトの名無しさん:2005/06/16(木) 14:41:03
今まで、ダイアログやメッセージボックスを普通に使っていたのですが、いきなり
ダイアログやメッセージボックスがなぜか表示できなくなりました。
しかし、不思議なことにAltキーを押すと表示されます。
ダイアログボックスやメッセージボックスが表示されない以外におかしい所はありません。
もしわかる人がいたら教えてください。

638 :デフォルトの名無しさん:2005/06/16(木) 15:27:08
こんにちは

質問ですが、
VC++6でアプリケーションを作ると、Windows2000風なGUIデザインになりますが、
その際、.exeがあるフォルダにマニフェストファイルを入れれば、XPスタイルになりますが、
そのマニフェストファイルを入れなくても、.exeだけでXPスタイルになる方法はありますか?

639 :デフォルトの名無しさん:2005/06/16(木) 15:37:14
>>638
最後の行だけで十分な質問だな
リソースとしてマニフェストやらをもたせるとよいぞ

640 :デフォルトの名無しさん:2005/06/16(木) 15:40:46
>>638
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnwxp/htm/xptheming.asp

641 :デフォルトの名無しさん:2005/06/16(木) 16:32:01
>>638

CreateToolbarEx で作成した ToolBar は XPスタイル(Luna)にすると
ボタンの上で マウスの 左右の 両方のボタンをおすとハングしてしまうので
サブクラス化して、右クリックを無効にしましょう!

さくらエディタ、FFFTP でハングを体験してください。

642 :デフォルトの名無しさん:2005/06/16(木) 17:09:18
デバッグでアプリケーションを起動し、アプリケーションを終了させると、次のメッセージがVC++上で出ます。

Warning: m_pMainWnd is NULL in CWinApp::Run - quitting application.
スレッド 0xC0C 終了、終了コード 0 (0x0)。

とエラーが出た場合、何に問題があるのでしょうか。
特定するのが難しいです。

一応、表面上はアプリケーションは正常終了しているようですが。

643 :デフォルトの名無しさん:2005/06/16(木) 17:10:50
Win32アプリケーションとしてプロジェクトを作ったのですが、
MFCを使いたくなりました。
その場合は、ソースコードに何を追加すればいいのでしょうか。

644 :デフォルトの名無しさん:2005/06/16(木) 18:17:25
>>642
そのメッセージの通りなんだが。
つかスレ違い。

645 :デフォルトの名無しさん:2005/06/16(木) 19:16:15


m_hWnd=CreateWindowEx(
WS_EX_CLIENTEDGE,
"RICHEDIT",
"",
WS_CHILD|WS_VISIBLE|WS_BORDER|ES_MULTILINE |
WS_VSCROLL|WS_HSCROLL|ES_AUTOVSCROLL|ES_AUTOHSCROLL,
0,0,0,0,
hParentWnd,
(HMENU)10012,
hInst,
NULL);

ウィンドウを作る時に固有のID値を渡しますが、
ウィンドウ作成後にそのIDを変える方法を教えていただきたいのですが、
よろしくお願いいたします。

646 :デフォルトの名無しさん:2005/06/16(木) 19:48:00
>>645
_

647 :デフォルトの名無しさん:2005/06/16(木) 19:54:59
SetWindowLong

648 :デフォルトの名無しさん:2005/06/16(木) 20:58:55
SetWindowLongPtr

649 :617:2005/06/16(木) 23:11:33
>>620さん
レスありがとうございます。

Openfileも試してみましたが、ダメでした。

もう少しAPI関係の書籍などにあたってみようと思います。

650 :デフォルトの名無しさん:2005/06/16(木) 23:22:19
_lcreatというのもあるぞ

651 :デフォルトの名無しさん:2005/06/16(木) 23:50:11
>>649
デペンデンシーヲーカーとかで調べるとか

652 :デフォルトの名無しさん:2005/06/17(金) 09:08:08
>>651
なにそれ?
東京ウォーカーみたいなもんか?

653 :デフォルトの名無しさん:2005/06/17(金) 09:38:38
dipends.exe 持ってないの??

654 :デフォルトの名無しさん:2005/06/17(金) 09:53:43
ttp://www.dependencywalker.com/
つか、SDK入れてれば普通入ってるはずだが。

655 :デフォルトの名無しさん:2005/06/17(金) 11:32:45
GetProp(hWnd,_T("MYCLASS"));

の_T(" ")はL" "と同じくワイド文字を扱うということでよろしいのでしょうか?

656 :デフォルトの名無しさん:2005/06/17(金) 11:53:10
>>655
_UNICODE が定義されてればL" "、されてなければ " "

657 :デフォルトの名無しさん:2005/06/17(金) 15:07:47
フロッピィの実物のディスクの出たり入ったりを
動的に知る方法はありますか?


658 :デフォルトの名無しさん:2005/06/17(金) 15:10:37
       ,、__,、 
      ( ・∀・)  フポッピー!
      (、っiョc)   
      ゙'ー'゙ー'゙
       ┃┃
       ┃┃
       ┃┃  フポッピー!!
 / \ ((  )) /   \
 \   ((   ))    /
   \((     )) /

659 :デフォルトの名無しさん:2005/06/17(金) 15:13:12
>>657
無いよ

660 :デフォルトの名無しさん:2005/06/17(金) 15:27:26
>>659
そこをなんとか

661 :デフォルトの名無しさん:2005/06/17(金) 15:35:16
スレ違い的な質問すいません。
実行プログラムの名前変更はどうやればいいのでしょうか?
とあるネトゲで実行プログラム一覧が表示されているみたく、
名前を変更したいのですが・・・

どうかよろしくお願いします。

662 :デフォルトの名無しさん:2005/06/17(金) 15:39:13
SetWindowText

663 :デフォルトの名無しさん:2005/06/17(金) 16:26:08
すいません。

ウィンドウのサイズを右下のつまみで変更するとウィンドウサイズが変わりますが、
その変更の際、WM_PAINTが呼ばれ再描画がされますが、
ちらつきが激しく、見た目が汚くなります。

おそらく、バックグランドカラーで一旦クライアント領域を消去してから、再描画をしているからちらつくのだと思いますが、
そのちらつきをなくす方法を教えていただきたいのですが。

よろしくお願いいたします。

664 :デフォルトの名無しさん:2005/06/17(金) 16:56:22
>>663
>>506-507

665 :デフォルトの名無しさん:2005/06/17(金) 17:13:04
ウィンドウにBUTTONを貼り付けたんだけども、
WM_PAINTでBUTTONの部分がちらつきます。

BUTTONがある部分の再描画処理をしないようにするにはどうすればいいのでしょうか。

666 :デフォルトの名無しさん:2005/06/17(金) 18:12:47
WS_CLIPCHILDREN

667 :デフォルトの名無しさん:2005/06/17(金) 20:45:39
日記
某月某日晴
題 エディット・コントロール

ちょっとややこしめの引数で
コントロールをCreateWindowしたあと
親WndProcでやることは

WM_SIZEでクライアント領域を
コントロールウインドウにぜんぶ割り当てて

WM_SETFOCUSでインプットフォーカスを
コントロールウインドウにぜんぶ割り当てて

WM_COMMANDでエラーをtrapして
MessageBoxで"エラー"とか表示するだけなので

...こんなでできるのね
という感想
しかしたぶんこれは極端な例なのだろう
日記終

668 :デフォルトの名無しさん:2005/06/17(金) 22:26:44
スレ違いなら、誘導お願いします。

今、StartServiceを使ってローカルサービスを
起動するプログラムを作っているのですが、
2つの問題があります。

・サービス制御マネージャ(以下、SCM)がロックされていると
 エラーになる
・StartServiceを発行する際にSCMがロックされ、
 そのタイミングで他のサービスが起動しようとすると、
 そのサービスが起動できず、エラーになる

一点目については、QueryServiceStatusなどを
使って待ち合わせることで解決可能ですが、
二点目について解決できません。

ただし、ATLで当該サービスをラップする
サービスアプリケーションを
作るというのは、運用上できません。

この状況で、以下の解決策を考えたのですが、
実験した結果そうだ、というだけで裏付けがないので
どこかにソースがあればご教授いただきたいのですが。

LockServiceDatabaseでSCMをロックしているときに
DOSコマンドのNET STARTを発行すると、
なぜかエラーになりません。
この方法で上記の2点を解決できるでしょうか。


669 :デフォルトの名無しさん:2005/06/17(金) 23:41:36
簡単な質問かもしれませんが、
ウィンドウのサイズを固定する方法を教えてください

670 :デフォルトの名無しさん:2005/06/17(金) 23:46:41
>>669
WM_SIZINGをとらまえて、LPARAMとして渡されてくるRECT構造体を
修正すれば、そのサイズになるよ。

671 :デフォルトの名無しさん:2005/06/17(金) 23:47:35
サイズ変更可能でないスタイルにする。

672 :デフォルトの名無しさん:2005/06/17(金) 23:57:33
>>669
マウスでドラッグしてウインドウサイズを変更されたくないなら、
ウインドウスタイルにWS_THICKFRAMEを指定しない。

これだけだとシステムの最大化ボタンが有効なままだから、
WS_MAXIMIZEBOXも指定しない。

でもこれだけだと、外部からメッセージ投げられたときとか、ウインドウサイズが変わってしまうんだよね。
というわけで、WM_GETMINMAXINFOを処理する。

673 :デフォルトの名無しさん:2005/06/18(土) 00:02:23
>>657
フロッピドライブにアクセスできなかったら入ってない
フロッピドライブにアクセスできたら入ってる

カリカリうるさいかもしれないが、これでいいじゃないか。

674 :デフォルトの名無しさん:2005/06/18(土) 00:07:07
というより実際FDの場合そうするしかない。

675 :デフォルトの名無しさん:2005/06/18(土) 01:21:57
PC98時代、有名なファイラーでそういう機能を持ったやつがあったけど。

filmtn だったか、HF だったか・・・
FDじゃなかったような木がする。

676 :デフォルトの名無しさん:2005/06/18(土) 02:02:07
X68kではフロッピーをプログラム側から自動排出できたぜ
5インチ最高

677 :デフォルトの名無しさん:2005/06/18(土) 03:05:08
質問。ATLってそんなに難しいの?

http://japanese.joelonsoftware.com/uibook/chapters/8.html

人の素質はベル曲線を描く傾向がある。98%の顧客はテレビが使えるくらいにスマート
かもしれない。70%くらいはWindowsが使える。15%はLinuxを使える。1%はプログラム
が書ける。しかしC++のような言語でプログラムを書くことができるのはほんの0.1%だ。
Microsoft ATLプログラミングが理解できるのは0.01%しかいない(そして彼らは皆、眼
鏡をかけ髭を生やしている)。

678 :デフォルトの名無しさん:2005/06/18(土) 03:30:45
ATL難しいっていうかデザインが悪いと思う。
みんな頭悪いと思われたくないから言わんだけちゃうか。

679 :デフォルトの名無しさん:2005/06/18(土) 07:34:42
>>677
ATL使うこなすために必要な周辺知識が多すぎなだけ。
低レベルすぎて、本当にCOMの全てを理解していないと使いこなせないのよ。

680 :デフォルトの名無しさん:2005/06/18(土) 08:34:07
ウィンドウを全画面表示にするにはどうすればいいでしょうか?

681 :デフォルトの名無しさん:2005/06/18(土) 10:33:47
おはようございます。

質問があるのですが、
ウィンドウにリバーコントロールを貼り付けたまではいいのですが、
ウィンドウサイズをウィンドウの端をクリックドラッグすることで変える最中に、
リバーのつまみとタイトル文字列の部分が「ちらつく」現象がでてしまいます。
どうしてこうなるのかがわかりません。

リバーのつまみとテストボタンという文字列の部分がちらつく
http://www.geocities.jp/ts_d285/rebar.JPG

ご存知な方がいらっしゃいましたら、教えていただきたいのですが。
よろしくお願い致します。

682 :681:2005/06/18(土) 10:37:02
インターネットエクスプローラも同じリバーコントロールを貼り付けていますが、
ウィンドウサイズ変更中にちらつく現象はまったく見受けられません。

683 :デフォルトの名無しさん:2005/06/18(土) 10:46:36
>>681 テーマがクラシックスタイルだったらちらつかない とかあるかも(適当

684 :デフォルトの名無しさん:2005/06/18(土) 11:25:30
SendMessage()でWM_CLOSEを送るとメモ帳や電卓は閉じることができたのですが、エクスプローラやIEは閉じることができませんでした。
PostMessage()ならどちらも閉じることができました。これはどうしてなのでしょうか?



685 :デフォルトの名無しさん:2005/06/18(土) 11:51:17
>>681-682
WM_ERASEBKGNDとかかな。

686 :681:2005/06/18(土) 12:11:33
>>685
WM_ERASEBKGNDは親ウィンドウのプロシージャに分岐させてます。
土日をかけて、この問題を解決しようと思ってます。
もちろん私の不手際もあるでしょうから。

何かご存知な方がいらっしゃいましたら、教えていただけると助かります。

よろしくお願いします。

687 :681:2005/06/18(土) 12:17:52
リバーとかボタンとかコントロールはCreateWindowExをする際、決められたクラス名を登録するので、
それ専用のウィンドウプロシージャは設定しませんが、

今リバーにウィンドウプロシージャを設定したら、::SetWindowLong(m_hWnd,GWL_WNDPROC,(long)wndProc);
リバーそのものを描画してくれなくなりました。

コントロールの描画はWindows側でしているのは当然ですが、
その描画はどこでどのイベントで処理してるのでしょうか?

たぶん、リバーのWM_ERASEBKGNDを処理しないようにすれば、
ちらつきはなくなると思うのですが。

688 :デフォルトの名無しさん:2005/06/18(土) 12:22:09
>>687
いや、WM_ERASEBKGNDはレバーの親ウィンドウで処理しなきゃだめ。
FALSEを返せば背景を消去しなくなるんでちらつきはなくなるはず。

689 :681:2005/06/18(土) 12:27:59
>>688
case WM_ERASEBKGND:
return false;

親側でそのようにしてみましたが
まだちらつきます。
いろいろ試して見たいと思います。

690 :デフォルトの名無しさん:2005/06/18(土) 12:30:44
>>689
>>683は試してみたの?

691 :681:2005/06/18(土) 12:33:29
クラシックスタイルでもちらつきました。

692 :デフォルトの名無しさん:2005/06/18(土) 13:00:23
SPYでメッセージ見てみた?
まあ、ちらつくっつーかWM_NCPAINT飛び交いまくり、システムが更新しまくりだったら
当然っちゃあ当然なのだろう。嫌ならシステムに渡す前に一時的にリージョンから
テキスト部分除くなりなんなりすればよいかもナー

693 :デフォルトの名無しさん:2005/06/18(土) 13:05:51
↑とか適当なこと言っちゃったけどアレか サイズ変更の時だけな

694 :デフォルトの名無しさん:2005/06/18(土) 13:12:56
>>681
CS_VREDRAW CS_HREDRAWを取る

695 :デフォルトの名無しさん:2005/06/18(土) 13:23:02
WM_ERASEBKGND で返すべきは nonzero じゃなかったっけ?

696 :デフォルトの名無しさん:2005/06/18(土) 14:27:29
ダイアログボックスにパスワード入力領域を持たせたいのですがどのようにすればわかりません。
どんなコントロールを使用するのでしょうか?

697 :デフォルトの名無しさん:2005/06/18(土) 14:36:09
>>696
エディットコントロール

698 :デフォルトの名無しさん:2005/06/18(土) 14:37:40
今は普通にエディットコントロールを持たせてるのですが、
入力した文字列を*や黒丸にするようなコントロールはありませんか?

699 :デフォルトの名無しさん:2005/06/18(土) 14:40:45
エディットコントロール

700 :デフォルトの名無しさん:2005/06/18(土) 14:40:55
>>698
エディットコントロールのプロパティにそうするのがある。

701 :デフォルトの名無しさん:2005/06/18(土) 14:42:30
どんなプロパティですか?

702 :デフォルトの名無しさん:2005/06/18(土) 14:43:12
ウィンドウスタイルだろ

703 :デフォルトの名無しさん:2005/06/18(土) 14:48:27
見つけました、ES_PASSWORDですね

704 :デフォルトの名無しさん:2005/06/18(土) 15:11:18
現在ThemeAPIを使ってテキストを描画しようと思っています。
DrawThemeTextを使えばテーマに使用されている効果を使って
描画してくれるようなのですが、そのまま使うとフォントも色もテー
マのものと異なってしまいます。

http://www.microsoft.com/japan/msdn/windows/windowsxp/xptheming.asp
によるとデバイスコンテキストに任意のフォントを追加して呼び出す
ように書いてあったので、GetThemeFontを使いCreateFontIndirect
でフォントを作成、SelectObjectでデバイスコンテキストに割り当てて
みたのですが一向に変化する様子がありません。

たとえばLunaのキャプション文字列はMSUIゴシックに白文字、ボールド
ですが、これと同じようにテキストを描画するには上記の方法で間違って
いるのでしょうか。

よろしくお願いします。

705 :デフォルトの名無しさん:2005/06/18(土) 17:10:32
Macアドレス取れねぇ!と思ったらLANケーブルが抜けていた。
NetBiosだめじゃーん。

いや、ただの雑談です。

706 :デフォルトの名無しさん:2005/06/18(土) 18:18:37
ぬるぽしか返ってこない
LANケーブルがぬけているのだろうか

if ((hResource =
LoadResource(hInst,
FindResource(hInst, TEXT("HAGE"),
MAKEINTRESOURCE(IDR_HANGE100)))) == NULL) {
MessageBox(NULL, TEXT("ぬるぽ"),
TEXT("ぬるぽ"), MB_ICONERROR);
PostQuitMessage(0);
return 0;
}

707 :デフォルトの名無しさん:2005/06/18(土) 18:34:03
MacアドレスとLANケーブルは何も関係ないとおもうんだが。
リモートのMacアドレスが欲しいのか?

708 :デフォルトの名無しさん:2005/06/18(土) 18:37:23
いや、オレも関係ないと思ってたんだけどね。
ケーブル抜いてPC起動するとNetBios系のAPIが全滅なんだよね。
個体差かなぁ。一応、他のPCでもやってみるか。

GetAdaptersInfo()で代用したからいいんだけど。

709 :デフォルトの名無しさん:2005/06/18(土) 18:37:27
自分のだろ。
ネットワークケーブル抜けてたら、自分のそういう情報も取得できないような
話は聞いたことある気がする

710 :デフォルトの名無しさん:2005/06/18(土) 18:55:40
ボタンやコンボボックスのような描画はWindowsが処理しますが、
そのような描画をAPIから呼ぶことはできるのでしょうか。

711 :デフォルトの名無しさん:2005/06/18(土) 18:58:45
ボタンならDrawFrameControlで描ける

712 :デフォルトの名無しさん:2005/06/18(土) 19:08:29
>>711はクラシックスタイル。
ビジュアルスタイルを使うには>>704

713 :681:2005/06/18(土) 19:53:04
原因がわかりました。

リバーを作ると通常はクライアント領域がリバーの下側にオフセットされますが、
何故か知りませんが、リバーを作ってもクライアント領域がリバーの下側に移らず、
リバーとクライアント領域が被さった状態なのでちらつくといったものだと思います。

ただ、なぜリバーを作ってもクライアント領域の範囲が変わらないのか?
もう少し調べてみたいと思います。

714 :681:2005/06/18(土) 20:34:54
リバーの部分はWM_PAINTで計算して、その部分は描画しないようにしないといけないんですね。。。

715 :デフォルトの名無しさん:2005/06/18(土) 20:44:10
WS_CLIPCHILDRENを付ければいいだけだったりして

716 :デフォルトの名無しさん:2005/06/18(土) 21:06:07
>>713
え?
レバー(ツールバーやステータスバーも)つけたときは自分でクライアント領域再計算だろ。普通。
それをやって無かったってこと?

717 :デフォルトの名無しさん:2005/06/18(土) 21:12:24
レバーとリバーどっちやねん

718 :デフォルトの名無しさん:2005/06/18(土) 21:17:56
プログラム実行時に特定のAPIが実行環境において
サポートされているか、調べる方法ってあるんでしょうか?

あと、サポートされていないAPIを呼び出した場合は、
例外が生成されるんですか?

719 :デフォルトの名無しさん:2005/06/18(土) 21:26:30
>>717
レバーは猫書いた奴の間違いとそれを鵜呑みにしたヴァカ

720 :681:2005/06/18(土) 21:31:52
どうもうまくいきませんね
ウィンドウスタイルの設定が繊細すぎる

721 :デフォルトの名無しさん:2005/06/18(土) 21:33:00
>>718
1. LoadLibraryに失敗→その関数をエクスポートしているDLL自体ない
2. GetProcAddressに失敗→関数がエクスポートされていない
3. 呼び出してみたらERROR_CALL_NOT_IMPLEMENTEDで失敗→実装されていない
/DELAYLOAD付きでリンクすると1.と2.は省略できる。その場合関数がない環境で
呼び出そうとすると例外が発生する

722 :718:2005/06/18(土) 21:37:58
>>721
ありがとうございます。

723 :704:2005/06/18(土) 21:42:09
ThemeAPI関連やってる人ってもしかして(しなくても)少ない?
それとも場違いな質問しちゃったんだろうか…(汗

724 :デフォルトの名無しさん:2005/06/18(土) 23:29:14
>>723 なんだテメー新手の煽りかコラ
手っ取り早く部分的にどのタイミングで描いてるかソース晒せ

725 :704:2005/06/18(土) 23:37:10
煽りじゃないです、そうとられたならすいません。
WM_CREATEでテーマハンドルを
HTHEME hTheme = OpenThemeData(hWnd, "Window");
にて取得しておき(エラーチェック諸々は済んでいます)
WM_PAINTにて
PAINTSTRUCT paint;
HDC hDC = BeginPaint(hWnd, &paint);
RECT rect;
GetClientRect(hWnd, &rect);
DrawThemeText(hTheme, WP_CAPTION, CS_ACTIVE,
          L"test", -1,
          DT_CENTER | DT_VCENTER | DT_SiNGLELINE, NULL,
          &rect);
EndPaint(hWnd, &paint);

というこれだけのプログラムです。

http://www.ascii.co.jp/pb/msdn/article/f21_0041.html#fig0007
に記載されているMSDNマガジンのサンプルコードと大差ないと
思っていますが…。

726 :704:2005/06/18(土) 23:39:38
すいません、DrawThemeTextにhDC入れ忘れました。
正しくは
DrawThemeText(hTheme, hDC, WP_CAPTION, CS_ACTIVE,
          L"test", -1,
          DT_CENTER | DT_VCENTER | DT_SiNGLELINE, NULL,
          &rect);
です。

ぐぐってみたところ
ttp://www.mtakahashi.com/old/06975.html#06964 (たぶん同じ問題っぽい。解決策提示されていない。)
ttp://members.jcom.home.ne.jp/1213687801/cs/windowsforms/theme.html (テキスト描画がおかしい記述あり)
とか日本語資料ではこの辺りを見つけることが出来ました。

727 :704:2005/06/19(日) 03:33:02
続けて試行錯誤してみたところ
GetThemeFontでLOGFONTを取得し、CreateFontIndirectでフォント
ハンドルを取得、SelectObjectでHDCにフォントハンドルを割り当てて
からDrawThemeTextを実行するとフォントはそれらしくなりました。
(以前は自分のコーディングミスでした)

が、やはり色は黒いままで、
ttp://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.gdi/2004-08/0324.html
と同じような状態です。
SetTextColorでデバイスコンテキストにRGB(255,255,255)を指定しても
白くならないということはSetTextColorはDrawThemeTextに影響を及ぼ
さないって事だし…。

728 :デフォルトの名無しさん:2005/06/19(日) 07:12:49
CS_SAVEBITS を指定してpoppメニューには効いているんだけど、ダイアログには効かないで
毎回再描画してしまうんですが。。。。

ダイアログの生成方法に何か指定があるのでしょうか?
モーダル、モーダレス どっちも効かないんですけど。。。


729 :デフォルトの名無しさん:2005/06/19(日) 07:14:11
そんなに再描画サボりたいならレイヤードウィンドウにしろ

730 :デフォルトの名無しさん:2005/06/19(日) 11:56:07
>>728
たしかCS_SAVEBITSはポップアップウィンドウのみ。

731 :デフォルトの名無しさん:2005/06/19(日) 13:59:53
おしえてください

ディスプレイキャプチャしたいのですが
GetDC,CreadDC("Display"
では、IMEバー、ポップアップのレイヤー等を
拾ってくれません。
なにかよい方法はあるのでしょうか?


732 :デフォルトの名無しさん:2005/06/19(日) 15:36:18
画面にあるものはのGetDC(NULL), CreateDC("DISPLAY"...で捕れます。
(動画とマウスカーソル以外)
キャプチャー操作の瞬間に消えてるような。
ためしにタイマーとかで捕ってみては?

733 :デフォルトの名無しさん:2005/06/19(日) 15:45:05
      _______________
      | _____________  |
      | |:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::| |
      | |:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::| |  ザー
      | |:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::| |
      | |::::::::::::::::::::::::::::::::::::;;;;;;;;;;;::::::::::::::| |
      | |:::::::::::/ ̄ ̄ ̄`´    `ヽ:::::::| |
      | |::::::::::|  :ill||||||||||ll: ,-‐‐、l::::::| |
      |  ̄ ̄|  ||||||||||||||||「しi .l ll ̄  .|
      | ̄「 ̄|  |||||||||||||||||i ̄川リ ̄| ̄|
      |_| ノ   ||||||||||||||||||     |_|
        /    ||||||||||||||||||
        /    /||||||||||||||||||
       / ̄/ ̄ |||||||||||||||||
       /  /    |l|l|l|l|l|l|l|l
     / /    |l|l|l|l|l|l|ll
    / ヘJ      l|l|l|l|l|l|l
    ノ川        ||l||l||ll

【呪いのコピペ】
このレスを見た人は1週間以内に他のスレへコピペしてください。
そうしないと突然ディスプレイからうわなんだおまえやめ

734 :デフォルトの名無しさん:2005/06/19(日) 16:17:08
>>730

ダイアログも最初に出た位置のママ閉じると WM_PAINT は来ないで
勝手に戻ってくれるのですが。。ダイアログを移動すると WM_PAINT が来てしまいます。
ダイアログが出た1回目だけっていう仕様なのでしょうか?

CS_SAVEBITS 自体Win 3.1 の頃の仕様で、今時の Windows では画面上の動きが違うので
移動したらもうダメなのかな?

735 :734:2005/06/19(日) 16:25:40
>>729

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnwui/htm/layer.asp

便利ですね! ありがとうございます。

今時 95,98,Me な人はいないですよね(笑) 2000,XP 対応で十分!!

736 :デフォルトの名無しさん:2005/06/19(日) 21:10:38
すいません。
win32APIでブロック崩しをつくる為に不可欠な関数を教えてください。

737 :デフォルトの名無しさん:2005/06/19(日) 21:10:44
>>731
IMEを半透明化していませんか?
だったらCAPTUREBLT

738 :デフォルトの名無しさん:2005/06/19(日) 21:17:12
>>736
コンソールプログラムにすればコンソールAPIが要るし、
ウィンドウに出力するのならGDIかGDI+、もちろん基本的なウィンドウの作成もできる必要がある。
それぞれさらにさまざまなアプローチがあるのでブロック崩しには〜が絶対に必要と言えるようなものはない。

739 :デフォルトの名無しさん:2005/06/19(日) 21:27:58
704がスルーされまくっててワロスwww
まあ俺もわからないわけだがな。

740 :デフォルトの名無しさん:2005/06/19(日) 21:47:54
>>704 が放置されてるのは >>705 の発言のせいだっぺ。


741 :705:2005/06/19(日) 22:19:12
>>740=704

ごめんよ、でもその質問の仕方じゃレスつかないと思うよ。

742 :デフォルトの名無しさん:2005/06/19(日) 22:20:19
失せろバカ

743 :デフォルトの名無しさん:2005/06/19(日) 22:26:33
俺も昔サンプルコード動かしたがうまくいかなかったので
力になってやりたいが無理なんだよな。
誰かわかるやつ助けてやってくれ。

744 :デフォルトの名無しさん:2005/06/19(日) 22:35:27
おまえら自演もたいがいにしろよ

745 :デフォルトの名無しさん:2005/06/19(日) 22:51:56
体内ならいいんですか?

746 :デフォルトの名無しさん:2005/06/19(日) 23:12:59
SystemParametersInfoで取得できるフォントはテーマと関係ないのか?
よくわからんが言ってみただけ

747 :デフォルトの名無しさん:2005/06/20(月) 01:23:37
GetSystemParametersInfoFont
GetSystemParametersInfoThema

748 :736:2005/06/20(月) 10:59:59
基本的なウインドウ作製はできたので、次は玉を作りたいんですけど

例えば 
@ SetPixelV関数で打った点を 玉に見立てる
@´玉の絵を書いたビットマップを使う

だったら、この後の処理はどうなるでしょうか?

この経路で作ったとしたら、どんな関数が挙げられますか?

手元には、猫でもわかるwindowsプログラミングとmsdnライブラリがあります

749 :デフォルトの名無しさん:2005/06/20(月) 11:12:06
>>748
板違い

ゲ製作技術
http://pc8.2ch.net/gamedev/

てか、つまづく度に聞くという姿勢は改めたほうがヨサゲ

750 :デフォルトの名無しさん:2005/06/20(月) 11:37:22
>>749
別につまづいてないと思うけど

まぁ自分が苦労と時間費やして調べたことをワンレスで解決されたら
おもしろくないわなw

751 :デフォルトの名無しさん:2005/06/20(月) 11:41:29
>>748
http://www.c3.club.kyutech.ac.jp/~sukiyaki/

752 :704:2005/06/20(月) 16:25:52
>>741
別に705さんのせいとか思ってませんよ、ホントに。
質問の仕方が悪かったですか…どうも申し訳ありませんでした。

>>746
テーマのフォントはGetThemeFont(もしくはGetThemeSystemFont)で
取得できることは突き止めました(>>727)。

>>747
PlatformSDKにはご指摘の関数は見つけられませんでした。
もう少し掘り下げて調べてきます。ありがとうございます。

目的
 Themeのフォント、色、効果を使ってテキストを描画したい。
 (DrawThemeTextが該当すると思われる)

問題点
 DrawThemeTextをMSDNのSample通りに記述しても期待した
 目的の動作を行わない。
 1.フォントの取得 -> GetThemeFontで解決
 2.色の取得 -> おそらくGetThemeColorだが必要なのか?
 3.DrawThemeTextで描画するとフォントのサイズ、色が一致しない

ということなのですが…、スレ違いとかアドバイス等ご指摘がありまし
たら少しご教授して頂きたかっただけです。申し訳ありませんでした。

753 :デフォルトの名無しさん:2005/06/20(月) 18:28:51
iniの操作をしたいんだけどどうしたらいいの?

754 :デフォルトの名無しさん:2005/06/20(月) 18:32:14
GetPrivateProfile○○
WritePrivateProfile○○

755 :デフォルトの名無しさん:2005/06/20(月) 18:32:29
http://www.google.co.jp/search?ie=UTF-8&oe=UTF-8&sourceid=deskbar&q=ini%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB+Win32API

つか大抵は言語ごとに使いやすいライブラリがあるからそれ使え

756 :デフォルトの名無しさん:2005/06/20(月) 18:33:09
>>753
iniファイルのことなら{Get|Write}PrivateProfile*()

757 :デフォルトの名無しさん:2005/06/20(月) 19:35:47
>>754
>>756
ありがとうございます

758 :デフォルトの名無しさん:2005/06/20(月) 20:10:08
背景が透明な文字を表示したいのですが、
どうすればいいでしょうか?

759 :デフォルトの名無しさん:2005/06/20(月) 20:19:18
>>758
せっとばかもーど

760 :デフォルトの名無しさん:2005/06/20(月) 20:22:23
SetBkMode

761 :デフォルトの名無しさん:2005/06/20(月) 21:33:02
>759-760
dクス

762 :デフォルトの名無しさん:2005/06/20(月) 23:13:18
>>752
もうあきらめろ、ここにはおまえの質問に答えれるやついないぞ。
おまえもそこまでやって無理なら別のアプローチを考えるかMSに
聞くしかないだろ。

763 :デフォルトの名無しさん:2005/06/20(月) 23:58:00
>>777
Advanced Windows 嫁

764 :デフォルトの名無しさん:2005/06/21(火) 00:00:21
×答えれる
○答えられる

765 :デフォルトの名無しさん:2005/06/21(火) 00:55:58
巣に帰れ

766 :デフォルトの名無しさん:2005/06/21(火) 01:02:13
>>764
今時「ら抜き言葉」に目くじら立てるなんて。
年がばれますよ。

767 :デフォルトの名無しさん:2005/06/21(火) 01:09:39
ジオボタンにベルを付けたときのメッセージハンドについて教えてください。

768 :デフォルトの名無しさん:2005/06/21(火) 01:58:52
>>767
WM_SETTEXT

769 :デフォルトの名無しさん:2005/06/21(火) 05:22:04
二十歳前だけど答えれるはさすがに無いな

770 :デフォルトの名無しさん:2005/06/21(火) 06:26:29
>>759
あれをばかもーど言うヤツ初めて見た

771 :デフォルトの名無しさん:2005/06/21(火) 06:34:17
自分が使っているWindowsXP SP2を対象OSとします

文字コードは内部ではUNICODEを使っているそうですが、
ファイル名やディレクトリ名、クリップボード、main()のargv、
標準入力や標準出力などをプログラムで得ると、
UNICODEで得られるのでしょうか?

2バイト目に¥があって云々という話は 9x 系だけでしょうか?


772 :デフォルトの名無しさん:2005/06/21(火) 07:00:59
>>771
プログラム側もUNICODEに対応していないといけない。
NT系は何でもUNICODEが使えるが、9x系ではAPIにほとんどUNICODEが使えないから。
そこでUNICODEが#defineで定義されているかどうかで切り替える仕組みがあってコンパイル時にどうするかを決められるようになっている。

クリップボードはUNICODE切り替えとは無関係にCF_UNICODETEXTを指定すればいい。UNICODEテキストじゃなくても勝手に変換してくれる。
標準入出力はAPIでやればUNICODEで入ってくる。ほかにもC/C++のワイド文字入出力も使える。
ただしこっちはMBCSで読み込んでからUNICODEに変換するという風になっているので9xでも使える。

773 :デフォルトの名無しさん:2005/06/21(火) 07:01:21
さぁね
俺は知らんが、デバッグモードで実際にAPIでも使ってファイル名取得して実データ見てみりゃ判るだろ

774 :デフォルトの名無しさん:2005/06/21(火) 07:03:06
>>771
別に9xでも一旦Unicodeに変換して作業して、終わったらMBCSに戻せばいいだけだよ。

775 :デフォルトの名無しさん:2005/06/21(火) 07:49:36
>>770
心でそう呟きながらコーディングしてますが何か?

776 :デフォルトの名無しさん:2005/06/21(火) 09:37:15
結局誰も704にアドバイスしてやれないんだろ(俺も含めて)
それを指摘されたからってら抜き表現がどうとか
揚げ足取りして話しを逸らそうとするのはちょっと
格好悪いと思った。

777 :デフォルトの名無しさん:2005/06/21(火) 09:58:11
↓華麗にスルー

778 :デフォルトの名無しさん:2005/06/21(火) 10:04:20
>>704にレスしたいのだが、残念ながらWin2Kなのであります

779 :デフォルトの名無しさん:2005/06/21(火) 10:45:01
同じく

780 :デフォルトの名無しさん:2005/06/21(火) 10:52:40
残念ながらMacなのであります

781 :デフォルトの名無しさん:2005/06/21(火) 11:05:46
デバイスコンテキストハンドルからウィンドウハンドルを取得する関数ってありますか?

782 :デフォルトの名無しさん:2005/06/21(火) 11:25:51
子ウィンドウにリバーをつけることはできますか?

783 :デフォルトの名無しさん:2005/06/21(火) 16:12:40
>>781
WindowFromDC

784 :デフォルトの名無しさん:2005/06/21(火) 20:11:07
プログラムからセーフモードで起動する方法はないでしょうか。
msconfig などをみるとオプションがあるので、APIなどからできないものかと思った次第です。
InitiateSystemShutdown() や ExitWindows() などではオプションもなく、何か方法がないものでしょうか。ターゲットはWindows XPです。

785 :デフォルトの名無しさん:2005/06/21(火) 20:26:40
boot.ini書き換えればイヤでもそうなるけど、あんまりいい方法じゃ無いよな。

786 :デフォルトの名無しさん:2005/06/21(火) 21:46:29
>>774
それを自動的にやってくれるライブラリ(MSLU)もあるし

787 :デフォルトの名無しさん:2005/06/21(火) 21:53:02
率直に申し上げて、ウィンドウを固定する方法を教えてください。
お願いします。

788 :デフォルトの名無しさん:2005/06/21(火) 22:07:26
>>787
ウィンドウスタイルにWS_THICKFRAMEやWS_SIZEBOX、そしてWS_MINIMIZEBOXとWS_MAXIMIZEBOXを指定しないことから。
そしてWM_GETMINMAXINFOを処理する。位置も動かしたくなければWM_MOVINGも処理する。

789 :771:2005/06/21(火) 22:19:45
UNICODEが定義されているか否かで、たとえば
TCHAR
TEXT()
LoadAccelerators()
などが適切に切り替わる

>>772
にあるように、プログラムがWindowsから
どのように文字コードを受け取るかは
APIで決まる(UNICODEで切り替わる)

ここらへんまではわかったのですが、
リソースファイルやリソースコンパイラは
どうふるまうのでしょうか?

Makefileでは
リソースコンパイラには特にオプションなし
C++コンパイラには -DUNICODE

SJISコードのリソースファイルでは
acc ACCELERATORS DISCARDABLE
{
  VK_ESCAPE, 100, VIRTKEY, NOINVERT
}

ソースファイルでは
LoadAcceleraors(hInst, TEXT("acc"))

こうやってmakeしましたが、とりあずうまくいっているっぽいです
リソースコンパイラはUNICODEでリソースを生成するのでしょうか?

790 :デフォルトの名無しさん:2005/06/21(火) 22:21:42
そう。リソースはWin9xでも常にUnicode

791 :デフォルトの名無しさん:2005/06/21(火) 22:23:00
>>788
わざわざご丁寧に位置の固定までありがとうございます。

792 :デフォルトの名無しさん:2005/06/21(火) 22:24:24
>>789
リソースはUnicodeなのだがLoadAcceleratorsの引数はTCHARで切り替わるようになっているのに注意。

793 :デフォルトの名無しさん:2005/06/22(水) 00:41:32
>>783
ありがとう

794 :デフォルトの名無しさん:2005/06/22(水) 01:04:05
>>789
本筋とは関係ないが、正確に言えばUNICODEでAPIが、
_UNICODEでTEXTマクロ類が切り替わる

795 :デフォルトの名無しさん:2005/06/22(水) 01:45:29
>>794
UNICODEでTEXTが
_UNICODEで_TEXTマクロが切り替わるみたいだけど。
前者はWindows API用で(TEXTマクロも)後者はVC++ランタイム用

796 :デフォルトの名無しさん:2005/06/22(水) 01:46:33
ということに(とても厳密に言えば)なるんだけど
TEXTと_TEXTを意識して使い分けてる人いますか?

797 :デフォルトの名無しさん:2005/06/22(水) 01:58:52
_Tってマクロもあるね
なんかこんがらがってきた


798 :デフォルトの名無しさん:2005/06/22(水) 02:15:36
普通はみんな_T()使ってんじゃないの。みじかいし。


799 :デフォルトの名無しさん:2005/06/22(水) 03:41:35
_Tも_TEXTもTEXTも使ってねぇ

800 :デフォルトの名無しさん:2005/06/22(水) 05:57:19
WinMainで
メッセージループの手前で終わるときは、
0で終了するべき、
というのが、ちょっと

if (error)
return EXIT_SUCCESS;

うーん

801 :デフォルトの名無しさん :2005/06/22(水) 13:27:23
GetLastErrorについて教えてください。
マルチスレッドの各スレッドでGetLastErrorを呼び出します。
複数のスレッドで同時にエラーが発生した場合、GetLastErrorが返す
エラーコードはスレッド単位のものなのですか?
それともプロセス内で発生した一番最後のエラーコードになるのですか?

802 :デフォルトの名無しさん:2005/06/22(水) 13:30:54
MSDN引け。ちゃんと書いてある。

803 :デフォルトの名無しさん:2005/06/22(水) 13:42:22
せっかくネタ提供してあげたのに...

もう質問してあげない
ぷんぷん

804 :デフォルトの名無しさん:2005/06/22(水) 16:49:49
あ、そ、じゃサヨウナラ

805 :デフォルトの名無しさん:2005/06/22(水) 17:55:48
>>796
こんなことをしているヘッダもあるから大丈夫。
#ifdef UNICODE
#ifndef _UNICODE
#define _UNICODE
#endif
#endif

#ifdef _UNICODE
#ifndef UNICODE
#define UNICODE
#endif
#endif

806 :デフォルトの名無しさん:2005/06/24(金) 05:16:31
指定したスレッドが使っているスタック領域の範囲を知る方法ってありますか?

807 :デフォルトの名無しさん:2005/06/24(金) 06:52:58
>>806
レジスタを見るとか?

808 :デフォルトの名無しさん:2005/06/24(金) 09:23:31
使ったこと無いけどGetThreadContextとか?

809 :デフォルトの名無しさん:2005/06/24(金) 09:52:27
>>732,737
IME半透明の件 ありがとうございました
解決しました
呪いの貞子で気づかず読み飛ばしていました・・・
申し訳ない


810 :デフォルトの名無しさん:2005/06/24(金) 10:03:57
>>806
x86 32bit版Win2K以降。自プロセスならスレッドハンドルとるの楽だろうからWin98でもできるだろ。
エラー処理はてめーでやれ。ポインタとDWORD混合してるのはほっとけ。

void GetStackArea
(DWORD dwProcessID, DWORD dwThreadID, LPDWORD pdwHigh, LPDWORD pdwLow)
{
typedef HANDLE (WINAPI *OPENTHREAD)(DWORD, BOOL, DWORD);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
HANDLE hThread = OpenThread(
THREAD_GET_CONTEXT | THREAD_QUERY_INFORMATION, FALSE, dwThreadID);
CONTEXT ctx = { CONTEXT_SEGMENTS, 0 };
GetThreadContext(hThread, &ctx);
LDT_ENTRY ldt = { 0 };
GetThreadSelectorEntry(hThread, ctx.SegFs, &ldt);
DWORD dwTibPtr= (ldt.HighWord.Bytes.BaseHi << 24)
| (ldt.HighWord.Bytes.BaseMid << 16)
| (ldt.BaseLow) + 0x18;
DWORD dwReadBytes = 0, dwTIBAddr = 0, dwStackArea[2] = { 0, 0 };
ReadProcessMemory(hProcess, (LPBYTE)dwTibPtr,
&dwTIBAddr, sizeof dwTIBAddr, &dwReadBytes);
ReadProcessMemory(hProcess, (LPBYTE)dwTIBAddr,
dwStackArea, sizeof dwStackArea, &dwReadBytes);
CloseHandle(hThread);
CloseHandle(hProcess);

*pdwHigh = dwStackArea[0];
*pdwLow = dwStackArea[1];
}


811 :デフォルトの名無しさん:2005/06/24(金) 10:35:28
すまん、さっきのはなしだ。こっち使ってくれ

void GetStackArea
(DWORD dwProcessID, DWORD dwThreadID, LPDWORD pdwBase, LPDWORD pdwLimit)
{
typedef HANDLE (WINAPI *OPENTHREAD)(DWORD, BOOL, DWORD);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
HANDLE hThread = OpenThread(
THREAD_GET_CONTEXT | THREAD_QUERY_INFORMATION, FALSE, dwThreadID);
CONTEXT ctx = { CONTEXT_SEGMENTS, 0 };
GetThreadContext(hThread, &ctx);
LDT_ENTRY ldt = { 0 };
GetThreadSelectorEntry(hThread, ctx.SegFs, &ldt);
DWORD dwTibPtr= (ldt.HighWord.Bytes.BaseHi << 24)
| (ldt.HighWord.Bytes.BaseMid << 16)
| (ldt.BaseLow) + 0x18;
DWORD dwReadBytes = 0, dwTIBAddr = 0, dwStackArea[2] = { 0, 0 };
ReadProcessMemory(hProcess, (LPBYTE)dwTibPtr,
&dwTIBAddr, sizeof dwTIBAddr, &dwReadBytes);
ReadProcessMemory(hProcess, (LPBYTE)(dwTIBAddr + 4),
dwStackArea, sizeof dwStackArea, &dwReadBytes);
CloseHandle(hThread);
CloseHandle(hProcess);

*pdwBase = dwStackArea[0];
*pdwLimit = dwStackArea[1];
}


812 :デフォルトの名無しさん:2005/06/24(金) 10:41:39
あと、補足すると、コミットされた分のスタック領域しかとれないので
スタックオーバーフローするリミットがどれだけか知りたい場合は
VirtualQueryEx で MEM_COMMIT されつつ PAGE_NOACCESS 保護の領域探して鯉。
ここらへんはアド嫁


813 :デフォルトの名無しさん:2005/06/24(金) 16:15:57
タブコントロールで、みんな当たり前の様に、Ctrl+TabやCtrl+PgUp/Downでタブを切り替えれてますが、あれってどうやってるんですか?
非MFCです。


814 :デフォルトの名無しさん:2005/06/24(金) 16:59:21
プロパティシートだったりして。

815 :デフォルトの名無しさん:2005/06/24(金) 17:02:42
C言語を使ったAPIを勉強しはじめたばっかの初心者です
内容の無い骨組みだけのWINDOWSプログラムを見て勉強しておりますが
インスタンスハンドルというのが いまいち分かりません
ハンドルというのはメモリアドレスのポインタなのでしょうか?
それともポインタ以外でも、メモリ上の住所のような数値があるのでしょうか?

816 :デフォルトの名無しさん:2005/06/24(金) 17:04:47
>>815
HANDLEはvoid*のtypedefだが、その内実はさまざまだ。
意味論的にはカーネルメモリなどにある何らかのオブジェクトを指し示すモノ、ということになるが、
それが実際に直接なポインタであるとは限らないし、そう仮定すべきではない。


817 :デフォルトの名無しさん:2005/06/24(金) 17:26:46
>>815
インスタンスハンドルは実行しているEXEを識別するためのものと思えばいい。

818 :815:2005/06/24(金) 17:27:00
816様、レスありがとうございます

正直、意味論的 とか カーネルメモリ とか オブジェクト とか よく分からなかったのですが
色々ややこしいもので今の段階ではなんとなくこんなもんとだけ覚えて先進む事にします

また質問ですが
return時の TRUE と FALSE についてよく分かりません
C言語を勉強していた時、return 0;で終わると正常な終了。return 0以外で終わると不正な終了
と書いて有りました。
APIを勉強していると TRUEは1 FALSEは0 と書いて有りました。
で、 return TRUE は正常な終了。 return FALSE は不正な終了っぽい文脈を見つけました。
return TRUE は正常?? TRUEは1だから return 1;と同じだから 不正???
っと混乱しております、助けていただけると助かります

819 :815:2005/06/24(金) 17:30:06
817様もありがとうございますm(_ _)m

820 :デフォルトの名無しさん:2005/06/24(金) 17:30:40
>>818
return 0;が正常ってのはmain()のことじゃね?

821 :デフォルトの名無しさん:2005/06/24(金) 17:36:29
どの値が正常で、どの値が異常かは常にMSDNで把握しろ。
型に騙されるな(w

822 :デフォルトの名無しさん:2005/06/24(金) 17:41:43
どれが正常でどれが異常かはプログラマによって書き方が違う。
main()は0が正常だが他は0以外が正常となってる場合がほとんど。
俺の関数は0やNULLが異常、1やポインタやハンドルが正常ということにしてるけど。

823 :デフォルトの名無しさん:2005/06/24(金) 17:45:13
COM関係のHRESULTだとS_OK==0だしな

まぁ、BOOLとかboolでTRUE/trueが失敗って言われたら蹴るが。

824 :デフォルトの名無しさん:2005/06/24(金) 17:47:57
IsFaultみたいなメソッドならTRUEで失敗なんだが。

825 :デフォルトの名無しさん:2005/06/24(金) 17:56:14
GetMessageみたいな関数もあるしなぁ

826 :デフォルトの名無しさん:2005/06/24(金) 18:01:56
なんにしろ固定観念にとらわれる人はプログラマ向いてないね。

827 :815:2005/06/24(金) 18:07:24
皆様ありがとうございます、とても助かりました
また質問させてください

BOOL型についてよく分かりません
GetMessage関数の際、GetMessage関数の戻り値がBOOL型になっております
BOOL型とは0か1の型だと思うのですが
GetMessage関数は関数が失敗したときに-1が返りますよね
これが分かりません。
本には、win16APIの時との互換性がどうこう書いてますが
そもそもBOOL型が-1を返せるということは、int,char,long等の基本データ形と違い
typedefで作った形とは、後からプログラムを見やすくしたり作り直したりしやすくする
ための物で、BOOL型は0か1を入れるのを推薦の形ということで
-1どころか 100とかまで 実際に入れれる範囲は広めにできている物なのでしょうか?

説明下手っぽく分かりにくいですが、宜しくお願いします

828 :デフォルトの名無しさん:2005/06/24(金) 18:10:44
BOOLの正体はint

829 :デフォルトの名無しさん:2005/06/24(金) 18:12:43
処理系によって1バイトだったり4バイトだったりする

830 :デフォルトの名無しさん:2005/06/24(金) 18:16:11
BOOLがintの代わりになるとしても信用性はかなり低いと思われ

831 :デフォルトの名無しさん:2005/06/24(金) 18:19:50
BOOLに-1を入れるM$は信用に値しないということだ
でも仕方がないのでGetMessageで-1の場合のエラー処理を書かざるを得ない

832 :黒沢明「夢」風に:2005/06/24(金) 18:23:42
こんなBOOLを見た

BOOL value;
for(value=0;value < 100;value++){


833 :デフォルトの名無しさん:2005/06/24(金) 18:32:04
intやDWORDをtypedefしただけのBOOL
=信用性高いがわざわざそれ使う意味がない

0と1の二つを入れる上で最小限の領域だけを準備したBOOL
=信用性低いがそれなりの用途に使えば速度面でメリットがある

834 :デフォルトの名無しさん:2005/06/24(金) 18:48:05
こんばんわ

ウィンドウのタイトルバーの高さを得るにはどうすればいいでしょうか?
OverlappedとToolWindowでは高さが異なります。

よろしくお願いいたします。

835 :834:2005/06/24(金) 18:51:55
SM_CYCAPTION

836 :デフォルトの名無しさん:2005/06/24(金) 21:07:28
>>834
AdjustWindowRectの結果から逆算とか。
>>835
ToolWindowのキャプションの高さがとれない。

837 :デフォルトの名無しさん:2005/06/24(金) 21:24:34
SM_CYSMCAPTIONつーのは違うのか?

838 :デフォルトの名無しさん:2005/06/24(金) 23:02:58
GetSystemMetricsを調べてこい

839 :デフォルトの名無しさん:2005/06/25(土) 00:37:23
>>810-811
ありがとう!
早速使わせていただきマス<・∀・)

840 :デフォルトの名無しさん:2005/06/25(土) 07:11:47
ハードディスクのセクタのリード/ライトをやりたいのですが、よくわかりません。

DeviceIoControl()を使うのだと思いますが、MSDNで調べると

http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_deviceiocontrol.htm

>各制御コードの詳細情報については、各デバイスのドキュメントを参照してください。

となっています。どこのそのドキュメントはあるのでしょうか・・・?

あと、サンプルコードがあればご紹介いただけないでしょうか・・・?

841 :デフォルトの名無しさん:2005/06/25(土) 07:25:49
> DeviceIoControl()を使うのだと思いますが、
使わない。開いたらファイルのように読み書きするだけ

842 :デフォルトの名無しさん:2005/06/25(土) 08:24:56
>>841
それができるのはNT系だけ。

843 :デフォルトの名無しさん:2005/06/25(土) 08:27:15
>>840
http://www.vector.co.jp/soft/win95/util/se130037.html

844 :デフォルトの名無しさん:2005/06/25(土) 09:57:27
>>834
GetClientRectとClientToScreenとか

845 :デフォルトの名無しさん:2005/06/25(土) 14:30:55
ワークグループに参加しているPCのIPを全部取得したいのですけど、
何かよいAPIないでしょうか?

846 :デフォルトの名無しさん:2005/06/25(土) 14:43:33
無い

847 :デフォルトの名無しさん:2005/06/25(土) 18:52:08
>>845
知らんけどWNetOpenEnumあたりから始めてみる?

848 :デフォルトの名無しさん:2005/06/25(土) 22:02:06
C言語+Windows APIを使っているのですが、
最大化やウィンドウのリサイズを禁止するにはどうすればいいんでしょうか?
最小化はそのまま使えるようにしたいのですが…

849 :デフォルトの名無しさん:2005/06/25(土) 22:05:53
>>848
CreateWindow(Ex)を呼ぶときにWS_MAXIMIZEBOXやWS_THICKFRAMEを指定しなければ良いだけ。

850 :840:2005/06/25(土) 22:18:16
>>841>>842>>843
みなさん、どうもありがとうございます。m(_ _)m

私はWin98(1st)です。無料版BCC++を使っています。

まず、最初にCreateFile()のMSDNの説明通りにドライブを開いて見ようとしましたが、エラーで開けません。
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_createfile.htm


<<x.c>>
#include <windows.h>
#include <stdio.h>

void main(){
        HANDLE hDrive;
        hDrive = CreateFileA("\\.\C:", GENERIC_READ, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        printf("hDrive = %08X\n", hDrive);
        if (hDrive == INVALID_HANDLE_VALUE){
                printf("error\n");
                exit(-1);
        }
        printf("normal\n");
}


NT系でないからでは、と思うのですが、MSDNの説明だと、

>Windows 95 では、上記の形式で文字列を指定すると、CreateFile 関数はエラーを返します。代わりに、次の手順に従ってください。
>dwCreationDistribution パラメータで、OPEN_EXISTING を指定しなければなりません。
>フロッピーディスクや、ハードディスクのパーティションを開く場合、dwShareMode パラメータで FILE_SHARE_WRITE フラグを指定しなければなりません。

と、開けるようなことが書いてあるのですが、これは違うのでしょうか?

851 :840:2005/06/25(土) 22:19:56
次に、ご紹介のRWFDのソースを流用してリードのテストをしてみました。
843さん、いいものをどうもありがとうございました。


<<main.c>>
#include <windows.h>
#include <stdio.h>
#include "diskio.h"

#define BUF_SIZE (0x200 * 8)

BYTE buf[BUF_SIZE];
DWORD const nDrive = 2; // 'C:'
DWORD const dwStartSector = 0;
WORD const wSectors = 1;

void main(){
        HANDLE hVWin32;
        hVWin32 = OpenVWin32();
        if (hVWin32 == NULL){
                printf("error: OpenVWin32()\n");
                exit(-1);
        }
        ABSDiskRead(hVWin32, nDrive, dwStartSector, wSectors, buf);

        printf("label = \"%8s\"\n", buf+3);

        CloseVWin32(hVWin32);
}

<<ビルド法>>
bcc32 main.c diskio.c

852 :840:2005/06/25(土) 22:20:47
これは、うまくいきました。

しかし、"\\\\.\\vwin32"というのは何なのでしょうか・・・

regs.reg_EAX = 0x7305;

とか、

VWIN32_DIOC_DOS_INT25

というのを見ると、これはまるっきり16ビットDOSインターフェースなのですが、この方法が一番良い方法なんでしょうか・・・?

純粋な32ビットプロテクトモード・インターフェース風な手法はないのでしょうか?

853 :デフォルトの名無しさん:2005/06/25(土) 22:32:04
>>852
"\\\\.\\vwin32"はVWin32というVxDの指定。
他にもいくつかやり方はあるがどれもこんな感じ
http://web.archive.org/web/20040216212849/http://tech.millto.net/~morry/vwin32/adio/index.html#OSR2

854 :デフォルトの名無しさん:2005/06/25(土) 22:40:32
> 純粋な32ビットプロテクトモード・インターフェース風な手法はないのでしょうか?
Win9xは純粋な32ビットOSじゃないからそんなものはない。
純粋な32ビットOSであるNTにはある(>>850)。

855 :デフォルトの名無しさん:2005/06/25(土) 23:27:04
>>849
ありがとうございました。

856 :デフォルトの名無しさん:2005/06/26(日) 01:52:47
>>850
Win98ということだから今回は関係ないが、"\\.\C:"じゃなくて"\\\\.\\C:"だ。
Cでは\は特別な意味を持つことに注意。

857 :デフォルトの名無しさん:2005/06/26(日) 08:23:11
マウスでクリックしたところに円を描いて
その矩形の座標を配列に記憶(複数個)。

MW_MOUSEMOVE時に、
PtInRect()で矩形の外か中かで
SetCursor()を使ってマウスカーソルを
切り替えています。

円の数が増えるたびに反応が鈍くなって
カーソルがちらつきます。
矩形の検索がまずいんだと思いますが
いい方法はないでしょうか。


858 :デフォルトの名無しさん:2005/06/26(日) 09:26:17
こんにちは

MoveWindow(m_hWnd,0,0,772,450);

RECT rect;
GetClientRect(&rect);

MoveWindowで幅を772とした後、GetClientRectでRECT値を取り出したところ、rect.rightが749と指定した「772」とは違う値になります。
これはどういうことなのでしょうか?
MoveWindowは内部で何かしらの理由で数値を修正したりするのでしょうか?

よろしくお願いいたします。

859 :858:2005/06/26(日) 09:27:18
GetClientRect(&rect);



GetClientRect(m_hWnd,&rect);

と修正します。

860 :デフォルトの名無しさん:2005/06/26(日) 09:35:44
>>858
つ GetWindowRect

861 :デフォルトの名無しさん:2005/06/26(日) 09:40:41
>>858
ウィンドウの構造を勉強しておいで

862 :デフォルトの名無しさん:2005/06/26(日) 09:54:48
>>857 配列数がどれだけかしらんが500個あったら全部に対してPtInRect呼んでるのか?
だったらリージョンにしちまえよ PtInRegionな これで一発だ (円が増えるたびにリージョン更新な
ちらつきは毎回描画してんのか?変化があったときだけ書けばよろし

>>858 スクリーン座標とクライアント座標というものがある。
基点(0,0)となる位置が異なる。この基点のズレは自分で調整しる

863 :デフォルトの名無しさん:2005/06/26(日) 09:57:28
WM_CREATEが呼ばれる前にSetWindowLongで
ウィンドウにパラメータのようなものを渡すことはできませんか?


864 :858:2005/06/26(日) 10:01:14
m_hWndはリッチエディットでした。
どうやらクライアント領域にはスクロールバーが含まれないため、その分「差」が生じたみたいです。
スクリーン座標から幅を得たら、スクロールバーも含まれる値が得られました。

リッチエディットにおいて、クライアント領域はエディタ部分だけということを理解してませんでした。
スクロールバーも含まれると思ってましたので。

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

865 :デフォルトの名無しさん:2005/06/26(日) 10:12:25
(゚д゚)・・・・

866 :858:2005/06/26(日) 10:13:37
タブの中にリッチエディットを埋め込んでまして、ボーダーをドラッグすることでタブとリッチエディットがドラッグした分だけRight値とBottom値が変わるような
クラス設計をしてまして、結構ややこしいですね。

867 :デフォルトの名無しさん:2005/06/26(日) 10:15:49
>>857
2bitなり8bitのビットマップでも用意してヒット領域塗って、カーソル座標部分の色で判定すればいいんでない?
削除した場合は配列から再計算


868 :デフォルトの名無しさん:2005/06/26(日) 10:16:23
>>863
WM_CREATEが呼ばれる前じゃ、HWNDも分からないじゃないか。
SetWindowLongを呼べるわけ無いだろ。

869 :デフォルトの名無しさん:2005/06/26(日) 10:18:54
WM_CREATEはウィンドウが作成された時に呼ばれるのに、
それが呼ばれる前、つまりウィンドウが作成される前に何をできると思っているのか・・・

870 :デフォルトの名無しさん:2005/06/26(日) 11:00:40
ウィンドウクラス名を知る方法を教えてください。
ツリーならWC_TREEVIEWみたいな

871 :865:2005/06/26(日) 11:12:39
>>870
GetWindowClassName(HWND hWnd);

872 :870:2005/06/26(日) 11:44:05
>>871
そのようなAPIは見当たりませんでしたが。

873 :デフォルトの名無しさん:2005/06/26(日) 12:02:10
>>870
GetClassName(HWND hWnd, LPTSTR lpClassName, int nMaxCount);

874 :デフォルトの名無しさん:2005/06/26(日) 12:05:38
GetClassName

875 :857:2005/06/26(日) 12:18:35
>>862
できました。
ありがとうございます。


876 :デフォルトの名無しさん:2005/06/26(日) 14:14:59
一番頭(親)のウィンドウハンドルをGetするAPIはあると思うのですが…。

877 :デフォルトの名無しさん:2005/06/26(日) 14:23:56
>>876
GetParent()?

878 :デフォルトの名無しさん:2005/06/26(日) 14:31:41
>>876
ねーよそんなAPI

879 :デフォルトの名無しさん:2005/06/26(日) 14:37:08
>>878
http://www.microsoft.com/japan/msdn/library/ja/jpwinui/html/_win32_getparent.asp?frame=true

880 :デフォルトの名無しさん:2005/06/26(日) 15:05:41
阿呆
それはあくまで自分の親を取得するだけだ
一番頭と決まったわけではない

881 :876:2005/06/26(日) 15:19:56
無いようなので自作しました

NULLが返るまでループを繰り返して、一番頭を得られるようになりました。
どうもです。

882 :デフォルトの名無しさん:2005/06/26(日) 15:20:08
じゃ、GetAncestor?

883 :デフォルトの名無しさん:2005/06/26(日) 15:29:22
EnumWindow

884 :デフォルトの名無しさん:2005/06/26(日) 17:14:26
GetDesktopWindow()とか。

885 :デフォルトの名無しさん:2005/06/26(日) 20:27:13
>>884
デスクトップは親として扱わんだろ

886 :デフォルトの名無しさん:2005/06/26(日) 21:31:07
ちょっとうけた

887 :デフォルトの名無しさん:2005/06/27(月) 00:46:42
ダイアログのボタンを押したときにメッセージボックスを出すようにしたのですが、
ボタンを押すとメッセージボックスが2回立て続けにポップアップします。
なぜこのような現象が起きるのか分かりません。どのように対処すれば良いのでしょうか?
コンパイラはBCCです。

888 :デフォルトの名無しさん:2005/06/27(月) 00:49:43
そりゃ2回出るように書いてるからだとおもうよ。

889 :デフォルトの名無しさん:2005/06/27(月) 00:59:18
>>887
エスパーな漏れがおまいさんの悩み事を解決してやろう。

うむ、今の君に必要なのはずばり、「break」と見た!

890 :887:2005/06/27(月) 01:38:07
WM_COMMANDメッセージが2回送信されているようなのですが...

891 :887:2005/06/27(月) 02:57:42
ボタンスタイルのBS_NOTIFYが原因だったようです。
リソーススクリプトについての理解がまだ不十分なのですが、
リソーススクリプトに関する詳細な日本語のドキュメントがあれば教えて下さい。

892 :デフォルトの名無しさん:2005/06/27(月) 03:19:41
>>891
> 日本語の
ここでまず無理

893 :デフォルトの名無しさん:2005/06/27(月) 05:18:01
>>891
クレクレ厨が

894 :デフォルトの名無しさん:2005/06/27(月) 10:09:51
猫プロやWisdomでも見とけ

895 :デフォルトの名無しさん:2005/06/27(月) 11:08:33
>>869  遅レス
WM_NCCREATE は使えないか?

896 :デフォルトの名無しさん:2005/06/27(月) 11:10:40
リッチエディットを作成したあと、SetWindowTextで文字列を設定し、ShowWindowで表示させたのですが、
リッチエディットの下側のスクロール部分が描画されないという不具合がなぜか発生します。
右側のスクロールバーは表示されるのですが、
このような不具合を御存知な方はいらっしゃいますか?

897 :デフォルトの名無しさん:2005/06/27(月) 21:05:01 ?
>>896
思いつくのは
・メッセージをフックしている。
・上にラベルなどが重なっている。
・縦幅が大きすぎて親からはみ出してる。
・単に水平スクロールのスタイルが指定されていない。

898 :デフォルトの名無しさん:2005/06/28(火) 11:26:53
WS_HSCROLLないとワードラップモードになるんだよなあれ

899 :デフォルトの名無しさん:2005/06/28(火) 18:26:22
任意のプロセスが所有しているウインドウを探すにはどうすればいいんでしょうか。

900 :デフォルトの名無しさん:2005/06/28(火) 18:47:34
>>899
ウィンドウを所有するのはプロセスではなく、スレッドなのでEnumThreadWindows()ならある。

901 :デフォルトの名無しさん:2005/06/28(火) 19:20:18
LoadImageで取得するHANDLEからイメージがICON,BMPであるかとか判別するAPIってありません?
さらっと見た感じみあたらないのですが・・

902 :デフォルトの名無しさん:2005/06/28(火) 19:38:36
天堂加速器のようにプロセスの実行速度をあげるにはどうしたらいいか教えてください

903 :デフォルトの名無しさん:2005/06/28(火) 19:50:48
>>900
スナップショットでオーナープロセスは特定できるみたいなので
それでなんとかなりそうです。さんくす。

904 :デフォルトの名無しさん:2005/06/28(火) 20:10:21
>>901
それは呼び出す側が指定するんじゃないのか?

905 :デフォルトの名無しさん:2005/06/28(火) 20:24:34
>>901
LoadImageの引数にタイプの指定があるのになぜそんなことが必要なのだ?

906 :デフォルトの名無しさん:2005/06/28(火) 20:44:20
>>902
SetPriorityClass

907 :デフォルトの名無しさん:2005/06/28(火) 20:47:34
>>902
SleepにAPIフックかけてSleepに意味をなさなくさせる

908 :901:2005/06/28(火) 20:59:16
ちとこちら側の仕様上、LoadImageで使用した引数がなんであるか不明なのです。
HANDLE値がわたされるだけなので・・
よって、HANDLE値を元に元データが何であるかを判別する方法があればよいなと
いうことでして・・

909 :901:2005/06/28(火) 21:19:11
GetObjectあたりでなんとかならないんですかね・・
BMPに関する記述はあるんですがICONはなにも記述されていないような・・

910 :デフォルトの名無しさん:2005/06/28(火) 21:28:08
GDI Objectじゃねえから > ICON
GetIconInfo、GetCursorInfo、GetBitmap(GetObject) のどれかでは
エラーが出ないだろうって事で。

911 :デフォルトの名無しさん:2005/06/28(火) 22:16:33
>>901
LoadImageに倣って種別も引数として受け取るようにしようとかいう考えは出てこんのか?


912 :901:2005/06/28(火) 22:24:53
>>911
いあ、引数に関しては私が変更する権限ないので・・としかいいようがない・・

913 :デフォルトの名無しさん:2005/06/28(火) 22:25:39
GetObjectType(HGDIOBJ)というものも有るが、ビットマップは判別できるがアイコンとカーソルは無理だしの

914 :901:2005/06/28(火) 22:33:12
>>913
のようですね。
みなさんいろいろありがとうございました。
とりあえず仕様変更打診しますので・・w

915 :デフォルトの名無しさん:2005/06/28(火) 22:36:10
c#でポストメッセージするときのwparamやlparamの値ってc++のときの値を入れてもだめなんだけど何で?
どうすりゃいいの?

例えば、c++なら、「Q」のwm_keydownなら、wparam00000051 lparam00100001
なんだけど、
C#で、PostMessage(hWnd, WM_KEYDOWN, new IntPtr(0x00000051),new IntPtr(0x00100001))といれてもエラーになります。

ディルインポートはちゃんとやってます。
[DllImport("user32.dll", SetLastError = true)]
static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);


916 :デフォルトの名無しさん:2005/06/28(火) 23:01:15
つInt32

917 :915:2005/06/28(火) 23:44:25
PostMessage(hWnd, WM_KEYDOWN, new IntPtr(0x0000 | 0x0051),new IntPtr(0x0010 | 0x0001));

これでできました。どうも基本が分かっていないようで、おさわがせしました。

918 :デフォルトの名無しさん:2005/06/28(火) 23:48:01
こんばんは。

タスクトレイにプログラムを常駐させて
表示させてあるアイコンを右クリックすると
ポップアップメニューを表示するプログラムを
作成しています。

ポップアップメニューを表示するところまではできたのですが、
選択されずにその他の領域(デスクトップ等)がクリックされた時
表示されたポップアップメニューが出たままになっています。
この時にポップアップメニューを消したいのですが
どなたか方法を教えて下さい。

case WM_RBUTTONDOWN:
u = TrackPopupMenu(hPopUp, TPM_LEFTALIGN, pt.x, pt.y, 0, hWnd, NULL);
PostMessage(hWnd, WM_SYSCOMMAND, u, NULL);
return 0;

WinXPpro、VC6++ です。

919 :デフォルトの名無しさん:2005/06/29(水) 00:45:39
タスクマネージャのようにプロセスごとのCPUの使用率を取得したいと思っています。
調べたところ、pdh.h関連でパフォーマンス測定ができることがわかりました。
PdhEnumObjectItemsで全プロセスのインスタンスのリストを取得し、カウンタに登録し、と
いうところまではわかったのですが、取得したインスタンス名からプロセスIDを取得する
方法がわかりません。どうかよろしくおねがいします。

920 :デフォルトの名無しさん:2005/06/29(水) 01:01:37
>>918
TrackPopupMenuのまえにSetForegroundWindowをすれ

921 :デフォルトの名無しさん:2005/06/29(水) 01:11:18
一行のEDITコントロールで、
エンターキーが押されたときに、文字列を読んで消す。
ということをやりたいのですが。

(IRCクライアントとかメッセンジャークライアントなどチャットクライアントで、改行したときに発言するような感じで入力させたい)

WM_KEYUPがVK_RETURNで飛んできたとき、ということにすると、
IME開いていて変換をエンターで確定したときも、文字列を読んでしまいます。

どうするのが一般的なんでしょうか?

922 :デフォルトの名無しさん:2005/06/29(水) 01:17:52
>>921
ディフォルトボタンを用意しておいて、そっちのイベントで処理したら?
1行Editだと、Enterキーはスルーされてディフォルトボタンが反応すると思うけど。
#当方MFC屋なので見当違いだったら失礼。

923 :デフォルトの名無しさん:2005/06/29(水) 01:19:13
>>922
見当違いではないと思ふ

924 :921:2005/06/29(水) 01:26:27
MFCはまったくわからないんですが、
「ディフォルトボタン」ってMFC固有の機能か何かでしょうか?

925 :デフォルトの名無しさん:2005/06/29(水) 01:32:13
>>924
BS_DEFPUSHBUTTON

926 :デフォルトの名無しさん:2005/06/29(水) 01:37:00
>>924
エディットにES_WANTRETURNがついてなければ
[Enter]キーはデフォルトボタンを押したことになる。

927 :921:2005/06/29(水) 01:40:58
ありがとうございます。
でもこれってダイアログじゃないとだめとか書いてあるような気がするんですが。

928 :デフォルトの名無しさん:2005/06/29(水) 01:47:07
>>927
そんな気もする

929 :921:2005/06/29(水) 02:02:53
これがいいやり方なのかどうかわかりませんが、
EDITをマルチラインにして、(見かけ上は一行)
親にWM_COMMANDがEN_VSCROLLで飛んできたときを捕まえるようにしました。

930 :デフォルトの名無しさん:2005/06/29(水) 02:48:46
サブクラス化するのが一般的なんじゃないかという気も…

931 :921:2005/06/29(水) 03:25:42
最初はサブクラス化してVK_KEYUPを捕まえていたんですが、それだとうまくいかなかったので。

932 :デフォルトの名無しさん:2005/06/29(水) 03:44:58
サブクラス化してWM_CHARで\rを捕まえる
で行ける気がするのだが

933 :921:2005/06/29(水) 04:00:05
>>931
×VK_KEYUP
○WM_KEYUPのVK_RETURN

寝ぼけているみたいだOrz


>>932
そういう方法もあるんですか。
どうも、その方法も試してみます。

934 :デフォルトの名無しさん:2005/06/29(水) 04:03:30
あ、もちろんWM_CHARなのでTranslateMessage()は忘れずに

935 :デフォルトの名無しさん:2005/06/29(水) 05:26:52
WinAPIむつかしですなー。

/* じっけん */
void jikken(void) {
HDC hdc;
HWND hwnd;
int xLength, yPos;
int i, decr;
hdc = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);
hwnd = GetDesktopWindow();
xLength = GetDeviceCaps(hdc, HORZRES);
yPos = (GetDeviceCaps(hdc, VERTRES)) >> 1;
decr = xLength >> 6;
for (i = xLength; i >= 0; i -= decr) {
TextOut(hdc, i, yPos, TEXT("orz "), 5);
UpdateWindow(hwnd);
Sleep(100);
TextOut(hdc, i, yPos, TEXT(" "), 5);
}
DeleteDC(hdc);
}

int WINAPI WinMain( 略 ) {
jikken();
return FALSE
}

936 :デフォルトの名無しさん:2005/06/29(水) 07:14:57
>return FALSE
笑うところですか?


937 :デフォルトの名無しさん:2005/06/29(水) 07:46:08
怒るところです

938 :デフォルトの名無しさん:2005/06/29(水) 07:58:25
漏れは泣きそうになったが

939 :純一郎:2005/06/29(水) 09:42:59
人それぞれですから!

940 :デフォルトの名無しさん:2005/06/29(水) 10:08:57
質問ですが、
CreateFileでハンドルを作り、ファイルをReadしようとしたんですが、
「読み込み専用ファイル」がなぜか読み込まれません。

CreateFileの引数に何かをセットすればいいと思うのですが、
何をセットすればいいのでしょうか?

よろしくお願いいたします。

941 :デフォルトの名無しさん:2005/06/29(水) 10:27:28
>>940
それ、CreateFileは成功してるのか?

942 :デフォルトの名無しさん:2005/06/29(水) 10:28:15
>>940
>「読み込み専用ファイル」がなぜか読み込まれません。

どこで失敗してるのか調べる。
GetLastErrorの値が得られる場合はそれも調べる。

943 :デフォルトの名無しさん:2005/06/29(水) 12:04:02
>>921
メッセージ処理で対応したいなら
WM_IME_STARTCOMPOSITION
WM_IME_ENDCOMPOSITION:
この二つのメッセージでIMEが変換中かわかる

944 :940:2005/06/29(水) 18:49:53
>>941 >>942
ご返答助かります。

::FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
::GetLastError(),
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&pCh,
0,
NULL);

によると、「アクセスが拒否されました。」と出ます。
ただ、このファイルは読み取り専用となっております。

もう少し突き詰めてみたいと思います。

945 :デフォルトの名無しさん:2005/06/29(水) 18:58:33
>>944
CreateFileはどんな引数を渡している?

946 :940:2005/06/29(水) 19:09:51
GENERIC_WRITEもorしていたため、おきた不具合でした。
くだらない質問ですいませんでした。
ありがとうございました。

947 :デフォルトの名無しさん:2005/06/29(水) 19:10:37
やっぱりな

948 :デフォルトの名無しさん:2005/06/29(水) 19:13:47
ウィンドウに直接描画していたのがちらつきが酷いです。
CreateCompatibleDC()で取得したメモリDCにいったん描画してBitBlt()で転送すればちらつきが少なく描画が出来るらしいですが、
それで大丈夫でしょうか。

よろしくお願いします。

949 :デフォルトの名無しさん:2005/06/29(水) 19:20:20
>>948
それで大丈夫でしょう

950 :948:2005/06/29(水) 19:21:45
>949
ありがとうございます、試してみます

951 :デフォルトの名無しさん:2005/06/29(水) 19:49:31
SetTextColor以外にテキスト色を設定するAPIはありますか?

952 :デフォルトの名無しさん:2005/06/29(水) 20:34:13
MFC使う=ファミリアを運転する
Win32APIを使う=フェラーリを運転する

953 :デフォルトの名無しさん:2005/06/29(水) 20:39:26 ?
>>951
何を知りたいんだ?SetTextColor使えばいいじゃん。

954 :デフォルトの名無しさん:2005/06/29(水) 21:02:10
リッチエディットならEM_SETCHARFORMATが来たときのCHARFORMAT.crTextColor。
コンソールアプリならSetConsoleTextAttribute()とか。




955 :デフォルトの名無しさん:2005/06/30(木) 03:16:21
>>953-954
ありがとうございます。

956 :デフォルトの名無しさん:2005/06/30(木) 04:07:02
すみません。
SetViewPortExtEx() on MM_ISOTROPIC
が、むつかしいのですが、
以下であってるでしょうか?

1:
ViewPort(0,0) 画面左上
ViewPort(そのときのクライアント領域サイズ in デバイスピクセル) 画面左下
これらはぴくりとも動かない

2:
SetWindowExtExで指定された
論理ユニット数をおさめるのにつかう
ViewPortのデバイスピクセル数を指定。
このときy軸の方向などが逆だと、引数が負数になる
以上で スケール率 =
デバイスピクセル数 / 論理ユニット数 (on 同一物理サイズ内)
が設定される。

3:
論理座標(x,y)からWindowのOrgの座標(x,y)をひいて
幅と高さの論理ユニット数を求め、
それにスケール率をかけて
さらにViewPortのOrgを加算することで
指定された論理座標が適切なデバイス座標(固定)
にマップされる。

4:
論理ユニットの一ユニットあたりの
物理的な幅と高さが同一になるように
Windowsが調整してくれる。

957 :デフォルトの名無しさん:2005/06/30(木) 04:35:55
>>952
なんか違うような・・・

958 :902:2005/06/30(木) 04:54:53
教えてください

959 :デフォルトの名無しさん:2005/06/30(木) 07:24:48
Rectangle()で矩形を描いたときペンの太さを大きくすると
InvalideteRect()で矩形の領域を再描写したとき矩形の範囲を
ペン幅が超えているので、はみ出ている部分が描写されません。

ペンの幅をみこして領域を描写するしかないのでしょうか。

960 :デフォルトの名無しさん:2005/06/30(木) 07:31:12 ?
ペンのスタイルにPS_INSIDEFRAMEを指定するといいと思う。

961 :デフォルトの名無しさん:2005/06/30(木) 08:23:44
でなければ、ペン幅を考慮して領域を作るしかない

962 :デフォルトの名無しさん:2005/06/30(木) 11:08:44
こんにちは

質問があります。

1)リッチエディットの親をタブコントロールとして作ったのですが、右クリックのポップアップメニューで編集機能をするようにしたのですが、
 WM_COMMANDがタブコントロールのほうにSendされているようで、イベント処理ができません。
 通常コモンコントロールはウィンドウプロシージャを指定しないので、WM_COMMAND処理ができなくなってしまます。
 また、ウィンドウプロシージャをSetWindowLongでタブコントロールに指定したら、今度はタブコントロールが描画されなくなってしまいます。
 タブコントロールを親とし、またタブコントロールからWM_COMMANDを得られるようにするためにはどうすればいいのでしょうか?

2)今ウィンドウが表示されているかどうかが確認できるAPIはありますでしょうか。

よろしくお願いいたします。

963 :962:2005/06/30(木) 11:10:06
2)は解決しました IsWindowVisible

964 :デフォルトの名無しさん:2005/06/30(木) 12:14:15
てきとうなことをいうと

タブコントロールをつくるときに
p = GetWindowLong(hWndtbctrl, GWL_WNDPROC);
してから
SetWindowLong(hWndtbctrl, GWL_WNDPROC, oreproc);
などして

oreproc内でWM_COMMANDのうち
notification_codeとctrlIDの一致するものだけ処理して
あとは

CallWindowProc(p, ....)
とか?

965 :デフォルトの名無しさん:2005/06/30(木) 12:18:34
訂正
もとのwndprocのアドレスは
p = SetWindowLong(hWndtbctrl, GWL_WNDPROC, oreproc);
などでpにとれる、もよう

966 :962:2005/06/30(木) 12:32:08
>>964
ご返答いただき助かります。

COMBOBOXやLISTやTABなどに、SetWindowLong(hWndtbctrl, GWL_WNDPROC, oreproc);をしてウィンドウプロシージャを設定すると、
コントロールの描画がされなくなるのですが、
独自に用意したウィンドウプロシージャをコントロールにSetしても、
コントロールを描画してくれる方法・手段を教えていただきたいのですが。

コントロールを描画するための何か(API)をWindows内部で呼び出していると思われますが。

967 :デフォルトの名無しさん:2005/06/30(木) 12:51:41
>>966
サブクラス化

968 :デフォルトの名無しさん:2005/06/30(木) 13:20:08
>>966
その方法が >>964 氏が説明しているサブクラス化だよ。最後に CallWindowProc() を呼ぶところがミソ。
で、そもそも >>962 の1)だけど、
 @ リッチエディットを、WM_COMMAND を処理させたいウィンドウの子として作成
 A SetParent() でリッチエディットの親をタブコントロールに変更
じゃだめかしら?(そういう意図じゃなかったんならスマソ)

969 :デフォルトの名無しさん:2005/06/30(木) 13:48:10
いつもここ見て思うけどお前等の説明って超がつくほど下手糞だよなww
なんつーか一連の手順って感じで説明してないし関数名とかポンポン
あげてるだけだしwwwこの手の質問に対しては「サブクラス化」
ほとんどこれだけwwwwマジワロスwwwwwwたぶんわざとやってんだと思うけどwww

970 :デフォルトの名無しさん:2005/06/30(木) 13:50:36
サブクラス化の方法は>>964の説明で十分だろ

971 :デフォルトの名無しさん:2005/06/30(木) 13:56:24
トーシロがやるアドレス書き換えの手法ワロスwwwww
おまけに日本語の説明ド下手wwww書いてる本人ですら根本的にわかってないもようwwwwwまぁ糞スレだからどうでもいいけどww

972 :デフォルトの名無しさん:2005/06/30(木) 14:05:13
あと964氏だってwwwwwワロス「氏」なんてつけるレベルのレスかよwwwwwwww激ワロスwwwwwwwどうせ自分で氏ってつけただけだと思うがwwwwww

973 :デフォルトの名無しさん:2005/06/30(木) 16:13:00
>>956
プリンター出力でもやっているのかな?

私はこんな順番で呼んでいます。 X,Y は適当に(笑)

SetWindowOrgEx(hdc, 0,0, NULL);

SetMapMode(hdc , MM_ISOTROPIC);
SetWindowExtEx(hdc, , ,NULL);

// Viewport は、左上基点の座標系: Yを - で Window 座標を反転
SetViewportExtEx(hdc, , , NULL);

// ココを移動して 窓を移動する
SetViewportOrgEx(hdc, , , NULL);


974 :959:2005/06/30(木) 18:15:37
>>960
>>961
>>960
>>961
ありがとうござます。
こんなペンのスタイルがあったなんて...。
単純なことを見落としていました。
_| ̄|○

975 :デフォルトの名無しさん:2005/06/30(木) 18:32:18
USBなどの取りはずし可能装置に対して
取りはずし要求が出たとき

WM_DEVICECHANGE

というメッセージを飛ぶのでこれをつかまえて
イベントが

DBT_DEVICEQUERYREMOVE

かどうかを検査すれば,それだとわかります.

ところがどのドライヴ文字をわりあてていた装置かを
取得する方法がわかりません.

何か方法はありますか?


976 :デフォルトの名無しさん:2005/06/30(木) 18:44:56
単純にドライブを列挙すれば?
歯抜けがありゃそこだし、歯抜けがなけりゃ未使用の中の一番若いやつだ

977 :デフォルトの名無しさん:2005/06/30(木) 19:49:23
Windows XPをスタンバイ状態にして、n秒後にスタンバイから復帰する
プログラムを作りたいのですが、
どんな資料を集めればよいでしょうか?
DDKとか知らないとダメでしょうか?

978 :デフォルトの名無しさん:2005/06/30(木) 20:15:59
あ、やっぱいいです。

979 :デフォルトの名無しさん:2005/06/30(木) 20:19:52
コラー!

980 :デフォルトの名無しさん:2005/06/30(木) 20:51:45
せっかくだからSetWaitableTimerと書いておこう

981 :デフォルトの名無しさん:2005/06/30(木) 20:54:52
>>977がいかにして、自動でスタンバイさせ、また自動でスタンバイから復帰させる
プログラムを作りたくなったのか知りたいのですが、
どんなレスをすればよいでしょうか?
煽りとか知らないとダメでしょうか?

982 :デフォルトの名無しさん:2005/06/30(木) 21:37:51
PC起動タイマーみたいなもんを作りたいんじゃないのか?
・3時間後に復帰するようセットしてスタンバイにしておく
・お出かけ(3時間くらい)
・帰ってきたら起動してて即作業に


983 :デフォルトの名無しさん:2005/06/30(木) 21:41:28
じゃあ
適当なUSBデバイス(リモコンとか)でスタンバイ状態から
復帰させる方法を教えてください

984 :デフォルトの名無しさん:2005/06/30(木) 21:51:48
物理ディスクの容量を取得したいのですがどうすればいいんでしょうか。
WMIのWin32_DiskDrive.size相当の情報をWMIを使わずにとりたいです。

985 :デフォルトの名無しさん:2005/06/30(木) 22:41:30
XP上でVC++6.0で_beginthreadex
を使えないんです。原因分かる方ヘルプゥゥ!
もちろんprocess.hしてます。

・・・・・コンパイラメッセージ・・・・・・
warning C4013: 関数 '_beginthread' は定義されていません。

986 :デフォルトの名無しさん:2005/06/30(木) 22:45:00
XPで駄目ならWin2Kを使えばいいのに

987 :デフォルトの名無しさん:2005/06/30(木) 22:46:34
>>985
どうせシングルスレッド用のライブラリリンクしてるとかじゃねぇの

988 :デフォルトの名無しさん:2005/06/30(木) 23:18:39
いつのまにC4013がリンカで出るようになったのやら

989 :デフォルトの名無しさん:2005/06/30(木) 23:25:32
>>985
Cランタイムライブラリに
マルチスレッド、またはマルチスレッドDLLを指定しる


990 :デフォルトの名無しさん:2005/06/30(木) 23:32:13
>>988
リンクするCRTを指定するコマンドラインオプションはコンパイラオプションで、その指定でマクロ定義が変化するんだが。
素人は黙っとけ
つーか、beginthreadは微妙にAPIじゃないけどな

991 :デフォルトの名無しさん:2005/06/30(木) 23:43:42
↓素人の反撃

992 :デフォルトの名無しさん:2005/06/30(木) 23:51:25
残念、反撃はかわされてしまった

993 :デフォルトの名無しさん:2005/07/01(金) 00:11:32
質問ですが、
MFCにDoModalというものがありますが、
これに変わるWin32APIはありますか?

994 :デフォルトの名無しさん:2005/07/01(金) 00:21:45
>>993
DialogBox()

995 :918:2005/07/01(金) 00:59:39
>>920
亀ですがありがとうございました。
おかげさまで解決いたしました

996 :デフォルトの名無しさん:2005/07/01(金) 01:34:45
>>977
タスクスケジューラ

997 :デフォルトの名無しさん:2005/07/01(金) 01:43:39
クスクスケジーラミ

998 :デフォルトの名無しさん:2005/07/01(金) 02:53:45
Win32API質問箱 Build33
http://pc8.2ch.net/test/read.cgi/tech/1120153520/

999 :デフォルトの名無しさん:2005/07/01(金) 03:02:37
>>975
よく分からんが、

ttp://forums.belution.com/ja/vc/000/310/93s.shtml
とか、

ttp://www.ouk.jp/ogawa/sforum/sfrm.html
↑ここのページ内を
USBストレージデバイスのドライブ名取得について
で検索。

1000 :デフォルトの名無しさん:2005/07/01(金) 03:02:43
>>1-1000
Advanced Windows 嫁♥

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

229 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)