Win32API質問箱 Build42

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

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

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvencedWindowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで。
2デフォルトの名無しさん:2006/04/14(金) 06:10:05
3デフォルトの名無しさん:2006/04/14(金) 06:10:41
32 ttp://pc8.2ch.net/test/read.cgi/tech/1117271829/
31 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
30 ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
29 ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
28 ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
27 ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
26 ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
25 ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
24 ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
23 ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
22 ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
21 ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
20 ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
19 ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
18 ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
17 ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
16 ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/
15 ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/
14 ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
13 ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
12 ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
11 ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
10 ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
ttp://pc.2ch.net/tech/kako/991/991576947.html
4デフォルトの名無しさん:2006/04/14(金) 06:12:01
5デフォルトの名無しさん:2006/04/14(金) 06:36:14
【HSP】HSPで3Dゲーム【3D】
http://pc8.2ch.net/test/read.cgi/gamedev/1016699230/
HSPでRPG
http://pc8.2ch.net/test/read.cgi/gamedev/1082902759/
HSPで出来る範囲について
http://pc8.2ch.net/test/read.cgi/gamedev/1085733089/
HSP - Hot Soup Processor [11]
http://pc8.2ch.net/test/read.cgi/gamedev/1133488968/
HSPでの麻雀プログラムについて
http://pc8.2ch.net/test/read.cgi/gamedev/1047707655/
HSPは・・・
http://pc8.2ch.net/test/read.cgi/gamedev/1104208959/
おまいらHSPで適当なゲームでもつくりませんか
http://pc8.2ch.net/test/read.cgi/gamedev/1102214621/
★ゲーム製作期待の星! HSP Part 9 ★
http://pc8.2ch.net/test/read.cgi/gamedev/1005313791/
HSPで完全オリのSLGを作るスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1047478458/
HSPでSLGが作れるようになるまで頑張るスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1103618349/
HSPでモンスター育成SLGを作りましょう!
http://pc8.2ch.net/test/read.cgi/gamedev/1089467139/
ネットゲームforHSP『無人島』制作スレ
http://pc8.2ch.net/test/read.cgi/gamedev/1018534410/
PGの面接で、使える言語はHSPですって言ったら
http://pc8.2ch.net/test/read.cgi/gamedev/1046921466/
HSPでシミュレーションRPG
http://pc8.2ch.net/test/read.cgi/gamedev/1036923414/
6デフォルトの名無しさん:2006/04/14(金) 07:26:13
>>5
7デフォルトの名無しさん:2006/04/14(金) 07:52:18
作者がHSPの宣伝に必死です
8デフォルトの名無しさん:2006/04/14(金) 08:05:57
FormatMessageなんだけど、
ここのソースをWin9Xで試した人いる?

ttp://lovecast.exblog.jp/2691227/
9デフォルトの名無しさん:2006/04/14(金) 09:01:58
>>1
10デフォルトの名無しさん:2006/04/14(金) 16:20:47
質問です。
ウィンドウハンドルを関数で渡す事は出来ますか?
現在ウィンドウハンドルをポインタで渡して使おうとしていますが
ウィンドウハンドルを使用する関数を実行しようとすると
エラーを出して終了されてしまいます
11デフォルトの名無しさん:2006/04/14(金) 16:24:54
超能力者plz
12デフォルトの名無しさん:2006/04/14(金) 16:32:40
>>10
>ウィンドウハンドルを関数で渡す事は出来ますか?

関数で渡すとは?関数に渡す事は出来るが。

>現在ウィンドウハンドルをポインタで渡して使おうとしていますが
>ウィンドウハンドルを使用する関数を実行しようとすると
>エラーを出して終了されてしまいます

君のプログラムが悪いんだろうね。
それ以上の事は分からん。
1310:2006/04/14(金) 16:40:03
言葉足らずですいませんでした。
WinMein開始後に
void GethWnd(HWND* hWnd){p_hWnd=hWnd};と言う形の関数でHWNDを渡して
int MakeMessageWindow(LPCTSTR MessageText, LPCTSTR WindowText, UINT MessageForm)
{
return(MessageBox(*p_hWnd, MessageText, WindowText, MessageForm));
};
と言う関数を実行しようとしたのですが、この関数を実行後に終了されると言う事です
14デフォルトの名無しさん:2006/04/14(金) 16:44:35
ゲスウィンドウ
15デフォルトの名無しさん:2006/04/14(金) 16:46:27
>>13
GethWndに渡したポインタが指す先は、MakeMessageWindowが呼ばれるまで有効なんだろうな?
つーかわざわざポインタにする意味あるのか?
16デフォルトの名無しさん:2006/04/14(金) 16:47:55
C言語から出直してきやがれ、な悪寒
1710:2006/04/14(金) 16:49:44
ウィンドウは一つしか使っていないのでポインタの指す先は有効だと思います
ポインタにしたのは、メッセージウィンドウを良く使うので
すべてにhWndを渡すよりは良いと思ったからです
18デフォルトの名無しさん:2006/04/14(金) 16:52:49
超能力者plz
19デフォルトの名無しさん:2006/04/14(金) 16:54:16
お客様の中でエスパーの方はいらっしゃいませんかーーーー?
20デフォルトの名無しさん:2006/04/14(金) 16:56:10
>>17
その GethWnd() はどうやって呼んでいるの? という話。
(それ機能からするとSetHWnd()じゃないのかよ、というのは置いといて)

HWND hwnd2 = hwnd1;
とすると hwnd1 も hwnd2 も同じウィンドウを示せるというのは理解し
てないんだよね、きっと。
21デフォルトの名無しさん:2006/04/14(金) 16:57:00
エラー:エスパーが見つかりません
22デフォルトの名無しさん:2006/04/14(金) 16:58:45
ウィンドウハンドルもポインタも同じ大きさだから
間接参照する分ポインタの方が効率悪いんだけどね。管理も大変だし。
23デフォルトの名無しさん:2006/04/14(金) 16:58:54
meinには突っ込まないのか
それgetterじゃなくてsetterだな

>>17
ウィンドウハンドル(hWnd)は、ポインタではなく値だ
だから値として保持しろ
2410:2006/04/14(金) 17:10:02
すいません、脳内で>>15をわざわざ関数〜に変換してました
ポインタは試行錯誤していた時の名残です
GethWnd()は別にヘッダを作って、そこで宣言しています
hWndを広域で宣言していたので、GethWnd()はWinMein開始直後に実行しています
hWndを使うウィンドウはそれから作っています
25デフォルトの名無しさん:2006/04/14(金) 17:15:49
WinMein開始直後に渡す、そのハンドルの入った変数がautoなんだよ。すぐ壊れちゃうの。
だから皆、値で渡せと言ってくれてるの。

二度もMeinじゃマジっぽいな。
26デフォルトの名無しさん:2006/04/14(金) 17:16:42
ソース全部乗っけたほうが話早そうな気がする
ほんとにまるまる全部だとアレだが
27デフォルトの名無しさん:2006/04/14(金) 18:05:49
スレの初っ端から議論炸裂ですね
2810:2006/04/14(金) 18:17:19
値で渡したら成功しました。ありがとう御座います
親ウィンドウを設定しているにもかかわらず、WinMain以外のヘッダで宣言した関数が
MakeMessageWindowを呼び出した時に、新しいタスクとしてメッセージウィンドウが作られました
この場合はまたhWndを渡さなくてはならないのでしょうか?
29デフォルトの名無しさん:2006/04/14(金) 18:20:14
>>28
「タスク」ってなにさ…。
MakeMessageWindow()って関数を作ることで、余計理解できなくなってないか?
30デフォルトの名無しさん:2006/04/14(金) 18:21:02
濃い霧に包まれているようだ。
何も見えない。
31デフォルトの名無しさん:2006/04/14(金) 18:22:14
新しいウィンドウとしてタスクバーに表示されたってことじゃないか
32デフォルトの名無しさん:2006/04/14(金) 18:23:36
そろそろ適切なスレに退去願おう。
3310:2006/04/14(金) 18:26:53
>>28
タスクバーの中にメインとして作ったウィンドウの他に
メッセージボックスのウィンドウが作られました
WinMainの内でMakeMessageWindowを呼び出した時には作られなかったのですが
違うヘッダで宣言した関数だとウィンドウが作成されます
34デフォルトの名無しさん:2006/04/14(金) 19:08:20
>>33
p_hWndがNULLだからじゃねーの?
3510:2006/04/14(金) 19:31:23
>>34
NULLになっていました
>>32
ttp://pc8.2ch.net/test/read.cgi/tech/1143601166/l50
がWIN32APIの質問OKでしたので、そちらに移らせていただきます。
お騒がせしてすいませんでした。
36デフォルトの名無しさん:2006/04/14(金) 20:13:27
C++相談室で誘導されて来ました。

質問なんですが、Windows付属のペイントソフトでブラシの太さ(堅さ?)を3段階で選べますよね?
あれをユーザが0から100の値で太さを選べるようにするにはどういうコードを書いたらいいんでしょうか?
37デフォルトの名無しさん:2006/04/14(金) 20:22:39
3836:2006/04/14(金) 20:26:12
>>37
ありがとうございます。
これと同じように作ってみます^^
39デフォルトの名無しさん:2006/04/14(金) 21:42:27
SPY++もっていないんでSysTree++ってソフトを手に入れてインスコしたら
ウィルスを作成するプログラムが入ってたみたいで
OS再起動後、ログオン時にSysTree++を呼びにいくようなプログラムが発生して起動できない。
レジストリを前の状態に戻して再起動したらなんとかいけたけど・・・

SPY++ってC++に付属なんですよね?他にこれと同じような機能のものないですか?
他に落としたのはWinIDって奴でこれはマウス座標にあるウィンドウ内のコントロールを表示する物なんですけど
ツリー上に表示したり、ハンドル一覧のテキスト書き出しとかはできないんですよね
40デフォルトの名無しさん:2006/04/14(金) 21:46:15
Winspectorも同類かな
4139:2006/04/14(金) 22:33:53
>>40
このソフトいいですね!ありがとう。
42デフォルトの名無しさん:2006/04/15(土) 07:43:12
PSDKに入っていなかったけ?
43デフォルトの名無しさん:2006/04/15(土) 08:59:10
HFONTがわかっている場合にそのフォント名を得るにはどうすればいいのですか?
44デフォルトの名無しさん:2006/04/15(土) 09:44:32
>>43
GetObject()でLOGFONTを取得。
45デフォルトの名無しさん:2006/04/15(土) 10:10:44
他の実行中のプロセスに(LoadLibaryで)アタッチされているDLLのパス名を列挙するにはどうすればいいの?
46デフォルトの名無しさん:2006/04/15(土) 12:53:52
DLL 列挙 API
47デフォルトの名無しさん:2006/04/15(土) 13:33:22
NT系限定ならSAPI
48デフォルトの名無しさん:2006/04/15(土) 14:54:13
CreateFont()にはlfFaceNameを指定する必要はないし、
フォントマッパーはlfFaceNameを無視する場合もある。
GetObject()は元となったlogfontを返す。
49デフォルトの名無しさん:2006/04/15(土) 14:58:24
>>45
むしろ>>8にヒントが
50デフォルトの名無しさん:2006/04/15(土) 16:24:39
動きませんー。
入門書のサンプルコード通りに打ち込んだのですが。。。
コンパイルはできますが、実行すると、ポンッというエラー音がして
何も操作できません。
子ウィンドウの動作を確認するサンプルです。
どこがいけないんでしょう・・・。

ソース
ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27528
51デフォルトの名無しさん:2006/04/15(土) 16:30:40
デバッグ料を振り込んでください
52デフォルトの名無しさん:2006/04/15(土) 16:46:34
すみません、動きました。
入門書の今までの章で作ったサンプルを雛形として使いまわしていたので、
メッセージだけ受け取ってreturn 0のみ行っている部分があったのですが
これがまずかったらしいです。
53デフォルトの名無しさん:2006/04/15(土) 17:06:01
DLLを自分で作ったDLLと置き換えたいのですが、
呼び出し側が下記みたいになっていたときは
DLL側の関数の宣言はどんなふうにしたらいいのでしょうか?
__declspec(dllimport) int __stdcall test();

たとえば、
__declspec(dllexport) int __stdcall test();
と言うようなふうにすると起動時に
「プロシージャエントリポイント test がDLLに見つからない」
と出てしまい、(「_test@20」と言う名称になっている)

__declspec(dllexport) int test();
と言うようなふうにするとDLLの関数を呼び出して戻ってきた時に
スタック位置が変わってると怒られてしまいます。
どこがいけないのでしょうか…
54デフォルトの名無しさん:2006/04/15(土) 18:08:31
>>53
DEFファイル作れ
55デフォルトの名無しさん:2006/04/15(土) 18:09:21
>>53
>「_test@20」と言う名称になっている
extern "C" は?
56デフォルトの名無しさん:2006/04/15(土) 18:14:10
>>55
もともと C でつくってるんじゃない?
あの例だと _test@0 だけど・・・。
5753:2006/04/15(土) 18:28:30
cppですが一応extern "C"はしてありました。
DEFファイルを作ってみたところ無事に実行することが出来ました!
ずっと引っかかっていたので助かりました、ありがとうございました。
58デフォルトの名無しさん:2006/04/15(土) 18:38:23
>>55
extern "C"は関数名に引数や戻り値の型などの情報を含めない(マングリング抑制)
visual studioでexport関数の先頭に自動的にアンダースコアが付記されることとは別
59デフォルトの名無しさん:2006/04/16(日) 02:16:05
リンクしてないという落ち。
60デフォルトの名無しさん:2006/04/16(日) 02:32:16
・・・・・・・(マングリング抑制?)
61デフォルトの名無しさん:2006/04/16(日) 02:50:21
始めましてです。
Windowsアプリケーションを作ろうと思っています。
詳しい内容は端折りますが
ttp://www.vector.co.jp/soft/win95/prog/se324535.html?y
と同じようなものを作りたいのです。
お聞きしたいことは
「Buttonコントロールなどをマウスで移動出来るようにしたい」
です。
私の考えでは、Buttonの上でのマウスダウン、アップを受取るのだと思うのですが
やり方がわかりません。
ご教授願お願いしますm(__)m]

環境はXP ProでVisualStudio.NET
62デフォルトの名無しさん:2006/04/16(日) 06:29:44
横取り40万
63デフォルトの名無しさん:2006/04/16(日) 07:38:18
>>61
> Buttonの上でのマウスダウン、アップを受取る
サブクラス化で。

もしくは、ボタンに見えるものを描画するだけでいいなら
DrawFrameControl
を使う方法もある。
64デフォルトの名無しさん:2006/04/16(日) 08:24:06
DrawFrameControlなんかを使うとLuna対応が面倒。
65デフォルトの名無しさん:2006/04/16(日) 08:50:39
ボタンといってもただの子ウインドウだからね
マウスを押しながら動かしたら移動すればいいだけだな
66デフォルトの名無しさん:2006/04/16(日) 11:37:55
ヒットテストでキャプションを返せば全自動だが、
標準で機能が用意されているのに何故いちいち自分でやろうとする?
67デフォルトの名無しさん:2006/04/16(日) 12:01:24
そうするとボタンとして機能しなくなるわな
68デフォルトの名無しさん:2006/04/16(日) 12:43:38
RADを作りたいならそれでもよし
69デフォルトの名無しさん:2006/04/16(日) 14:34:42
自分のウィンドウにWM_SIZEが来たときに自分のウィンドウをMoveWindowしたら無限ループになりますか?
7061:2006/04/16(日) 15:00:49
どうしても影分身みたいにButtonが殖えます。
しかもマウスの動きにあってない!!!
どこでミスしたかわかりません。

手本になるようなサイトはないでしょうか?
71デフォルトの名無しさん:2006/04/16(日) 15:03:11
てか.NETはスレ違い
72デフォルトの名無しさん:2006/04/16(日) 18:19:36
単なる break; 忘れに1000ペリカ
73デフォルトの名無しさん:2006/04/16(日) 18:44:21
リソースからビットマップを読みこむ方法はわかりますが、ファイルから読みこむ方法がわかりません。
74デフォルトの名無しさん:2006/04/16(日) 18:47:24
そうですか。
75デフォルトの名無しさん:2006/04/16(日) 18:47:36
while(TRUE){}

したらWindowsがフリーズしますか?
それともアプリケーションがフリーズしますか?
76デフォルトの名無しさん:2006/04/16(日) 18:52:01
いずれもNOだ。
77デフォルトの名無しさん:2006/04/16(日) 19:16:20
>>75
そんくらいやってみろカス
78デフォルトの名無しさん:2006/04/16(日) 19:24:05
>>75
日本語でおk
79デフォルトの名無しさん:2006/04/16(日) 20:38:23
デュアル環境とかでない状態でスレッドの優先順位を最上位にすればOSごといける。
80デフォルトの名無しさん:2006/04/16(日) 21:27:24
implementation

var
drag : boolean;
x1, y1 : integer;

{$R *.dfm}

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
pos:TPoint;
begin
drag := true;
pos.X := Button1.Left;
pos.Y := Button1.Top;
Windows.ClientToScreen(Form1.WindowHandle,pos);
x1 := Mouse.CursorPos.X-pos.X;
y1 := Mouse.CursorPos.Y-pos.Y;
end;
81デフォルトの名無しさん:2006/04/16(日) 21:28:17
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
drag := false;
end;

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if drag then
begin
Button1.Left := Mouse.CursorPos.X-Form1.Left-x1;
Button1.Top := Mouse.CursorPos.Y-Form1.Top-y1;
Button1.Caption := IntToStr(Button1.Left)+','+IntToStr(Button1.Top);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.BorderStyle := bsNone;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Close;
end;

end.
82デフォルトの名無しさん:2006/04/16(日) 21:29:48
氏ね
83デフォルトの名無しさん:2006/04/16(日) 23:36:17
Del厨はDelphiスレから出てくるな
84デフォルトの名無しさん:2006/04/17(月) 00:28:12
それでもDelさ
なんちて
85デフォルトの名無しさん:2006/04/17(月) 06:34:42
86デフォルトの名無しさん:2006/04/17(月) 14:03:58
keybd_eventを使って、'_'を送る方法を教えてください。
もしくはkeybd_event以外の代案をいただけると助かります。
ちなみに、送り先はコマンドプロンプトです。
英数、マイナス、ピリオドなどはできたのですが、'_'だけが送れずに困っています。
87デフォルトの名無しさん:2006/04/17(月) 14:46:39
(´ー`)ノ VK_OEM_102
88デフォルトの名無しさん:2006/04/17(月) 15:09:10
>>87
できました!
'_'の場合にkeybd_eventでVK_OEM_102を送るだけでは駄目でしたが('\'が出る)、
事前にVK_SHIFTを送ることで'_'を出すことができました。
ありがとうございました。本当に助かりました。
89デフォルトの名無しさん:2006/04/17(月) 15:44:11
えらくハードウェア依存な動作をしそうだが。
90デフォルトの名無しさん:2006/04/17(月) 17:00:25
サブクラス化について調べていたのですが、
スーパークラス化
という単語が出てきて混乱しています

とりあえずしらべてみたところ
・オブジェクト指向とは関係ないらしい
・既存のコントロールに機能を付け足す事ができる


何がちがうんでしょうか
91デフォルトの名無しさん:2006/04/17(月) 17:11:21
同じ言葉を違う意味で使ったり
同じことを違う言葉で呼んだりするから
それだけじゃなんとも
92デフォルトの名無しさん:2006/04/17(月) 17:14:52
0x00001000
↑こういうのって2進数っていうんですかね?
どなたかご回答お願いします。
93デフォルトの名無しさん:2006/04/17(月) 17:18:44
>>92専用スレがあるから、そっちで聞け。
http://pc8.2ch.net/test/read.cgi/tech/1100537740/
94デフォルトの名無しさん:2006/04/17(月) 17:20:30
>>92
マジレスすると16進
9590:2006/04/17(月) 17:20:46
わかりました

Windowsのコントロールについて
・既存の「クラス」に機能を追加する->スーパークラス化
・既存の「インスタンス」に機能を追加する->サブクラス化

て認識でいいんですかね
96デフォルトの名無しさん:2006/04/17(月) 17:54:03
>>94
たまに 0b01101001 のような 2進表記が言語レベルで欲しくなるときがある・・・
マクロで逃げてるけど
97デフォルトの名無しさん:2006/04/17(月) 17:55:52
スーパークラスってサブクラスの逆の意味じゃないのか?
98デフォルトの名無しさん:2006/04/17(月) 17:56:09
>>94
サンクス
99デフォルトの名無しさん:2006/04/17(月) 17:58:44
95のであってるよ
100デフォルトの名無しさん:2006/04/17(月) 18:22:53
質問なのですがビットマップの宣言の時に
HBITMAP HaikeiBmp; という宣言と
int HaikeiBmp;     というint型でビットマップの宣言をする事は
どういう意味があるのでしょうか?
どなたか教えていただけないでしょうか<(_ _)>
101デフォルトの名無しさん:2006/04/17(月) 18:26:16
その宣言が同時に行なわれているなら、コンパイルエラーを出すため。

そうじゃなきゃ、後者は
・ウィンドウズのデータ型を死んでも使いたくないへそまがり。
・そもそもHBITMAPを格納する変数じゃ無い。
102デフォルトの名無しさん:2006/04/17(月) 18:29:08
> ・そもそもHBITMAPを格納する変数じゃ無い。
変数名から無理矢理想像すると ImageList の index 用とかか。
103デフォルトの名無しさん:2006/04/17(月) 18:31:45
宣言は同時に行われていないので、多分後者の方だと思います。
取り合えずたいして気にするような事では無かったのですね。
教えていただき、ありがとうございました<(_ _)>
104デフォルトの名無しさん:2006/04/17(月) 19:29:07
OleLoadPictureについて質問です。

OleLoadPictureを使って画像を読み込んでいるのですが、
これでロードした画像の横幅と縦幅は、ピクセル単位ではないようです。

CDC::HIMETRICtoDPを使ってピクセル単位に直すようなのですが、
CDC::HIMETRICtoDPはMFCのためwindows.hをincludeしてやっている
今のプログラムと親和性がありません。
何かほかの方法で、ピクセル単位に変更することはできませんでしょうか?

OleLoadPicture関係はGoogleを使っても扱っているサイトが少なく、
扱っていてもMFCのため弱っています。
分かるかたいらっしゃいましたら、助言いただけると幸いです。
105デフォルトの名無しさん:2006/04/17(月) 19:36:37
HIMETRICtoDPが中で何をやっているのか見ればいいじゃん。
106デフォルトの名無しさん:2006/04/17(月) 19:36:57
MFC のソース見れば?

# DC の MapMode で分岐してるのか。
# 意外とめんどくさそうだね
107デフォルトの名無しさん:2006/04/17(月) 20:00:29
その部分だけ抜き出すのは相当しんどそうですね…。
正直GIFを読み込むのにOleLoadPictureを使っているのですが、
みなさんはGIFの読み込みはどうしていらっしゃるのでしょうか。

一応ネット上でGIF読み込みルーチンが公開されていたので、それで実装してもよいのですが、
可能ならばAPIなどで済ませたいものです。
(逆にAPIですまないから、ルーチンが公開されているのかもしれないですが)
108デフォルトの名無しさん:2006/04/17(月) 20:08:47
GDI+
109デフォルトの名無しさん:2006/04/17(月) 20:27:39
はじめまして、よろしくお願いします。

ワードマクロから自作アプリ(C#)にSendMessageをする方法を教えて下さい。

自作マクロ側には、既に下のように書きました。
即ち、フォームインスタンスにWndProcをoverrideして
Debug.WriteLine(m.Msg.ToString());を記述しました。
これにより、フォームのタイトルバーでマウスを動かすと、
WN_MouseMoveとかがたくさん表示されるようになりました。

一方、WordVBA側に何を記載すればよいのか
なかなか検討がつきません。

今は、
ttp://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips096.htm
を参考にしながら、がんばってますが、
Call SendMessage(hWndTo, WM_COPYDATA, Me.hwnd, sdtCOPYDATASTRUCT)
のMe.hwndでエラーが出てしまいます。
ワードVBA側には、何を記述すればよいのでしょうか。
このURLに記載されている通りにやっては、なぜうまくいかないのでしょうか。
お忙しい中、申し訳ないですが、宜し<お願いします…。
110デフォルトの名無しさん:2006/04/17(月) 20:51:52
VBA で WM_COPYDATA というと送信元ウィンドウハンドルは 0 を指定してるのが多いな
111デフォルトの名無しさん:2006/04/17(月) 20:55:24
送信元ウィンドウハンドルを NULL で って危なくない?
プロセス越しのデータ複写機構がうまく機能できるのかな?
112109:2006/04/17(月) 21:07:53
サンクス!なるほど、Me.hwndは0でよかったわけですね・・・。

>hWndTo = FindWindow(vbNullString, "受信フォーム")

これの"受信フォーム"という記載を、自作アプリのフォームの
タイトルバーに設定した文字列に置き換えれば・・・いいのですね!?
113デフォルトの名無しさん:2006/04/18(火) 09:46:37
ShowCursor でマウスカーソルの表示/非表示を
設定できますが、全てのアプリ(デスクトップ上)の
カーソルを表示/非表示した場合はどうすれば
良いのでしょうか?
114デフォルトの名無しさん:2006/04/18(火) 10:24:38
某ねこまんまのように実行中のプロセスの
仮想メモリの中身が見たいのですが、どこから手をつければいいか
あまりにも分かりません。Win32APIの力で何とかならないでしょうか?
特定のアドレスの値を監視したいのです。
115デフォルトの名無しさん:2006/04/18(火) 10:35:48
ReadProcessMemory
116デフォルトの名無しさん:2006/04/18(火) 10:37:20
>>115
ああっありがとうございます!
ちょっと避け気味だったAPIですが、実はすごいですね。
117デフォルトの名無しさん:2006/04/18(火) 10:43:08
それほどでもない
118デフォルトの名無しさん:2006/04/18(火) 11:32:16
>>113
>カーソルを表示/非表示した場合はどうすれば
>良いのでしょうか?
別に何もしなくていいのでは? 或いは好きなことをすればいいのでは?
何のためにカーソルを表示/非表示したのか知りませんが。
119デフォルトの名無しさん:2006/04/18(火) 15:53:07
サブクラス化について質問です。
fnSubProc = (WNDPROC)SetWindowLong(hWnd,GWL_WNDPROC,(LONG)SubProc)
としたらfnSubProcには元のウィンドウプロシージャが入りますよね。

そのとき、Button1とButton2とEdit1で上の式、
fnSubProc = (WNDPROC)SetWindowLong(hWnd,GWL_WNDPROC,(LONG)SubProc)
をしたとき、fnSubProcに入る値はButton1とButton2が同じでした・・・

ということはもしかしてなんですが
fnSubProcに入る値は基本的にクラスによって決まるということなのでしょうか?
120デフォルトの名無しさん:2006/04/18(火) 15:59:35
どうやってハッキングするんですか?
121デフォルトの名無しさん:2006/04/18(火) 16:05:41
>ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
122デフォルトの名無しさん:2006/04/18(火) 16:36:34
>>119
そうだ。
123デフォルトの名無しさん:2006/04/18(火) 16:37:39
>>120
相手の手を叩け
124デフォルトの名無しさん:2006/04/18(火) 16:49:23
ウィンドウのフォーカスを失わないようにする事ってできますか?
125デフォルトの名無しさん:2006/04/18(火) 20:47:35
>>124
May the Focus be with you.
126119:2006/04/18(火) 21:12:42
>>122
どうゆうことですか

あとsageすんの忘れてました
127デフォルトの名無しさん:2006/04/18(火) 21:18:13
同じクラスのウィンドウは、同じウィンドウプロシージャを使う。
128デフォルトの名無しさん:2006/04/18(火) 21:46:03 BE:23292926-
>>124
古いOSならSetSysModalWindowが効くかも知れない。
今同じようなことをやるならSetCaptureとLockSetForegroundWindowかなぁ。
システムホットキーって止められたっけ?
129126:2006/04/18(火) 23:37:20
>>127
別のクラスのウィンドウに、同じプロシージャを使う方法ってありますか?
もちろん「プロシージャの内容は共通して使えるものに限る」としてです。
130デフォルトの名無しさん:2006/04/18(火) 23:41:17
サブクラス化だろ
131デフォルトの名無しさん:2006/04/18(火) 23:44:19
> プロシージャの内容は共通して使えるものに限る

その前提が成り立つことがほぼありえない。
132129:2006/04/18(火) 23:46:35
そうです、サブクラス化の質問です。
たとえば、BUTTONとEDITを共通のサブプロシージャを使うということです。

サブプロシージャのreturn CallWindowProc()のところさえいじくれば出来そうな気がするんですけど・・・
133129:2006/04/18(火) 23:48:07
>>131
遊び程度の小規模のものなら・・・
134デフォルトの名無しさん:2006/04/18(火) 23:52:06
がんばれば何とかなるよ。
君には無理だけど。
135129:2006/04/18(火) 23:55:43
>>134
すいません。
確かにこんなことしても勉強にもなりませんよね。。。
ちょっとサブプロシージャ複数作るのめんどくさいなぁって考えちゃいました
136デフォルトの名無しさん:2006/04/19(水) 11:48:34
例えば OS の Timezone が JST の環境で、EST での時刻を取得するためには
どうしたら良いのでしょうか。TIME_ZONE_INFORMATION のメンバを自分で
設定しなければならないんでしょうか。。調べたのですが良い方法が見つかり
ませんでした。
137デフォルトの名無しさん:2006/04/19(水) 15:05:28
標準時差と夏時間の有無から自分で計算
138デフォルトの名無しさん:2006/04/19(水) 15:39:58
cdeclでExportされた関数を
VC++で動的に呼び出す方法はあるますか?
139デフォルトの名無しさん:2006/04/19(水) 15:53:29
ある
140デフォルトの名無しさん:2006/04/19(水) 16:47:14
EXSTYLE = NULL
STYLE = WS_SYSMENU

の時のウィンドウのボーダーって

#define BorderWidth (GetSystemMetrics( SM_CXFIXEDFRAME ) * 2)
#define BorderHeight ((GetSystemMetrics( SM_CYFIXEDFRAME ) * 2) + GetSystemMetrics( SM_CYCAPTION ))

これで十分なんでしょうか
141140:2006/04/19(水) 16:48:38
修正です、すみません

EXSTYLE = NULL
STYLE = WS_SYSMENU

の時のウィンドウのボーダー幅を求めるのは

#define BorderWidth (GetSystemMetrics( SM_CXFIXEDFRAME ) * 2)
#define BorderHeight ((GetSystemMetrics( SM_CYFIXEDFRAME ) * 2) + GetSystemMetrics( SM_CYCAPTION ))
// 640 + BorderWidth
// 480 + BorderHeight

これで十分なんでしょうか
142デフォルトの名無しさん:2006/04/19(水) 16:51:59
bool flgDrnWndProc = false;
protected override void WndProc(ref Message m)
{
if (!flgDrnWndProc)
{
flgDrnWndProc = true;
const int WM_COMMAND = 0x0111;
switch (m.Msg)
{
case WM_COMMAND:
switch (m.WParam.ToInt32())
{
case 1:
search_unit();
break;
case 2:
search_end();
break;
case 3:
search_reverse();
break;
case 4:
add_unit();
break;
default:
break;
143142:2006/04/19(水) 16:53:57

}
break;
default:
break;
}
}
base.WndProc(ref m);
flgDrnWndProc = false;
}

WndProc内で呼び出したメソッドの処理が終わるまで、
WndProc内の他の処理(base.WndProc(ref m);を除く。)が絶対に処理されないように、
上記のように書いてみたのですが、例えばsearch_unit();が処理されている途中でも、
case1に対応するメッセージが飛んでくると、重ねてsearch_unit();が実行されてしまいます。
なぜでしょうか・・・(低レメルな質問ですみません・・・)
144デフォルトの名無しさん:2006/04/19(水) 17:24:15
DirectX SDK 7 ってもしかしてもう入手不可?

不可ならDirect3DとかいいからDirectDrawを復活させて欲しいなぁ
145デフォルトの名無しさん:2006/04/19(水) 17:40:39
>>141
心配なら AdjustWindowRect で確認
146デフォルトの名無しさん:2006/04/19(水) 17:43:07
>>139
単にキャストすればよかったんですね。
ありがとうございました。
147141:2006/04/19(水) 17:44:05
>>145
そんな便利なものがあったのかorz

サンクス
148デフォルトの名無しさん:2006/04/19(水) 18:08:49
>>143
ifブロックの中に最後の1行を入れてないからじゃないか?
それだと、trueになってから最初にWinProcが呼ばれたときにはifブロック内は実行されないけど、
必ずfalseに設定されて、次に呼ばれたときにifブロック内を実行してしまうよ。
149デフォルトの名無しさん:2006/04/19(水) 18:15:33
WinProc → WndProc
スマソ
150デフォルトの名無しさん:2006/04/19(水) 18:52:38
AdjustWindowRectも完璧じゃないけどな
151129:2006/04/19(水) 19:23:03
BUTTON1をマウスで移動できるようにするため、
BUTTON1のサブプロシージャを、

case WM_LBUTTONDOWN:
SendMessage(hWnd, WM_SYSCOMMAND, SC_MOVE+2, 0);
break;

としました。
そしたら一応動くことには動くのですが、
それをした後にBUTTON2を押したのですが反応がありませんでした。
ですのでもう一度おしたら反応しました。
ずっとこの調子です。

これはなにが原因なんでしょうか?
あと、WM_LBUTTONUPに何かをつけるべきなのでしょうか?
152デフォルトの名無しさん:2006/04/19(水) 19:24:22
処理がまったく駄目だから
153デフォルトの名無しさん:2006/04/19(水) 19:30:46
>>141
WS_CHILD をON/OFFすれば出来ることは出来ると思う(藁
154151:2006/04/19(水) 19:42:08
なにが駄目かわかりませんけど
書き忘れがありました。

case WM_LBUTTONDOWN:
ReleaseCapture();
SendMessage(hWnd, WM_SYSCOMMAND, SC_MOVE+2, 0);
break;
155141:2006/04/19(水) 21:01:44
>>153


151 のことですか
156142:2006/04/19(水) 22:24:09
>>148
おっしゃる通り!まじさんくすこ!!
157デフォルトの名無しさん:2006/04/19(水) 22:28:15
現在、あるゲームプログラミングをしています。
最後にBitBltで裏画面から表(ウィンドウ)に画像を転送しているのですが、
なんとなく非効率的だと思い、DirectXを彷彿とさせる擬似フリップ機能を作ろうとしています。
ですが、何度やっても表に出てきません。
理由または原因、出来れば解決方法を教授してください。

// 非効率的?
BitBlt( hdc, 0, 0, 320, 240, hdcFlip, 0, 0, SRCCOPY );

// 擬似フリップ
hbmpFlipTmp = (HBITMAP)SelectObject( hdcFlip, hdc );
SelectObject( hdc, hbmpFlipTmp );
158デフォルトの名無しさん:2006/04/19(水) 22:33:04
メモリDCじゃないものに・・・
159デフォルトの名無しさん:2006/04/19(水) 22:36:01
原因というか、そもそもそんなことは出来ない。
160デフォルトの名無しさん:2006/04/19(水) 22:39:35
>>158 >>159
即レスありがとうございます。

無理なんですか。
ちょっと希望を抱いていたのですが。

メモリDCじゃないとSelectObject出来ないんですか。
初めて知りました。
BitBltで頑張ります。

ありがとうございました。
161デフォルトの名無しさん:2006/04/19(水) 22:42:35
あと、SelectObjectの第二引数にhdcもありえねー
162デフォルトの名無しさん:2006/04/19(水) 22:49:49
>>157
なんとなく非効率的だから改善しようという心がけが非効率的。
非効率で困るのなら、きちんとどこが非効率だか調べて、そこを重点的に効率化しなさい。
163デフォルトの名無しさん:2006/04/19(水) 23:13:13
教えてえらい人!

Windows のサービスで回復タブに指定した内容で
動作させるにはどんなプログラミングを行えばいいの?

回復タブの設定ってどんな仕組みで動作するの?
164デフォルトの名無しさん:2006/04/20(木) 01:04:18
>>163
CreateServiceの引数で指定できない?
165デフォルトの名無しさん:2006/04/20(木) 10:13:53
そういや2D専用なDirect3Dのライブラリってないのかねぇ‥‥
166デフォルトの名無しさん:2006/04/20(木) 10:51:42
>165
2D描画程度なら変換済み頂点使えばすぐだしスプライトもある
その程度の事にライブラリ求める程度の脳しかないならプログラミングなんか止めちまえ
167デフォルトの名無しさん:2006/04/20(木) 11:57:00
D3DX の Sprite でほとんどの用途には事足りる気がする
168デフォルトの名無しさん:2006/04/20(木) 13:30:58
あ〜やめだやめだ
漏れの脳をD3DXの為に浪費するのは勿体無いから
2D用に特化されたライブラリがあって使い勝手が悪くないなら使わなくもない。
#つーか、全ての部下が漏れ並みの脳を持っているわけではないしね。
170デフォルトの名無しさん:2006/04/20(木) 14:06:16
○ 漏れ並みの脳しか持っていないわけじゃないしね
171169:2006/04/20(木) 14:09:18
>>170
それなら部下にライブラリを作らせるだけ。
172デフォルトの名無しさん:2006/04/20(木) 14:29:10
○ 部下にライブラリ作成をお願いして馬鹿にされるだけ
173デフォルトの名無しさん:2006/04/20(木) 15:26:49
脳内部下乙
174デフォルトの名無しさん:2006/04/20(木) 15:49:34
非コンソールなアプリをDOS窓から起動したときに、
そのDOS窓に、文字列を書き出したいので、
AttachConsole()
WriteConsole()
などを使う方法で出力することはできたのですが、
書き終わった後に、DOS窓のコマンドプロンプトが表示されません。
手でENTERキーを押すと、無事にコマンドプロンプトが出るのですが、
WriteConsole()で書き終わった後に、自動的にコマンドプロンプト
を出す方法がありましたら教えて下さい。
175デフォルトの名無しさん:2006/04/20(木) 15:53:05
キー入力をシミュレートするしかないんでない?
176デフォルトの名無しさん:2006/04/20(木) 15:54:31
>>174
アタッチがあるなら、デアタッチがありそうな気がするのはオレだけか?
と言うか、まずはググってみたらどうだ?
177デフォルトの名無しさん:2006/04/20(木) 16:00:14
178デフォルトの名無しさん:2006/04/20(木) 16:00:57
お前だけじゃないにしても、極端に少ないのは確か。

デアタッチ の検索結果 約 17 件中 1 - 8 件目
179デフォルトの名無しさん:2006/04/20(木) 16:08:20 BE:23292634-
「デアタッチ」つったらdare touchだよなぁ・・・
"dare touch" の検索結果 約 151,000 件中 1 - 10 件目 (0.31 秒)
180176:2006/04/20(木) 16:11:37
デタッチと言うのか…orz



# 英語力が無いから困る…orz
181デフォルトの名無しさん:2006/04/20(木) 16:27:10
attach⇔detachなんて常識だろ
英語云々以前に、そのままカタカナ語として使われてるだろ

>>176はデバッガ触ったことすら無いのか?
182デフォルトの名無しさん:2006/04/20(木) 17:09:35
今夜アナタにデアタッチ
183デフォルトの名無しさん:2006/04/20(木) 18:49:16
感じる時代ラブタッチ
いいじゃんか そうじゃんか
うひょうひょ〜
クライマ〜ックス♪
184デフォルトの名無しさん:2006/04/20(木) 19:46:06
おっさんw
185デフォルトの名無しさん:2006/04/20(木) 20:08:55
メモリの確保について質問です
物理メモリが2G乗っているWindowsXP Proで
タスクマネージャーの利用可能メモリが1.5Gとあるにもかかわらず
HeapAllocやGlobalAllocでは
合計1.2G分のメモリを確保できませんでした

大容量のメモリを使うときの作法がなにかあるんでしたら教えてください。
よろしくお願いします。
186デフォルトの名無しさん:2006/04/20(木) 20:12:21
VirtualAlloc()
VirtualAllocEx()
187デフォルトの名無しさん:2006/04/20(木) 20:38:42
>>185
32bit Windowsで1.2Gもの連続領域が確保できるだけで十分幸せだと思いねえ
188デフォルトの名無しさん:2006/04/20(木) 20:39:33
あ、「合計」か。まあでも、そんなもんだろ。
189デフォルトの名無しさん:2006/04/20(木) 21:23:55
>>187
>>185は確保できなかったと言ってるのでは
190デフォルトの名無しさん:2006/04/20(木) 23:07:22
(゚ν゚)ニホンゴムズカスィネー
191デフォルトの名無しさん:2006/04/21(金) 00:25:32
>>185
Win32アプリケーションのメモリ空間は4GB。
デフォルトではその内2GBがシステムで予約されてて、ユーザーアプリが使えるのが2GB。
一度に確保しようとすると、断片化等を考えるとそれくらいが妥当な線ではないかな?
192デフォルトの名無しさん:2006/04/21(金) 10:54:22
「合計」1.2GB が微妙。
600MB のブロックが2個かも試練し、1MB のメモリブロック 1200 コかも試練。
巨大ブロックなら断片化かも試練が、HeapAlloc で数千個のブロックを alloc
してたりするなら、0.3GB分くらい消費してるかも試練。
paging境界のpaddingも気になる。
193デフォルトの名無しさん:2006/04/21(金) 11:14:42
達人のみなさま、ねっとげーむ無料でやる方法教えてください!
194デフォルトの名無しさん:2006/04/21(金) 11:16:02
基本料金無料のネットゲームをやる
195デフォルトの名無しさん:2006/04/21(金) 13:53:40
>>194
通信料も無料でと言ってるんではなかろうか
196デフォルトの名無しさん:2006/04/21(金) 13:55:33
>>187 >>191-192
500MB程度のブロックを2つと100MB程度のブロックを2つです。
VirtualAllocも試してみましたがだめでした。
197デフォルトの名無しさん:2006/04/21(金) 14:17:10
・ネカフェでやる
利用料も無料にしたいなら
・他人の家でやる
198デフォルトの名無しさん:2006/04/21(金) 14:45:09
他人の家に侵入するのはリスクが高すぎる
199デフォルトの名無しさん:2006/04/21(金) 14:51:35
GMになればタダで遊べる上に給料までもらえる。
200デフォルトの名無しさん:2006/04/21(金) 15:19:01
脳内妄想ネットゲーム。これ最強。
これで数時間、余裕で潰せる俺に、窓際なんて怖くない。

>>196
そのメモリ確保前に、どれくらい「自アプリで」メモリ使っている?
201デフォルトの名無しさん:2006/04/21(金) 15:59:19
>>200
タスクマネージャーのPF使用量は
起動前221MB 起動直後224MB メモリ確保直前225MB
となっていますので
5MB前後だと思われます。
202デフォルトの名無しさん:2006/04/21(金) 16:01:22
なんでプロセスタブでターゲットプロセスのメモリ使用量を見ないんだろ。
203200:2006/04/21(金) 16:14:53
>>201
202の指摘ももっともだけど、5M10M程度じゃ、あまり関係なさそうだ。失礼
204デフォルトの名無しさん:2006/04/21(金) 19:47:23
メモリ使用量じゃなくて仮想メモリサイズの方を見たほうがいいよ
205デフォルトの名無しさん:2006/04/21(金) 23:39:51
すみません。初歩的なことかもしれませんが教えてください。
ウィンドウの左端に「あるもの」にカーソルを合わせたら出てくるメニューってどう作るのですか?

「あるもの」とはVisualstudio.Netとかの「ツールボックス」とかのあれです。
わからなかったらすみません
206デフォルトの名無しさん:2006/04/21(金) 23:41:29
マウスポインタが「あるもの」の上に乗ったときにメニューを表示しすればいいんじゃないか?
207デフォルトの名無しさん:2006/04/22(土) 00:21:54
208デフォルトの名無しさん:2006/04/22(土) 00:51:39
教えてもらってなんですけど、
さっぱりわかりません。
確かに自分がいったものに間違いなさそうですが・・・

ですので左側に固定のものにしようと思います。

教えてくれてありがとうございます。
209デフォルトの名無しさん:2006/04/22(土) 07:52:30
Windowsプログラミング初心者です。
SetWindowsHookExでWH_KEYBOARDを監視するとして、何かキーが押されたらコールバックが発生しますが
コールバック元を特定するにはどうしたら良いのでしょうか?
フォーカスの当たっているウィンドウ?コントローラ?を探す感じでしょうか?
210209:2006/04/22(土) 07:59:19
書き忘れました。
↑のはグローバルフックの場合です。
211デフォルトの名無しさん:2006/04/22(土) 11:25:27
IMEについての質問なんだが、
変換候補を取得する時、CANDIDATELIST 構造体を使うわけだが

CANDIDATELIST 構造体の定義
----------
typedef struct tagCANDIDATELIST {
 DWORD dwSize;   
 DWORD dwStyle;   
 DWORD dwCount;   
 DWORD dwSelection; 
 DWORD dwPageStart; 
 DWORD dwPageSize; 
 DWORD dwOffset[1]; ←配列の要素は一つ
} CANDIDATELIST, *PCANDIDATELIST;
----------

dwOffset[] はこの構造体の先頭からのオフセット値で、
一つ目の文字列を取得するには 先頭アドレス+dwOffset[0] を参照する。
二つ目なら 先頭アドレス+dwOffset[1] を参照してくらしいけど、
dwOffset[]って、構造体の中の宣言ではdwOffset[1]として、要素は一つしか
宣言してないのに、サンプルプログラムとか見ると、普通にdwOffset[2]とかを
使ってる。どうして、配列違反にならないの?
212デフォルトの名無しさん:2006/04/22(土) 11:28:24
その分、余分に領域を確保しているんじゃね?
newとかで。
213デフォルトの名無しさん:2006/04/22(土) 11:28:46
ならないようにメモリ確保して使ってるから。
214デフォルトの名無しさん:2006/04/22(土) 11:42:07
必要なサイズ調べて確保する

ttp://www.kumei.ne.jp/c_lang/sdk3/sdk_282.htm
215デフォルトの名無しさん:2006/04/22(土) 12:08:07
>>212-214
お、すばやい回答サンクス。

ちょっと簡単な実験プログラム書いて実験してみて理解できた。
こんなやり方があるんですね。勉強になったよ。
216デフォルトの名無しさん:2006/04/22(土) 12:25:53
EnumWindowで列挙したウィンドウハンドルから
Alt+PrintScreenでクリップボードに取れるような
ウィンドウイメージを取得するのはどうすればいいでしょうか?
217デフォルトの名無しさん:2006/04/22(土) 12:47:32
ウインドウハンドルがとれているのに、
何故その質問になるのかさっぱり意味が分からない。
218デフォルトの名無しさん:2006/04/22(土) 12:49:03
ウィンドウハンドルからどうやってビットマップイメージに変換するんでしょうか。
219デフォルトの名無しさん:2006/04/22(土) 12:49:25
(BMP)hWnd
220デフォルトの名無しさん:2006/04/22(土) 12:55:01
>>219
よくわからないので、できればそのことを確認できるキーワードか解説しているURLを教えてください。
221デフォルトの名無しさん:2006/04/22(土) 13:03:25
おしえてあげないよ!ジャン♪
222デフォルトの名無しさん:2006/04/22(土) 13:29:48
>>216
GetWindowDCでどうだ?
223デフォルトの名無しさん:2006/04/22(土) 14:08:09
Win32の先輩方って、構造化例外処理をどの程度活用されていますか?
例えば、HeapAlloc() に HEAP_GENERATE_EXCEPTIONS を指定したりします?
確かに便利だとは思うのですが、大きな罠が隠れているような気もします。
224デフォルトの名無しさん:2006/04/22(土) 14:15:18
ttp://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9804/idea/fig02.gif
こういうのってどうやって作るの?
225デフォルトの名無しさん:2006/04/22(土) 14:16:35
フォーカス当たっている領域に動的にドロップダウンリスト貼り付けてるだけ。
226デフォルトの名無しさん:2006/04/22(土) 14:45:14
あっ、違います。
リストではなくその後ろの属性の値を入力できるもの全体です。
写真、ややこしいですねm(._.)m
227デフォルトの名無しさん:2006/04/22(土) 14:48:25
>>223
とりあえずalloca使うときはSEH使う。
228デフォルトの名無しさん:2006/04/22(土) 15:13:20
>>226
場所に応じて必用なコントロールを貼り付けてりだけ。
見たまんまだから別に悩むところでも疑問に思うところでもない。
229デフォルトの名無しさん:2006/04/22(土) 15:19:01
タブ型コンボボックス内蔵リストビューがあるかと言ったらそんなものはない
230デフォルトの名無しさん:2006/04/22(土) 15:31:15
C#にはあるけどね
231デフォルトの名無しさん:2006/04/22(土) 15:35:19
>>223
>Win32の先輩方
Win3.1とか?
232デフォルトの名無しさん:2006/04/22(土) 15:35:22
最近は言語にコントロールが付いてくるのか。
233デフォルトの名無しさん:2006/04/22(土) 15:36:00
>>231
むしろOS/2
234223:2006/04/22(土) 17:49:07
>>227
なるほど。ご意見どうもありがとうございます。

>>231
Win32プログラミング歴の長い皆様…という意味っす。
235デフォルトの名無しさん:2006/04/22(土) 21:42:25
現在のキャレットの位置をスクリーン座標で取得したいのですが、
GetCaretPos はキャレットを所有しているウィンドウのクライアント座標しか
返してくれません。キャレットを所有しているウィンドウのハンドルが
分かれば、ClientToScreen でスクリーン座標に変換できるのですが、
そのような関数が見当たりません。どなたか助けてください!
236デフォルトの名無しさん:2006/04/22(土) 22:31:16
GetGUIThreadInfo
237デフォルトの名無しさん:2006/04/22(土) 23:28:20
GetForegroundWindow?
238デフォルトの名無しさん:2006/04/23(日) 00:12:55
SetWindowsHookExでグローバルフックをして
WH_KEYBOARDを監視するとして、何かキーが押されたらコールバックが発生しますが
コールバック元を特定するにはどうしたら良いのでしょうか?
フォーカスの当たっているウィンドウ?コントロール?を探す感じでしょうか?
239デフォルトの名無しさん:2006/04/23(日) 01:29:21
元はキーボードドライバ、とかじゃなくて?
240238:2006/04/23(日) 01:45:48
説明足らずですみません。
元は、キーが押された時にフォーカスの当たっていたコントロールということです。
241デフォルトの名無しさん:2006/04/23(日) 01:57:52
209 :デフォルトの名無しさん :2006/04/22(土) 07:52:30
Windowsプログラミング初心者です。
SetWindowsHookExでWH_KEYBOARDを監視するとして、何かキーが押されたらコールバックが発生しますが
コールバック元を特定するにはどうしたら良いのでしょうか?
フォーカスの当たっているウィンドウ?コントローラ?を探す感じでしょうか?
242デフォルトの名無しさん:2006/04/23(日) 01:58:56
243238:2006/04/23(日) 02:17:47
>>242
この場合、thread idはどこから取得すれば良いのでしょうか?
244238:2006/04/23(日) 02:27:36
GetForegroundWindow

GetWindowThreadProcessId

GetGUIThreadInfo

をやって解決しそうです。お騒がせしました。
もしなんかもっとスマートなやり方があったら教えてください。
245デフォルトの名無しさん:2006/04/23(日) 04:37:19
スレッド間で少し長め(WPARAMとかに無理やりキャストできないサイズ)の文字列を
やりとりするには、領域を確保してそのポインタを渡すような実装しかできないんでしょうか?
どっちかのスレッドがこけて解放できなくなるなんてことが普通に起きそうで怖いんですが…
246245:2006/04/23(日) 05:35:18
自己解決しました。
247デフォルトの名無しさん:2006/04/23(日) 05:38:52
してませんが…
248デフォルトの名無しさん:2006/04/23(日) 10:17:12
>どっちかのスレッドがこけて解放できなくなるなんてことが普通に起きそうで怖いんですが
んなコード書くほうが悪いだろう。
249デフォルトの名無しさん:2006/04/23(日) 10:24:25
>>245
スレッドの強制終了はNG。
フラグ立ててきっちり終了処理してから死んでくれと頼むのが基本。

その上でそのスレッドが文字列の開放を出来ない理由があるなら
開放の責任をメインスレッドに委ねてしまえばいい。

なんにしても
>領域を確保してそのポインタを渡すような実装しかできないんでしょうか?
これ以外の実装はない。
250デフォルトの名無しさん:2006/04/23(日) 10:42:36
GetFocus()
251デフォルトの名無しさん:2006/04/23(日) 10:49:19
他のアプリから文字を取ってきたりするけど
252デフォルトの名無しさん:2006/04/23(日) 11:33:39
プロセス間のデータ受け渡しで悩むならわかるが
スレッド間で悩む必要なんてなかろうに。
253デフォルトの名無しさん:2006/04/23(日) 19:12:45
動的に確保したメモリを指すポインタを渡した時にどっちに解放責任を持たすかで悩むとか
254デフォルトの名無しさん:2006/04/23(日) 19:16:53
IInterfaceみたいに参照カウンタでもつけたらどうだ?
255デフォルトの名無しさん:2006/04/23(日) 19:17:31
エスパーズが暴走しております
256デフォルトの名無しさん:2006/04/23(日) 19:18:44
MDIでツールバーを作成する方法を教えてください!!!
自分のなかのSDIの知識だけでしたらおかしくなったのでお願いします。
257デフォルトの名無しさん:2006/04/23(日) 19:42:00
MDI ツールバー
258デフォルトの名無しさん:2006/04/23(日) 19:48:36
>>257
参考になりそうなサイトを教えてください(^人^)
259デフォルトの名無しさん:2006/04/23(日) 19:54:53
260デフォルトの名無しさん:2006/04/23(日) 19:57:31
( ̄Д ̄;) ガーン
261デフォルトの名無しさん:2006/04/23(日) 19:57:39
(^人^)
262デフォルトの名無しさん:2006/04/23(日) 20:23:45
Give Me Toolbar!!!
263デフォルトの名無しさん:2006/04/23(日) 20:42:57
264デフォルトの名無しさん:2006/04/23(日) 20:57:40
コンソールプログラムを呼び出し、その標準出力をウィンドウが受け取ったりするにはどうすればいいの?
265デフォルトの名無しさん:2006/04/23(日) 21:02:18
>>264
パイプ
266デフォルトの名無しさん:2006/04/23(日) 21:08:09
>>196
CreateFile関数でファイル作成し、
SetFilePointer関数でlDistanceToMoveを0x7FFFFFFF,
dwMoveMethodをFILE_BEGINで実行。
んで、SetEndOfFile関数を使ったら、
連続した領域は確保できそうな気がする。

ただ、CloseHandle関数を実行する前に、
もう一度、SetFilePointer関数とSetEndOfFile関数を使わんと時間がかかるかも。


試してないけどね。
267デフォルトの名無しさん:2006/04/23(日) 21:10:16
268デフォルトの名無しさん:2006/04/23(日) 22:10:42
IEのメニューバーのようなツールバーを作ろうとしています。
TrackPopupMenuでメニューを表示しているとき新たに別のサブメニューを表示しなおす場合、
今までのTrackPopupMenu内の処理から抜けなければならないのですがどうするといいでしょうか。
269デフォルトの名無しさん:2006/04/23(日) 22:30:58
>>265
超さんくすこ
270デフォルトの名無しさん:2006/04/23(日) 22:42:59
>>268
抜ければ良いんじゃないのかな
271デフォルトの名無しさん:2006/04/23(日) 22:57:20
MDIでのツールバーはクライアントウィンドウにかくのでしょうか?
272268:2006/04/24(月) 00:47:51
>>270
どのようにして抜けたらいいのか分からないのです。。。
TrackPopupMenuがプログラム側に制御を戻す条件ということです。
273268:2006/04/24(月) 01:22:06
WM_CANCELMODEを送ったら解決しました。すみません。
274271:2006/04/24(月) 02:03:03
どうしてもわかりません。
フレームウィンドウにツールバーを作っても、クライアントウィンドウが上に来て押せなくなります。
だからといってクライアントウィンドウに書いてもウィンドウプロシージャがないために処理が出来ない。

こういった場合はサブクラス化でしょうか?
275デフォルトの名無しさん:2006/04/24(月) 02:09:29
ツールバーの高さを考慮した上でクライアントウィンドウのサイズを調整すべし
276271:2006/04/24(月) 02:23:45
>>275
ということはフレームウィンドウにツールバーを置いてということですよね?
一回試したのですが駄目でした。。。
やり方が間違っているのでしょうか?

case WM_SIZE:
   MoveWindow(hClient, 0, 100, LOWORD(lp),HIWORD(lp),TRUE);
SendMessage(hTool, WM_SIZE, wp, lp);
break;
277デフォルトの名無しさん:2006/04/24(月) 03:31:03
case WM_SIZE:
SendMessage(hTool, WM_SIZE, wp, lp);
RECT Rect;
GetClientRect(hTool,&Rect);
MoveWindow(hClient, 0,Rect.bottom,LOWORD(lp),HIWORD(lp)-Rect.bottom,TRUE);
break;

Cはよく分からないんだがこれだとどうなる?
278デフォルトの名無しさん:2006/04/24(月) 06:08:26
FAQだからぐぐったらすぐ見つかると思うよ
279デフォルトの名無しさん:2006/04/24(月) 10:56:01
ISAPIフィルタからASPのアプリケーション変数に
アクセスする方法があったら教えてください。
280デフォルトの名無しさん:2006/04/24(月) 12:09:58
シリアル通信をするのにCreateFileでポートを開け、DCB構造体を
GetCommStateで取得してパラメータを設定、SetCommStateで設定、
という手順で初期化してるんだけど、ボーレートを230400にしよう
とするとうまくいかない。

DCB構造体を使用している限り出来ない、ということは何となく理解
したけど、じゃあどうすればいいの?
281デフォルトの名無しさん:2006/04/24(月) 12:15:40
>>280
まずPCのシリアルポートがその転送速度サポートしてるのか?
普通は115kbpsあたりまでしかサポートしてないと思うが‥‥
282デフォルトの名無しさん:2006/04/24(月) 12:18:20
>>280
GetCommPropertiesで取れなきゃダメなんじゃね?
283デフォルトの名無しさん:2006/04/24(月) 12:25:39
イヤです。
284280:2006/04/24(月) 13:27:46
即レスありがとう

>>281
デバイスマネージャから確認したところ、115200,230400,460800,921600を
ドライバ的にはサポートしているっぽい。

>>282
早速GetCommPropertiesを確認してみたところ、
commprop.dwSettableBaudの値は268435456でした。

わからん。。。
285デフォルトの名無しさん:2006/04/24(月) 13:37:17
>>284
見るべきは、dwMaxBaudの方じゃないか?
286デフォルトの名無しさん:2006/04/24(月) 13:39:43
>>284
あと、268435456 = 0x10000000 = BAUD_USERな
287280:2006/04/24(月) 13:54:57
>>285
失礼。まちがえてた。dwMaxBaudが268435456。
ちなみにdwSettableBaudは268856176でした。
>>286
なるほど。
つまりこの値ではサポートしているボーレートの上限はわからないのね。

288276:2006/04/24(月) 14:04:56
>>277
試してみました
けど、やっぱり結果は同じです。
ツールバーのボタンが見えているのに押せない(..、)
289デフォルトの名無しさん:2006/04/24(月) 14:10:39
>>287
dwSettableBaudはBAUD_なんちゃらのorが入っている。
つまり、268856176だとBAUD_USERが設定可能でBAUD_57600、BAUD_115200...が設定可能と読む。
逆に例えばBAUD_128K、BAUD_56Kが設定できないとわかる。
まぁ、BAUD_USERでの上限はどうやっても判らん訳で。
290デフォルトの名無しさん:2006/04/24(月) 15:35:37
もすかすて、ATコマンドでボーレート設定とか?
291デフォルトの名無しさん:2006/04/24(月) 16:31:12
そりゃModem側の設定だろ
292デフォルトの名無しさん:2006/04/24(月) 17:20:13
>>288
こっちでも同じ質問してるな

http://forums.belution.com/ja/vc/000/358/12.shtml
MDIでツールバーの使い方
293288:2006/04/24(月) 18:18:06
>>292
どうしても早くやり方が知りたいので・・・
すみません
294デフォルトの名無しさん:2006/04/24(月) 18:25:33
>>293
The Code Projectが一番勉強になる件
295デフォルトの名無しさん:2006/04/24(月) 19:11:23
レバーコントロールのバンドのタイトルを「(&D)」などとしても下線がつかなかったのですが
どうするとつけることができますか?
296デフォルトの名無しさん:2006/04/24(月) 21:20:30
誰かNetMeetingのAPIを使って
簡単なサンプルを書いてくれ。
297288:2006/04/25(火) 01:28:16
>>277さん、原因がわかりました。
WM_SIZEの処理をしたあとにbreakをしていたのがまずかったです。
つまりその処理の後にデフォルトプロシージャの処理をしてしまっていました。
return 0;に直したら動きました。
298デフォルトの名無しさん:2006/04/25(火) 06:36:18
299デフォルトの名無しさん:2006/04/25(火) 10:48:00
WriteFileExの成功の判断の方法で質問があります。

MSDN
http://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_writefileex.htm

=======
関数が成功すると、0 以外の値が返ります。
=======
WriteFileEx 関数を使う場合、この関数が「成功」を示す値を返していても、それだけでは不十分です。GetLastError 関数を呼び出して、いくつかの条件が「成功」しているだけで、把握するべき他の条件がエラーになっていないかどうかをチェックしてください。=======
とあります。

ここでCreateFile,WriteFileEx,CloseHandleの一連の操作を行うテスト・プログラムにおいて,WriteFileExの戻り値が1になっています。処理は正しく行われています。

しかし,MSDNに関数が成功(0以外の値)のときだけでは不十分との記述があったので念のためGetLastErrorを呼び出すと値が6(ERROR_INVALID_HANDLE)でした。Closeが正常なのでハンドルが無効とは考えにくいです。

とすると関数が1(成功)返し,GetLastErrorがERROR_SUCESSを返さない場合はどう判断すればいいのでしょうか?
300デフォルトの名無しさん:2006/04/25(火) 12:25:38
>>299
GetLastError()は最後に発生したエラーのコードを返す。
6(ERROR_INVALID_HANDLE)のコードが、
WriteFileEx()の呼び出しで設定されたかどうかを判断すべき。
301デフォルトの名無しさん:2006/04/25(火) 12:34:35
>>299
GetLastError が ERROR_SUCCESS を返すこと確認するのではなく、
関数が 1 を返すが、アプリ側でさらに処理が必要なケース
(例えば ERROR_MORE_DATA ) について必要な処理を行うようにしてください。

関数が 1 を返し、GetLastError が ERROR_SUCCESS を返すのは、
書き込みが(なぜか)同期的に完了し、コンプリーションルーチンは呼ばれない
ということを示しています(これは0バイトの書き込み以外では珍しいケースです)。
これは成功というより例外的な結果で、アプリが期待しているようにコンプリーション
ルーチンが呼ばれないため、何か特別な対応をする必要が(たぶん)あるでしょう。
(自分で呼ぶとか)。

・・・「例えば」とありますが、ERROR_MORE_DATAとERROR_SUCCESSの2つ以外の
どんな値に対応する必要があるのかは謎です。たぶんこの2つだけでOKなのでしょう。
302デフォルトの名無しさん:2006/04/25(火) 12:42:43
>>299
WriteFileExって非同期で書き込みオーダーを出してるだけなんじゃね?
OVERLAPPEDがあるから、FDなど遅い媒体への書き込みとか試してみた?
303デフォルトの名無しさん:2006/04/25(火) 12:43:43
>>299
まずは、(Exのついていない)WriteFile()を使って非同期書き込みを行うプログラムを書いて見ることを強く勧める。
そうすれば、「WriteFileEx 関数を使う場合、この関数が「成功」を示す値を返していても、それだけでは不十分です。」
の意味が理解できると思う。

>>300のコメントにあるようにWriteFileExが非0を返したあとにGetLastErrorを呼んでも無意味。
GetOverlappedResultが0を返したとき、GetLastErrorを使う。
304デフォルトの名無しさん:2006/04/25(火) 13:09:11
横から>>301に補足
>関数が 1 を返すが〜
戻り値の型がBOOLやbool値の関数の成否を確認する際は
TRUE/trueとの比較はせず、FALSE/falseと比較にしませう
305デフォルトの名無しさん:2006/04/25(火) 14:19:07
誘導されてきました。質問です。
エクスプローラみたいなものを作っていて、縮小版表示アイコンを表示させたいです。
画像のサムネイル表示は出来ましたが、画像以外ファイルのアイコンで
エクスプローラで表示されているような
黒枠の中に小さいアイコンがぽつんとあるアイコンが取れません。
32*32のアイコンを引き伸ばして表示することは現在可能です。
IExtractImage, IExtractIcon, SHGetFileInfoなどつかいましたが同じ状況です。
開発環境はWin2000, VC++6.0です。

また、IExtractImageで取得・表示しているサムネイル画像ですが、
Win2000だと表示できるのに、WinXPだと表示できない画像がまれにあります。
IExtractImageで取得したBitmapをImageListに追加するときに
エラーが起こっているようです。XPでコンパイルしてもダメでした。
このような現象になったことがあるかたいらっしゃいませんか?
306デフォルトの名無しさん:2006/04/25(火) 14:26:37
激しくスレ違いで、大変申し訳ないでつが、
GIF8ビット深さのファイルの(PixelFormat.Format8bppIndexed)
各ピクセルの色を表現するには、0〜255の数字によりますよね。
0が黒で、
1が__色で、
2が__色で、



GIF256色の一覧表って、どのサイトに掲載されているか
教えていただけませんか?かなり困ってます・・・くぅ〜
(探したのですが、僕の探し能力ではみつかりませんでした)
307デフォルトの名無しさん:2006/04/25(火) 14:29:36
ファイルの中にカラーテーブル持ってる
308306:2006/04/25(火) 14:30:56
>>307
いま、307がものすごくいいこといった!!
そこをもっと詳しく・・・(・д・)
309デフォルトの名無しさん:2006/04/25(火) 14:32:28
なんか .NET っぽいな。
Image に Palette プロパティがあるだろ。
310306:2006/04/25(火) 14:34:50
>>309
どうして.Netだとすぐばれる・・・○rz

Bitmap bitmap1=new Bitmap(fs);
fs.close();

bitmap1.Palette・・・ほんとだ、それらしいのありました。



ってことは、ビットマップインスタンスを
ロックビットして、unsafeでバイト配列を観察していく
方法はだめだったのか・・・くぅ
311デフォルトの名無しさん:2006/04/25(火) 14:35:34
つーか、0が黒とは限らないしそもそもAPIに関係ないだろ。
312306:2006/04/25(火) 14:36:44
>>311
>>つーか、0が黒とは限らないし
いま、311がものすごくいいこといった!!!

>>311
>>そもそもry


306 :デフォルトの名無しさん :2006/04/25(火) 14:26:37
激しくスレ違いで、大変申し訳ないでつが、

313306:2006/04/25(火) 14:40:21
ってことはbitmapインスタンスをLockBitsして
1バイトごと順番に観察していくだけでは、
画像の中に赤いピクセルがあるかないか、それすらわからないのですか!!
くはっ今までの苦労はなんだったのか・・・
314306:2006/04/25(火) 14:53:48
315デフォルトの名無しさん:2006/04/25(火) 15:01:09
いい加減黙れスレ違い野郎うぜぇ
316306:2006/04/25(火) 15:09:57
byte byWhite=255;
byte byBlack=255;
for (int i = 0; i < 256; i++)
{
//白を見つけたら、
if (bitmap1.Palette.Entries[i].R == 255 && bitmap1.Palette.Entries[i].G == 255 && bitmap1.Palette.Entries[i].B == 255)
{
byWhite = (byte)i;
break;
}
}
for (int i = 0; i < 256; i++)
{
//黒を見つけたら、
if (bitmap1.Palette.Entries[i].R == 0 && bitmap1.Palette.Entries[i].G == 0 && bitmap1.Palette.Entries[i].B == 0)
{
byBlack = (byte)i;
break;
}
}
if (byWhite == 255 || byBlack == 255)
{
return false;
}

ご迷惑おかけしました。
無事、解決することができましたことをご報告申し上げます。

皆さん、ありがとうございました。とても助かりました。
317デフォルトの名無しさん:2006/04/25(火) 15:55:28
プログラム側から、ツールバーのボタンを押したというメッセージを送るにはどうしたらいいのでしょうか?
318デフォルトの名無しさん:2006/04/25(火) 16:10:40
そういうメッセージをSendMessageなりPostMessageなりすればいい
319デフォルトの名無しさん:2006/04/25(火) 16:30:00
ContextSwitchDeadlockって何ですか?
デバッグ中に凍ったと思ったら、こんなの表示されたよ
320デフォルトの名無しさん:2006/04/25(火) 16:47:04
306によって質問が流された>305です。
どなたかわかる方がいたらお願いします。

>319
ぐぐったらなんか出てきたけどこれとは違うの?
321デフォルトの名無しさん:2006/04/25(火) 16:58:34
306を頃すAPIを教えてください
322デフォルトの名無しさん:2006/04/25(火) 17:10:41
299です。

>>300さん
はい。これは実験しました。で,結果ですがわすれちゃった(笑)。CreateFileの直後は0ですがWriteFileExの直後で6になっているのでWriteFileExで設定していると判断した記憶があります。

>>301さん
はい。どうもそれが正解のようです。ありがとうございました。

>>302さん
試していません。って言うか,実はWriteFileExとWriteFileの処理時間を比較していたのです。

>>303さん
WriteFileExとWriteFileの差を見ていたのですが,WriteFileで非同期の書き込みの実験はしていませんでした。意味はまだ理解できていませんが,おれ的には301さんの発言が正解のような気がしています。

GetOverlappedResult なんて関数があったんですね! WriteFileExばかり見ていたので気がつきませんでした(WriteFileExからはリンクがない)。でもWriteFileExで使えるとは書いてありません。要実験ですね。
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_getoverlappedresult.htm

Win32APIって何でも実験なんだなぁ…。初心者にはきつい。

>>304さん
はい。そうですね。TUREとしては0以外と定義されているので1を返す関数と0xFFFFFFFFを返す関数があるようです。
323デフォルトの名無しさん:2006/04/25(火) 17:45:56
305です。
二つ目の項目は自己解決しました。
GetLocationのフラグにあったIEIFLAG_ORIGSIZEをはずしたらOKでした。
324デフォルトの名無しさん:2006/04/25(火) 18:14:59
>>322
しかし、WriteFileExで、
OVERLAPPED構造体のリンクが外してあるのはヒドイよな。
WriteFile→WriteFile(非同期)→WriteFileExの順でやらんとピンとこんかもね。
325320:2006/04/25(火) 18:31:57
ぐぐたーけど、全部英語よってに・・。
326320:2006/04/25(火) 19:26:30
教えて、えろい人。
327319:2006/04/25(火) 19:28:02
ごめんなさい、325と326は、319でした。
328デフォルトの名無しさん:2006/04/25(火) 19:38:09
>>306
どうでもいいけどパレットエントリ中に白があるからといって画像中に白がある保証はない罠。
329デフォルトの名無しさん:2006/04/25(火) 19:45:16
>>327
日本語のページを検索
330デフォルトの名無しさん:2006/04/25(火) 20:19:41
331デフォルトの名無しさん:2006/04/25(火) 20:21:21
> 親子関係がよくわからなくなると思うのですが

お前が無能だからだな
332デフォルトの名無しさん:2006/04/25(火) 20:28:08
そもそもやる必要性があるんだろうか

自分では一般的な処理だと思っててもAPIが用意されてなかったりする場合
大抵その処理自体をやる必要がなかったりする
(別のアプローチで最終的にやりたい事ができるソリューションがあるということ)
333デフォルトの名無しさん:2006/04/25(火) 20:30:26
>>330
GetWindow
とか
334デフォルトの名無しさん:2006/04/25(火) 20:38:55
>>333
ありがとうございます。
これなら出来そうです。

>>331
> お前が無能だからだな
確かに無能です。
ですのでどのようにしたらGetParentでの処理が出来たのか教えてください。
335デフォルトの名無しさん:2006/04/25(火) 20:44:11
ダメです
336デフォルトの名無しさん:2006/04/25(火) 20:52:05
Σ(゚д゚lll)ガーン
そんなにめんどくさがらなくてもいいじゃないですかぁ!!!
337デフォルトの名無しさん:2006/04/25(火) 22:26:07
><;
338デフォルトの名無しさん:2006/04/26(水) 03:37:01
リストボックスにListBox_InsertStringマクロを用いて文字列を挿入しよう
としています。しかしインデックスを毎回同じにしても、上書きされずに
下の行に追加されていきます。上書きはどうやればできるのでしょうか。
339デフォルトの名無しさん:2006/04/26(水) 05:51:16
調べたらわかりそうなもんだが
340デフォルトの名無しさん:2006/04/26(水) 07:54:24
数字キーを押した時など、ひとつの行動で
メッセージが2つ以上来る行動があります。

その場合、1つ目のメッセージが終わった後、
2つ目のメッセージが来るのか、
2つのメッセージが同時、又は1つ目のが終わる前に、
2つ目のが来るのでしょうか。
341デフォルトの名無しさん:2006/04/26(水) 08:07:24
>>338
Insertだから意味的にはあってない?

>>340
キー離したときにもメッセージが来ない?
lKeyDataの30ビット目とか
342340:2006/04/26(水) 08:13:30
ありがとうございます。
WM_KEYUPが来ると思います。
343デフォルトの名無しさん:2006/04/26(水) 08:57:02
>>340
> 2つのメッセージが同時

メッセージ『キュー』ってものを勉強し直せ
344340:2006/04/26(水) 09:45:54
ありがとうございます。
基本的には同時じゃないみたいですね。

ただ、SendMessageを使うと、
前のメッセージを飛び越して終了するとかもあるみたいです。
345デフォルトの名無しさん:2006/04/26(水) 09:55:00
試せば解ると思うんだけどな・・脳内にしかPC無いの?
346デフォルトの名無しさん:2006/04/26(水) 12:35:45
>>345
思わず、職場で、吹き出したー。
347デフォルトの名無しさん:2006/04/26(水) 12:51:44
メッセージキューと
SendMessage PostMessageその他関数の挙動について調べれば
試さなくてもわかるだろ
348340:2006/04/26(水) 13:34:20
脳内にも(ry。ウィンアプリのコールバックは、
ドスのに比べて、実態が掴みにくいというか。

コールバックやGetMessageのみに
来るメッセージがあったりしますし。
349デフォルトの名無しさん:2006/04/26(水) 14:30:59
「猫でも・・・」で勉強しています。
猫のプログラムはVCで作成されたものみたいなのですが、VCがないのです。
ですので
Borlandで試していたら大体、リソーススクリプトのダイアログボックスで失敗します。
リソーススクリプトをどのように変更したら似たような動きになりますか?

同じフォルダにafxres.hを作ることはしました。
350デフォルトの名無しさん:2006/04/26(水) 15:25:07
WS_xxx が定義されていないなら「#include <winresrc.h>」を、FONT部でエラーが出るなら
「FONT 8, "MS Shell Dlg", 400, 0, 0x1」等を「FONT 8, "MS Shell Dlg"」のようにしてみれば?
351デフォルトの名無しさん:2006/04/26(水) 15:54:37
>>350さん、試しました
けど結果は特に変わりません。
==============================================
エラー内容
Borland Resource Compiler Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved.

Error dialog01.rc 81 25: Expecting BEGIN

==============================================
ソースの一部
MYDLG DIALOGEX 0, 0, 186, 90
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "オプション"
FONT 8, "MS Shell Dlg", "MS Shell Dlg" ←81行目
BEGIN
DEFPUSHBUTTON "OK",IDOK,7,69,50,14
PUSHBUTTON "CANCEL",IDCANCEL,129,69,50,14
LTEXT "ダイアログボックスです",IDC_STATIC,39,16,94,8
END
==============================================
352351:2006/04/26(水) 15:56:10
すみません!!
間違えてました。
FONT 8, "MS Shell Dlg"ですね、
353351:2006/04/26(水) 15:58:46
動きました。
ありがとうございますm(_ _m)

あと一つ、
「FONT 8, "MS Shell Dlg", 400, 0, 0x1」
の「400, 0, 0x1」この部分はなんなのでしょうか?
354デフォルトの名無しさん:2006/04/26(水) 16:24:48
ウィンドウハンドルから、クラス名を取得する方法ってありますか?
355354:2006/04/26(水) 16:26:20
クラスメイトは"BUTTON"とか"EDIT"です。
356デフォルトの名無しさん:2006/04/26(水) 16:34:41
俺もそんな学生時代を過ごしたかったな。
357デフォルトの名無しさん:2006/04/26(水) 16:39:54
358355:2006/04/26(水) 17:02:57
?、・・・・・・・・!!!

間違えました!!!
ていうか誤変換です。
訂正↓
クラス名とは"BUTTON"とか"EDIT"のことです。
359デフォルトの名無しさん:2006/04/26(水) 17:05:37
GetClassName
360358:2006/04/26(水) 17:26:53
サンクス!!
361デフォルトの名無しさん:2006/04/26(水) 17:36:08
>>355-356
ワロタ
362デフォルトの名無しさん:2006/04/26(水) 21:15:52
8bitのBitmapを24bitのBitmapに変換したいのですが、
そのようなAPIは存在しますか?
363デフォルトの名無しさん:2006/04/26(水) 21:22:22
メモリDC上でBitBltかませばいいんじゃない?
364デフォルトの名無しさん:2006/04/26(水) 21:35:57
>>347
妹と話していたら、
『きゅぅ』と『ふぃふぉ』の発音が新鮮に聞こえた件について。

忘れてくれ。
365デフォルトの名無しさん:2006/04/26(水) 22:19:15
366デフォルトの名無しさん:2006/04/26(水) 22:34:22
ファイル内の特定の文字列を変換(京都を東京に変換など)するプログラムを作りたいのですが、
EDITクラスを使ったほうが簡単に出来そうなかんじがしました。
実際のところ簡単になるのか教えてください。
367デフォルトの名無しさん:2006/04/26(水) 22:37:22
なりません
368デフォルトの名無しさん:2006/04/26(水) 22:37:30
>>366
人に頼るくらいなら作らなくていいよ。
369デフォルトの名無しさん:2006/04/26(水) 22:38:07
API とは関係ないな
370デフォルトの名無しさん:2006/04/26(水) 22:45:38
変換するだけならGUIじゃなくてもよくね?
371デフォルトの名無しさん:2006/04/26(水) 22:48:22
>>366
むしろ、stringクラス

typedef std::basic_string<TCHAR> _tstring;

// 文字列のsFindをsReplaceの置き換える。
inline _tstring& Replace(_tstring& sExp, const _tstring sFind, const _tstring sReplace)
{
_tstring::size_type n = 0;
_tstring::size_type nCur = 0;

// Replace処理
while ((n = sExp.find(sFind, nCur)) != _tstring::npos){
sExp.replace(n, sFind.size(), sReplace);
nCur = n + sReplace.size();
}

return sExp;
}

詳しくは、ここじゃなくSTLかも
372デフォルトの名無しさん:2006/04/26(水) 22:49:51
むかし、データのソートをしたいためだけにLBS_SORTな
リストボックスにデータをぶち込むやつがいた。
373366:2006/04/26(水) 22:51:02
C言語Onlyなんですよ・・・
char型配列か、mallocの領域確保しか出来ないし・・・
374デフォルトの名無しさん:2006/04/26(水) 22:53:39
確認なんだが
>>366の言ってるEDITクラスってのはウィンドウクラスの事でいいんだよな?
375デフォルトの名無しさん:2006/04/26(水) 22:53:43
C言語のみのくせにWinAPIは使ってよいと言うのはわけがわからない。
376デフォルトの名無しさん:2006/04/26(水) 22:53:54
とにもかくにもスレ違い
377デフォルトの名無しさん:2006/04/26(水) 22:58:08
>>373
ファイル?
ファイル内の?

んでC言語?
378デフォルトの名無しさん:2006/04/26(水) 23:06:28
>>373
つC/C++の宿題を片付けます
http://pc8.2ch.net/test/read.cgi/tech/1143405137/
379デフォルトの名無しさん:2006/04/26(水) 23:42:57
縦横の解像度が違うのプリンターに線幅1mmをピクセル単位(MM_TEXT)で指定する場合、
mm→dot変換は
1mm*(縦解像度/25.4)
それとも
1*mm(横解像度/25.4)
どちらでしょうか?
380デフォルトの名無しさん:2006/04/26(水) 23:47:02
昔、それは気になったけど試してない。
手元にそういうプリンタがあるなら、試すのが一番
381デフォルトの名無しさん:2006/04/26(水) 23:59:26
手元にプリンター無いんです
CreatePenする時だけマッピング変更する事って
可能なんでしょうか?
自分でやってみたけど上手く行きせんでした
382デフォルトの名無しさん:2006/04/27(木) 00:25:09
あるファイルをオープンしようとした時に、他のプロセスが排他オープンしている為に
オープンに失敗したとします。
この時、ファイルを排他オープンしているプロセスの名前やプロセスIDを取得する方法は
あるんでしょうか?
383デフォルトの名無しさん:2006/04/27(木) 01:41:55
ウィンドウのフォントを取得、設定する関数を教えてください。
お願いします。
384デフォルトの名無しさん:2006/04/27(木) 06:19:25
>>383
SendMessage
385デフォルトの名無しさん:2006/04/27(木) 08:17:26
そーいや、コスメティックペンとジオメトリックペンって属性違ってたね。
ジオメトリックペンは座標変換によって幅が変わったと思う。
CreatePenでnWidth=0なら、座標変換に左右されなかったような・・・
386デフォルトの名無しさん:2006/04/27(木) 11:57:26
>>382
あります。
387デフォルトの名無しさん:2006/04/27(木) 12:52:44
ボリュームコントロールのようなスライドバーを実装したいのですが
どのような関数、又は組み合わせで作るのでしょうか
388デフォルトの名無しさん:2006/04/27(木) 12:53:33
CreateWindow
389デフォルトの名無しさん:2006/04/27(木) 12:55:11
>>384
FontSizeとFontは、SendMessageでなにを送ったらいいのですか?
390デフォルトの名無しさん:2006/04/27(木) 12:56:14
メッセージ
391デフォルトの名無しさん:2006/04/27(木) 13:05:06
あたりまえじゃん
392デフォルトの名無しさん:2006/04/27(木) 13:06:03 BE:52406993-
>>372
SH系APIが無かった頃ファイル一覧を取るためだけに不可視リストボックス作ってた俺が来ましたよ。
393387:2006/04/27(木) 13:14:32
>>388
システムクラスにSCROLLBARなんてものがあったんですね・・
ありがとうございました
394デフォルトの名無しさん:2006/04/27(木) 13:18:52
WM_GETFONTを見つけました。
これでしょうか?
SendMessage(hWnd,WM_GETFONT,0,0);ではNULLAが返ってきました
395デフォルトの名無しさん:2006/04/27(木) 13:20:32
掲示板で質問するほどのことかな?
396デフォルトの名無しさん:2006/04/27(木) 13:27:37
ぬらー
397デフォルトの名無しさん:2006/04/27(木) 13:44:12
コントロールが使用しているフォントのハンドルを返します。コントロールがシステム フォントを使用している場合には、 NULLを返します
398デフォルトの名無しさん:2006/04/27(木) 13:49:48
ありがとうございますぬらー
399デフォルトの名無しさん:2006/04/27(木) 14:01:14
MSDN読まない奴は
400デフォルトの名無しさん:2006/04/27(木) 14:28:01
おまいら、ぬらぬら、ゆってんじゃねーよ。
401デフォルトの名無しさん:2006/04/27(木) 15:29:27
リソーススクリプトのダイアログ部分を自作しました。
やり方は、CreateWindowで作るWindowサイズをそのまま当てはめていくというかんじでした。
まぁ、つまり以前作っていたウィンドウと同じ形のダイアログを作ろうとしたというわけです。
そしたら思っていた形より大きくなりました(1.4倍ぐらい?)

どうしたら形が同じようになるの?
402デフォルトの名無しさん:2006/04/27(木) 15:32:58
ちゃんと理解する
403デフォルトの名無しさん:2006/04/27(木) 15:36:07
ダイアログユニットとかいうやつ
404デフォルトの名無しさん:2006/04/27(木) 16:02:50
405デフォルトの名無しさん:2006/04/27(木) 16:11:10
なんか見に行ったら画面真っ白。
ソース見たらなんかそれっぽいこと書いてる。
なにこれ?
406デフォルトの名無しさん:2006/04/27(木) 16:28:39
ダイアログユニットを調べました。
フォント幅の4/1=x座標の単位
フォント幅の8/1=y座標の単位
とありました。

ですがピクセル単位でしていたものをダイアログユニットの単位に変換する方法がわかりません。
ピクセル単位/(フォント幅/4)=ダイアログユニットによる座標
かと思いましたが違いました。
フォント幅をどうにかするのでしょうか?
それとも計算式自体が間違っていますか?

すみません、本当は私パソコン自体が初心者なんです。
ですのでお願いします。
407デフォルトの名無しさん:2006/04/27(木) 16:31:31
>>406
GetDialogBaseUnitsをMSDNでしらべれ
408デフォルトの名無しさん:2006/04/27(木) 16:46:24
UpdateLayeredWindowについてなんですが、
以下のように実装してます。
UpdateLayeredWindow( hwnd, hdcScreen, &pos, &szWindow, hdcMemory,&ptSrc, 0, &bf, ULW_ALPHA );
hwndで指定する、ウインドウハンドルをダミーのウインドウを作って指定していますが、
自分自身のウインドウハンドル(m_hWnd)を指定する事は可能でしょうか?
実際にやってみて、正しく動作しなかったんですが、実装ミスかもしれないと思い、本当のところはどうなのかと思いまして。
如何でしょう?
409デフォルトの名無しさん:2006/04/27(木) 18:07:24
>すみません、本当は私パソコン自体が初心者なんです。
>ですのでお願いします。
本当にそうなら随分と達者だな。
駄菓子菓子、それを言い訳にするくらいならプログラミングなんて止めて置け。
410デフォルトの名無しさん:2006/04/27(木) 18:48:19
おまいら、にらにら、ゆってんじゃねーよ。
中華料理店の料理長か?









ヤベェ・・・なんか背筋がゾクっとした (((((((( ;゚Д゚)))))))
411デフォルトの名無しさん:2006/04/27(木) 19:41:08
CreateWindowはstyleがNULLだと失敗するものですか?
412デフォルトの名無しさん :2006/04/27(木) 21:03:28
教えてください。いままでリンカのエラーはなかったのですが以下の
エラーが出てしまいました
Typing.obj : error LNK2019: 未解決の外部シンボル __imp__timeGetSystemTime@8 が関数 _WndProc@16 で参照されました。
Typing.obj : error LNK2019: 未解決の外部シンボル _TypeStart が関数 _WndProc@16 で参照されました。しまいました。
VC\VCProjectDefaults\corewin_express.vspropsは
AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib" />と
してるのですが、どのlibが足りないもしくは不要なのでしょうか
どなたか教えてください
413デフォルトの名無しさん:2006/04/27(木) 21:28:59
>>412
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")
414387:2006/04/27(木) 22:04:20
何度もすいません
確かにCreateWindowのシステムクラスをSCROLLBARにするとバーは作れるのですが
Sliderコントロールのような物を作りたいのですが、SCROLLBARで色々やってみたのですが無理な感じです・・
どのような方法で作成するのでしょうか・・
415デフォルトの名無しさん:2006/04/27(木) 22:11:16
CreateWindowEx
416デフォルトの名無しさん:2006/04/27(木) 22:11:54
>>414
InitCommonCtontrolsEx しといてから TRACKBAR_CLASS で作る。
ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_190.htm
417412:2006/04/27(木) 23:20:22
>>413さんありがとうございました
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")
で__imp__timeGetSystemTime@8は解消されました
ただ、まだ以下のエラーがでるのですが

Typing.obj : error LNK2019: 未解決の外部シンボル _TypeStart が関数 _WndProc@16 で参照されました。しまいました。

そもそもTypeStart(HWND)という関数は存在するのでしょうか
猫の本見ながら打ってるのですが、ソースにTypeStartを宣言は
しているんですが、そのTypeStart関数の定義がどこにもなく
また別のlibにあるのかと想像しているのですがどこにあるのかがわかりません
なんども申し訳ないですが、教えてください。お願いします。
418デフォルトの名無しさん:2006/04/27(木) 23:37:05
>>417
"key01.cpp"
419387:2006/04/28(金) 00:11:35
>>416
参考URLを見ながらやってみたところ出来ました
ありがとうございました

>>415
CreateWindowExのコモンコントールを使うんですね
416さんのレスでやっとわかりました・・ありがとうございました
420デフォルトの名無しさん:2006/04/28(金) 00:21:36
( ゚д゚)ノ 先生!拡張ボタン(X1、X2)が押された時に送られてくるメッセージを教えてください!
421デフォルトの名無しさん:2006/04/28(金) 00:26:30
>>420
い・・いたい・・・
ひい・・・やめて!!それいじょうは・・・
ひぎいいいい
422デフォルトの名無しさん:2006/04/28(金) 01:05:40
>>421
|д゚)・・・


( ゚д゚)ノ なるほど!先生!WM_XBUTTON〜ですね!ありがとうございます!


っつーかなんでこれググっても35件くらいしかヒットしないのかと
全然見つからんかったよ
423デフォルトの名無しさん:2006/04/28(金) 01:32:07
コントロール上のフォント、たとえばEDITコントロールのフォントの変更ってどうやってやるんですか?
424デフォルトの名無しさん:2006/04/28(金) 02:19:54
SendMessage
425デフォルトの名無しさん:2006/04/28(金) 03:23:25
426412:2006/04/28(金) 03:34:31
>>418さん
ありがとうございました
見落としてました。すんません。
427デフォルトの名無しさん:2006/04/28(金) 12:28:00
チャックボックスをIsDlgButtonCheckedで確認できるけど、逆に設定する時はどうすんの?
428デフォルトの名無しさん:2006/04/28(金) 12:28:44
>>427
チャック・・・
スマソ、チェックでそorz
429デフォルトの名無しさん:2006/04/28(金) 12:31:07
>>427
CheckD(ry
430デフォルトの名無しさん:2006/04/28(金) 12:34:42
431427:2006/04/28(金) 12:44:50
ごめん、ごめんよ。そしてありがと
432デフォルトの名無しさん:2006/04/28(金) 15:23:03
いきなりあれですけど、
GetClientRectってウィンドウの大きさしか返さないじゃないですか。
GetWindowRectはスクリーン座標の左上、右下ですよね。
ということは親ウィンドウの中のボタンを、
親ウィンドウを元にしたクライアント座標で求めるには
GetWindowRectをしてScreenToClientを使ったりするってことですよね?
めんどくさくないでしょうか?

それとも専用の関数があるのでしょうか?
433デフォルトの名無しさん:2006/04/28(金) 15:29:01
慣れろ
434デフォルトの名無しさん:2006/04/28(金) 15:38:02
ということはそういう関数がないってことですかぁ(..、)
それじゃ自分用に作っておいた方が楽ですよね?(関数名何にしょうかな)
435デフォルトの名無しさん:2006/04/28(金) 15:52:55
テケトーにMSDN流し読みしただけだけど
MapWindowPointsって、使えネーかな?
436デフォルトの名無しさん:2006/04/28(金) 16:18:50
やべ、ぱそこんが「カチ、カチ・・・」て鳴り出した。。。
まぁ、それはともかく使い方は
GetWindowRect(hWnd,lprect);
MapWindowPoints(GetParent(hWnd),lprect);
てなかんじじゃないのか?

エラー E2034 'tagRECT *' 型は 'HWND__ *' 型に変換できない(関数 GetParentClientRect(HWND__ *,tagRECT *) )
エラー E2342 パラメータ 'hWndTo' は HWND__ * 型として定義されているので tagRECT * は渡せない(関数 GetParentClientRect(HWND__ *,tagRECT *) )
エラー E2193 呼び出し時のパラメータが足りない:__stdcall MapWindowPoints(HWND__ *,HWND__ *,tagPOINT *,unsigned int)(関数 GetParentClientRect(HWND__ *,tagRECT *) )
437デフォルトの名無しさん:2006/04/28(金) 16:42:52
すいません、よく見たらhWndではなくcWndて書いてました。

それとブルスクまでイっちゃたのでこのパソコン控えます。
みなさん、今まで本当にありがとうございました。。。

            ∧_∧
           ( ・∀・)
   >>私   /⊂    つ
   ↓  /   ,(__つ
⊂⌒~((⊃*。Д。) し'
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄


            ∧_∧
           ( ・∀・)
   >>1    /⊂    つ
   ↓  /   ,(__つ
⊂⌒~((⊃*。Д。) し'
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
438デフォルトの名無しさん:2006/04/28(金) 16:43:44
ゴメン、下の図はなし、消し忘れ。
それじゃさようなら
439デフォルトの名無しさん:2006/04/28(金) 16:57:26
ブルスク?

ブルマとスク水か?
440デフォルトの名無しさん:2006/04/28(金) 17:46:43
>>432
> GetClientRectってウィンドウの大きさしか返さないじゃないですか。

ウィンドウの大きさは返さないがな
441デフォルトの名無しさん:2006/04/28(金) 18:34:38
まぁまぁ、故人をいたぶるのはよしましょうや。
それはともかくスク水の上からブルマですか。
どこがいいのかわかりません。
マニアック過ぎです。
ついていけません。
442デフォルトの名無しさん:2006/04/28(金) 18:58:34
ブルースクリーン!!!11
443デフォルトの名無しさん:2006/04/28(金) 19:18:27
ガタガタ .γ"⌒ヽ,
     .んヘ/V'ヘ
    ((( 'ヘ/V'ヘ)))
      ゝ、._,ノ.


パカッ  .γ"⌒ヽ,
     .んヘ/V'ヘ
     (*‘ω‘ *) ちんぽっぽ!
     ( 'ヘ/V'ヘ|)
      ゝ、._,ノ.
444デフォルトの名無しさん:2006/04/28(金) 19:23:51
>>439
はいはい、お菓子系お菓子系。
445デフォルトの名無しさん:2006/04/29(土) 00:53:02
ブルスコと言えばファービーだろ。
446デフォルトの名無しさん:2006/04/29(土) 03:16:08
>>443
kawaii!!
447デフォルトの名無しさん:2006/04/29(土) 06:07:50
フルアセンブラでプログラミングしているのですが、プログラムのエントリポイントの関数仕様はどうなっているのでしょうか?

DWORD __cdecl main(void); // (Cスタイル)

でいいんでしょうか?

また、この仕様を書いた文書はどこかにあるのでしょうか?
448デフォルトの名無しさん:2006/04/29(土) 07:11:32
>>447
よくエントリポイントのように言われている main や WinMain はスタートアップから呼ばれるコールバックに過ぎない
スタートアップを使わない場合は link.exe の /entry でエントリポイントを定義し、 /subsystem で GUI か否かを選択する
449デフォルトの名無しさん:2006/04/29(土) 09:15:26
ここapiスレだけど
450デフォルトの名無しさん:2006/04/29(土) 09:26:39
どうしたって関係あるだろ
451デフォルトの名無しさん:2006/04/29(土) 10:06:56
MSVC4.0の頃、プロジェクトをコンソールベースで作ったとき、
無理やり>>448な作業をしたことを思い出した。
452デフォルトの名無しさん:2006/04/29(土) 11:26:42
pathが通らない
と同じで定期的に質問がくるテーマですな
453 ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ :2006/04/29(土) 12:04:38
.    ∧_∧
    (´・ω・)  
   /     \
__| |     | |_
||\          \                           / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
||\\          \                         | ( ´д)ヒソ(´д`)ヒソ(д` )  >
||  \\          \                        \__________/
.    \\          \ 
.     \\          \
.       \\          \   が ら 〜 ん
.         \\          \
.          \\          \
           \| ̄ ̄ ̄ ̄ ̄ ̄ ̄ |
            || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
454デフォルトの名無しさん:2006/04/29(土) 12:46:38
.    ∧_∧
    (´・ω・)  
   /     \
__| |     | |_
||\          \
||\\          \
||  \\          \
.    \\          \ 
.     \\   [ ゚д゚]y-一~~~~
.       \\ ノ[ ヘ ヘ     \
.         \\          \
.          \\          \
           \| ̄ ̄ ̄ ̄ ̄ ̄ ̄ |
            || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
455デフォルトの名無しさん:2006/04/29(土) 15:15:50
タイトルバーをクリックした時にシェード(折りたたみ)をするように
書こうとしているのですがうまくいきません。

ウィンドウスタイルからWS_THICKFRAMEを外し、
MoveWindowで高さをタイトルバー以下にしても
タイトルバーの下にほんの少しクライアント領域ができてしまいます。
AdjustWindowRect関数でクライアント領域を0にしてみても駄目でした。

どのようにして実装すればよいでしょうか?助言よろしくお願いします。
456デフォルトの名無しさん:2006/04/29(土) 15:33:25
>>432のいってたことが気になったので、
自作で親ウィンドウをもとにした、
クライアントウィンドウの位置を求める関数を作ってみたのですがとりあえず見てください。

BOOL GetParentClientRect(HWND hWnd,LPRECT lprect)
{
RECT ParentRect;
RECT Rect;
if(GetWindowRect(GetParent(hWnd),&ParentRect) == 0) return FALSE;
if(GetWindowRect(hWnd,&Rect) == 0) return FALSE;

lprect->left = Rect.left - ParentRect.left;
lprect->top = Rect.top - ParentRect.top;
lprect->right = lprect->left + Rect.right - Rect.left;
lprect->bottom = lprect->top + Rect.bottom - Rect.top;
return TRUE;
}
としたらタイトルバーの幅を考慮していなかったので、y座標がタイトルバーの分だけずれてしまいます。
ですのでタイトルバーがある場合、その分を減らす処理をどうするのかと考えています。

なにかあったら教えてください。
この関数が明らかに間違っている場合は「あんたバカあ!」とでも言ってください。
457デフォルトの名無しさん:2006/04/29(土) 15:36:19
あんたバカあ!
458デフォルトの名無しさん:2006/04/29(土) 15:42:43
!(TロT)うあーん
ほんとに言いやがったぁ(泣)
459デフォルトの名無しさん:2006/04/29(土) 15:49:44
なんかカワイイ
460デフォルトの名無しさん:2006/04/29(土) 16:02:35
や、やめてください!
そんないやらしい目つきで見るのはっ!
461デフォルトの名無しさん:2006/04/29(土) 16:14:08
よいではないか
462デフォルトの名無しさん:2006/04/29(土) 16:48:37
というよりわたし、男なんですけど・・・
463456:2006/04/29(土) 16:53:03
もしかして無理なの?
464デフォルトの名無しさん:2006/04/29(土) 17:16:34
BOOL GetParentClientRect(HWND hWnd,LPRECT lprect)
{
RECT rect;
POINT pos;

GetWindowRect(hWnd, &rect);

pos.x = rect.left;
pos.y = rect.top;
ScreenToClient(GetParent(hWnd), &pos);

lprect->left = pos.x;
lprect->top = pos.y;
lprect->right = pos.x + rect.right - rect.left;
lprect->bottom = pos.y + rect.bottom - rect.top;
return TRUE;
}
465デフォルトの名無しさん:2006/04/29(土) 17:20:54
BOOL GetParentClientRect(HWND hWnd,LPRECT lprect)
{
POINT pos = {0};

GetWindowRect(hWnd, lprect);
ClientToScreen(GetParent(hWnd), &pos);
OffsetRect(lprect, -pos.x, -pos.y);
return TRUE;
}
466デフォルトの名無しさん:2006/04/29(土) 17:46:42
削除権限のないレジストリを削除するプログラムを組みたいのですが
可能でしょうか?
467デフォルトの名無しさん:2006/04/29(土) 17:49:05
削除する権限を得る
468456:2006/04/29(土) 18:08:15
>>465
マジ(・∀・)ゴッド!
まさかOffsetRectなるものがあったとは。。。
469デフォルトの名無しさん:2006/04/29(土) 19:26:03
>>466
LogonUserとかImpersonateLoggedOnUserとか何か
そのへんをうまく使ってがんばる
470デフォルトの名無しさん:2006/04/29(土) 20:05:05
>>468
OffsetRectは本質ではないんだが
471デフォルトの名無しさん:2006/04/30(日) 03:06:08
BorlandC++にて、
サイズ変更できるボタンを作るため、サブクラス化しました。

内容は、
WM_LBUTTONDOWN:
ReleaseCapture();
SendMessage(hWnd,WM_SYSCOMMAND,SC_SIZE | 7,0); //ウィンドウのサイズ(右下)が変更できる
return0;
です。

それで、サイズ変更は出来るようになりました。
それはいいのですが、なぜかサイズが一定のサイズまでしか下げれません(right=110,bottom=25)。
試しに、EDITでも同じようにサイズ変更出来るようにしました。
こちらはそういったことは起きませんでした。
この違いは何なのでしょうか?
472デフォルトの名無しさん:2006/04/30(日) 03:55:32
はじめまして
こんな感じでグローバルフックの対象を切り替えたいのですが
うまくいきません なんで?
もちろんDLL内で行って 初めの一回は成功します
ちょっと 困ってます・・(この時間 まだ終わらん・・・)
UnhookWindowsHookEx(hSysHook);
DWORD dwThreadId = GetWindowThreadProcessId(hwnd, NULL);
hSysHook = SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)SysCallWndProc, hDllInst, dwThreadId);

473デフォルトの名無しさん:2006/04/30(日) 04:33:07
WindowsXPでユーザーの簡易切り替えをするとします。
Aユーザが実行中のアプリのウィンドウに対してBユーザのアプリから、
たとえばハンドルを取得してPostMessageを投げるとか可能でしょうか?
FindWindowできないのは確認しましたが…。
474・∀・)っ-○◎● ◆toBASh.... :2006/04/30(日) 04:40:01
RPC使う方法しか思い浮かばない
475デフォルトの名無しさん:2006/04/30(日) 07:51:48
CreateProcess で CUI プログラムを呼び出す時、
仮想端末を出さずに暗黙的に実行するには、どうしたら良いのでしょうか?
476デフォルトの名無しさん:2006/04/30(日) 08:21:07
>>473
デスクトップが異なるとメッセージはとどかない。はず。
477デフォルトの名無しさん:2006/04/30(日) 09:17:05
>>475
適切な引き数を設定する。
478デフォルトの名無しさん:2006/04/30(日) 12:30:01
>>476
やはりダメですか。
>>474
私へ回答いただいたんですよね。RPC、調べてみます。使ったこと無いですが…。
479デフォルトの名無しさん:2006/04/30(日) 13:01:34
>>477
もう少し詳しくお願い orz
480デフォルトの名無しさん:2006/04/30(日) 13:35:56
// >>479
// 起動したら後は野となれ山となれ
bool CUtility::execProcess(const char * cmd)
{
if (cmd == NULL || cmd[0] == '\0') {
return false;
}
PROCESS_INFORMATION pi;
STARTUPINFO sui = {sizeof(sui),};
if (!CreateProcess(NULL, const_cast<char *>(cmd), NULL, NULL, false,
NORMAL_PRIORITY_CLASS | DETACHED_PROCESS,
NULL, NULL, & sui, & pi)) {
return false;
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return true;
}
481デフォルトの名無しさん:2006/04/30(日) 13:41:28
>>479
これのことでは?
http://support.microsoft.com/kb/409393
普通に cmd.exe を起動すると、コマンドウィンドウが表示されてしまいます。この現象を回避するには
482デフォルトの名無しさん:2006/04/30(日) 14:12:53
>>478
プロセス間通信がしたいだけなら
pipe,named pipe,mailslot
あたりの方が簡単じゃなかろうか。良く知らんねんけどね。
あとはCOMの世界に走るとか。
483デフォルトの名無しさん:2006/04/30(日) 14:15:59
org 100H
484デフォルトの名無しさん:2006/04/30(日) 14:16:54
こんにちは、文字の書き方について教えていただきたいのですが、

フォント指定した文字列をあるポイントから右寄せで表示したいのです。
自作した、四角形がありその中に右寄せで文字を表示したいのです。
なにか、関数とかあるのでしょうか。それとも計算して、書いていくのでしょうか。
485デフォルトの名無しさん:2006/04/30(日) 14:39:50
計算して書くのが一番悩みが少なくて済む。
486デフォルトの名無しさん:2006/04/30(日) 14:47:04
>484です
>485さんありがとございます。そうします。
487デフォルトの名無しさん:2006/04/30(日) 15:20:47
>>484
ちなみにAPI関数でやるとしたら、たとえばDrawTextにDT_RIGHTを指定すればよい。
488デフォルトの名無しさん:2006/04/30(日) 17:48:28
ttp://www.vector.co.jp/soft/win95/util/se375705.html
このようなソフトウェアをつくってみたいと考えているのですが
どのように実装されているのか見当がつきません。

timeGetTime()あたりをHookしているのではないかと思っているのですが。
489デフォルトの名無しさん:2006/04/30(日) 17:56:07
見当がつかない物を作らない方がいいよ。
490デフォルトの名無しさん:2006/04/30(日) 18:01:53
>>488
わざわざ新しく作らないでそれを使えばいいじゃん
491デフォルトの名無しさん:2006/04/30(日) 18:10:46
つ 逆アセンブラ
492デフォルトの名無しさん:2006/04/30(日) 18:38:46
>>490
実行中のすべてのプロセスに対して
速度変更ができるようにしたいからです。
493デフォルトの名無しさん:2006/04/30(日) 18:51:20
かなりハードよりな分野だから
自分で解析できないレベルなら無理だと思うよ
api一発叩けばできるレベルならみんなやってるだろうし
494デフォルトの名無しさん:2006/04/30(日) 18:58:06
HOOKするならVS限定だけどspy++大活躍だな
495デフォルトの名無しさん:2006/04/30(日) 19:01:52
>>493
ご助言、ありがとうございます。
ハードよりな分野とは知りませんでした。
この手のソフトウェアは大抵hook.dllがありましたので
APIフックで実装可能と思っていましたorz
496473:2006/04/30(日) 21:27:32
>>482
いま作ってみましたが、mailslotはダメでした。
うーん…
497475:2006/04/30(日) 22:45:39
>>480, 481
ありがとうございます
頑張って試してみます m(_ _)m
498デフォルトの名無しさん:2006/04/30(日) 22:57:50
>>487さんありがとうございます。
DrawText()あるんですね。
いろいろ書いてみます。最初なので、書いて試していろいろして見ます。
ありがとうございました。
499デフォルトの名無しさん:2006/05/01(月) 08:29:07
不安で夜も眠れないのでよろしくお願いします。

開発環境: w2k + VC++6.0

CreateWaitableTimer() の使用を考えております。
<winbase.h>をインクルードししこしこ使おうと考えるも
「そんなもんねーよ」って怒られちゃいます。

原因を探ると、os対応の問題のようで
#define _WIN32_WINNT 0x0400
マクロぶち込んでやると、コンパイルも通りとりあえずは動くのは
動くのですが。

API自体が、2k以上対応って話なのでこれで問題ないような気もするのですが
ぶっちゃけ対応過ぎるような気がして。
対処方法としてこれでよろしいのでしょうか?

有識者の意見をいただければ幸いです。
500デフォルトの名無しさん:2006/05/01(月) 09:03:51
なにが問題なのかが分からないのだが
501デフォルトの名無しさん:2006/05/01(月) 09:05:52
ぶっちゃけ対応って何?
最近の日本語はおぢさんには難しい。
502デフォルトの名無しさん:2006/05/01(月) 09:15:32
CreateWaitableTimerA()にしてもだめかい?
503デフォルトの名無しさん:2006/05/01(月) 09:48:02
MSDNには
>Requires Windows Vista, Windows XP, Windows 2000 Professional, Windows NT Workstation 4.0, Windows Me, or Windows 98.
って書いてあるけどなあ。
504デフォルトの名無しさん:2006/05/01(月) 11:28:47
>>495
APIHookでできる
505デフォルトの名無しさん:2006/05/01(月) 12:46:26
>>499
最悪、LoadLibraryを用いてGetProcAddressで呼んでみる?
・・・など、いろいろあるお。

506デフォルトの名無しさん:2006/05/01(月) 12:54:02
ねぇ、ここにいる先輩方は、
日本語配列(109)キーボード?それとも、英語配列(101)キーボード?

教えて、みんな。
507デフォルトの名無しさん:2006/05/01(月) 12:56:59
101と109かよ!
508デフォルトの名無しさん:2006/05/01(月) 12:58:47
スレ違い
509デフォルトの名無しさん:2006/05/01(月) 13:50:02
>>499 です。
色々返答有難う御座いました。

>>503
オンラインのMSDN見ると確かに2k前に対応してると書いてますね。
HDDに入ってる2003、4月リリース版だとダメって書いてるのに!

>>502
>>505
色々手はあるようですね。
教えてもらった情報元にもう一度考え直して見ます。
CreateWaitableTimerA() は無いって言われます(調べ直ししてみます)。

他の作業にかまけて放置して後でハマるありがちなパターンだけは避けるよう
心がけます。ありがとう御座いました。
510デフォルトの名無しさん:2006/05/01(月) 13:55:18
>>499 です。
すいません。
サービスパックさえ当たってませんでした。
人に聞く前に環境整えからですね。
511506:2006/05/01(月) 14:27:51
おまいら、新スレたてっぞ、こたえんかい!
512デフォルトの名無しさん:2006/05/01(月) 14:53:52
>>511=>>506
スレ違い
513デフォルトの名無しさん:2006/05/01(月) 14:55:52
514デフォルトの名無しさん:2006/05/01(月) 15:11:43
ウィンドウの外枠を外す方法があった気がした。

CreateWindowExの引数弄るだけで出来る?
他になにかAPIが必要?

教えておくれ
515デフォルトの名無しさん:2006/05/01(月) 15:33:11
>>499
自分でヘッダ見ろよ。
winbase.hのCreateWaitableTimerA/Wの宣言の直前にこれがあるだろ。
#if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
516デフォルトの名無しさん:2006/05/01(月) 17:32:02
>>514
スタイルのボーダー指定をしなきゃいいだけジャマイカ?
517514:2006/05/01(月) 19:29:59
>>516
WS_SYSMENU だけでも表示される件
518デフォルトの名無しさん:2006/05/01(月) 19:32:51
そりゃそうだ
519デフォルトの名無しさん:2006/05/01(月) 19:55:13
>>504
hookでできました。
ピンボールが2倍速になって難しくなりました。
520デフォルトの名無しさん:2006/05/01(月) 20:54:09
>>519
オメ
521デフォルトの名無しさん:2006/05/01(月) 21:00:23
>>519
bmaxと入力すればボールが減らなくなる
522デフォルトの名無しさん:2006/05/01(月) 21:22:11
>>519
ソースちょうだい
523デフォルトの名無しさん:2006/05/01(月) 21:26:16
エリクサーちょうだい
524デフォルトの名無しさん:2006/05/01(月) 21:57:27
乙女のキッスクレ
525デフォルトの名無しさん:2006/05/01(月) 21:57:59
どうやったのかだけでも
526デフォルトの名無しさん:2006/05/01(月) 22:26:24
散々偉そうに意味のないレス書き散らしといて
今度はソースよこせかよwwww
>>525
見当がつかない物を見てもしょうがないよ。
527デフォルトの名無しさん:2006/05/02(火) 03:33:42
質問があります。
Cで作ったプログラムにインストーラをつけるにはどのようにしたらいいのでしょうか?
VisualBasicとかならやり方はみた気がするのですが、Cでは見たことがないような・・・
100%見逃している感がありますが、参考になるような分かりやすいサイトがあれば教えてください。
お願いします
528デフォルトの名無しさん:2006/05/02(火) 03:36:58
まあ取りあえずスレ違いだ
529デフォルトの名無しさん:2006/05/02(火) 03:43:23
>>528
えっ?
そうなの?
んじゃ、どこで聞いたらいいの?これ?
530デフォルトの名無しさん:2006/05/02(火) 06:15:32
>>529
Vector眺めて来い
531514:2006/05/02(火) 11:22:32
age

ってだれか分からんですかー
532デフォルトの名無しさん:2006/05/02(火) 11:38:31
>>531
スタイルのボーダー指定をしなきゃいいだけジャマイカ?
533デフォルトの名無しさん:2006/05/02(火) 11:41:25
>>531
よく知らんけど、どういう風にやってうまくいってないのか
コード晒してみたら?
534デフォルトの名無しさん:2006/05/02(火) 12:33:48
ExtractIconでアイコンの数が取得できますが、それぞれのアイコンのリソースIDはどうやったら分かりますか?
535デフォルトの名無しさん:2006/05/02(火) 12:47:13
>>534
EnumResourceTypesじゃダメ?
いぢめる?
536デフォルトの名無しさん:2006/05/02(火) 13:04:02
スレ違いで申し訳ない。

みなさん、GIFファイルをLockBitsしてポインタでゴリゴリするとき、
画像内の任意のピクセルが黒かどうかを確認するときどうします?
ただし、GIFファイルは256色で保存されており、
GIFファイルのパレットには、ff000000がたくさんエントリーされているものとする。

みんなさん、よろしく!
537536:2006/05/02(火) 13:05:29
private bool isBlack(Color color)
{
if (color.R == 0 && color.G == 0 && color.B == 0)
{
return true;
}
else
{
return false;
}
}

こんなのつくって、
if (!isBlack(bitmap1.Palette.Entries[*p1]))
こんなことすると、ものすごく遅いんです。
538536:2006/05/02(火) 13:13:40
http://i-bbs.sijex.net/imageDisp.jsp?id=ups2&file=1146543159153o.jpg
カラーパレットを表示させました。
黒がいっぱい・・・。
539デフォルトの名無しさん:2006/05/02(火) 13:18:35
>>536
そんなときは私はAPIを使わず、適当なライブラリで読み込んだ画像をメモリ上で検索するが。
具体的な方法はスレ違いなんで割愛。
つーか、画像の大きさにもよるけど24ビット画像に変換した方が楽じゃね?
540デフォルトの名無しさん:2006/05/02(火) 13:25:42
つかおまい前にも来てたが、スレ違いだっつーの
541536:2006/05/02(火) 13:27:08
>>539
もうちょい初心者にもわかりやすくお願いします・・・。

(ちなみに、GetPixelとかそういう遅い関数は遠慮したいです)

だいたい3000*3000ピクセル程度の画像を扱っています。
542536:2006/05/02(火) 13:28:14
>>540
だって、ここのスレにいる方々が2chで一番知識豊富なんですもの・・・。
ほんとにごめんなさい。おねがいします。
543536:2006/05/02(火) 13:30:18
GIFファイルを24bit配列にする方法ってあるのですか?
つまり、byte mybyte=new byte[bmp.Height*bmp.Width*3];
っていう配列を用意してってことですよね??
ごめんなさい、ほんとあほで。
544デフォルトの名無しさん:2006/05/02(火) 13:31:46
>>541
Palette.Entries[n]ってのを取ってきて isBlack で判定するのが遅いと感じたなら、
最初に0〜255までの各パレット値について、
bool _isBlack[] = new bool[256]; ってのに全部の結果を入れとけばいいでそ?
その関数を900万回も呼ぶより、256回だけ呼んで、あとは配列の参照の方が
速そうだな、とか思うデソ?

こういうことは Win32 API とも C# とも GDI+ とも関係なく、普段からちゃんとものを
考えて暮らしていればごく普通に考えればわかる。

だからスレ違いだといわれてるわけです。
でもまぁ懲りずにまた何か質問あったらここで聞いても良いと思う。
プログラミングの常識みたいなものも、そのうちだんだん解ってくるから頑張って。
545531:2006/05/02(火) 13:32:54
>>532
WS_SYSMENU だけでも表示される件
ボーダー指定とかナニソレ

>>533
うまくいってないとかじゃなくて、そう言う方法があったと思うんだけどーって話。

もう一回書く

 ウィンドウの外枠を外す方法があった気がした。

 CreateWindowExの引数弄るだけで出来る?
 他になにかAPIが必要?

 教えておくれ
546536:2006/05/02(火) 13:37:44
>>544
どうもありがそ。よく理解できました。

bool _isBlack[] = new bool[256]; ってのに全部の結果を入れとけばいいでそ?

確かにこれははやそうです!
ひょっとしたら、もっともっとスマートな所謂定石の方法が
他にあるんじゃないかとも感じたのです。
547デフォルトの名無しさん:2006/05/02(火) 13:53:57
だから初心者スレ辺りでやれよ。
そうしたらコードの添削もしてやれるしこっちのコードも提示できるから。
548536:2006/05/02(火) 13:57:22
>>547
仰るとおりです。今度からそちらで質問させていたらきます。
どうもありがとうございました。


byte[] isBlack= new byte[Byte.MaxValue];
byte[] isWhite = new byte[Byte.MaxValue];
for (int i = 0; i < 256; i++)
{
isBlack[i] = false;
isWhite[i] = false;
Color color = bitmap1.Palette.Entries[i];
if (color.R == 0 && color.G == 0 && color.B == 0)
{
isBlack[i] = true;
}
if (color.R == 255 && color.G == 255 && color.B == 255)
{
isWhite[i] = true;
}
}
549デフォルトの名無しさん:2006/05/02(火) 13:59:34
質問です。
タブコントロールを扱っているのですが
タブコントロールが可視状態の時に
SendMessage(
 GetDlgItem(hWnd, IDC_TAB),
 TCM_DELETEITEM,
 (WPARAM)1,
 (LPARAM)0
);
とすると、タブの上にのっているコントロールが全て消えてしまいます。
SPY+でメッセージを見る限り
TCM_DELETEITEMが処理されるとWM_ERASEBKGNDが処理されるようです。

「なら、その後にWM_PAINTを送ればいいかな」
と思いTCM_DELETEITEMをSendした次の行で、WM_PAINTをSendしてみましたが状況は改善されず。

何故か
TCM_DELETEITEM
WM_PAINT
WM_ERASEBKGND
という順番で処理されてしまいます。

タブコントロールを動的に扱う時は、どうやってこのWM_ERASEBKGND問題を回避するのでしょうか。
550デフォルトの名無しさん:2006/05/02(火) 14:19:58
WM_PAINTはアプリケーションが送る物でないと(ry
551デフォルトの名無しさん:2006/05/02(火) 14:20:38
InvalidateRect(ry
552デフォルトの名無しさん:2006/05/02(火) 14:23:32
>>550-551
ありがとうございました。
WM_PAINTを送るかわりにInvalidateRectを使ったら即解決しました。

Javaから帰還して「ん、再描画はなんだっけ。repaint?違うな。UpdateWindowだっけ?」
とドツボにはまってましたorz
553デフォルトの名無しさん :2006/05/02(火) 14:30:37
猫でもわかるWINDOWSプログラミングを見ながら勉強しつつ
使う関数の意味合いや使った関数の意味をあいまいな説明
なままのでいらいらして、とりあえずWIN32APIオフィシャルリファレン
スを買った程度のレベルの猫以下の自分から質問さしてください。

・SelectObject()で選んだObjectは必ずDeleateObject()しない
 といけないんでしょうか?大きなプログラムになるともったいない
 ので、Create用に宣言した物を使い回す為にDeleateObject
 するんでしょうか?
・リソースはみなさん手描きなんでしょうか?
・LOWORD()等のマクロがあるという事を知るにはどうやって調べて
 いるんでしょうか?
・今VS2005SEを使ってるんですが、ソースの文字列を全部
 TEXT()で囲んでるんですが、VC++6だとだめでした。
 結局は、場所に応じてL""にしたりすべきなのでしょうか?

くずみたいな質問すいません。勉強にもどります。
554デフォルトの名無しさん:2006/05/02(火) 15:12:56
>>553
First, you d beter recognize ur words r unclear
555デフォルトの名無しさん:2006/05/02(火) 15:27:39
>>535
ありがとうございます。EnumResourceNamesというのでいけました。
556545:2006/05/02(火) 16:25:36
WS_POPUP だけにしたら出来ますたorz

WS_POPUPが無い時点でタイトルバー、外枠とかは絶対ついてくるのね・・・
勉強になりますた
557デフォルトの名無しさん:2006/05/02(火) 16:46:19
VMWare + Windows98SE で↓な結果が出たんですけど仕様ですかね?


::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
(ry
case TM_DESTROY:
  PostQuitMessage(-1);
  break;
case TM_QUIT:
  msg.wParam; // 0x0000ffff が入ってる
558デフォルトの名無しさん:2006/05/02(火) 17:01:09
>>556
>517->518に答えがあるのに。
559デフォルトの名無しさん:2006/05/02(火) 17:01:53
>>557
何か問題でも?
560デフォルトの名無しさん:2006/05/02(火) 17:16:19
>>553
●SelectObject()で選んだObjectは必ずDeleateObject()しない(ry
  ちょっと質問の意味がわかりませんが、GDIオブジェクトを生成するCreate〜に対し、
 GDIオブジェクトを破棄するのがDeleteObjectではないでしょうか?
  SelectObjectはデバイスコンテキストと、GDIオブジェクトを関連付けているのではないでしょうか?
●リソースはみなさん手描きなんでしょうか(ry
  アイコンとかは、ツールを利用した上で手書きじゃないでしょうか?
  私はフォトショップで加工して手書き補正です。
●LOWORD()等のマクロがあるという事を知るにはどうやって調べて(ry
  リファレンスを読む
  ファイルから検索で#defineを検索する。
  人に教えてもらう。
  神の啓示。
●今VS2005SEを使ってるんですが、ソースの文字列を全部(ry
汎用データマッピングを利用するには、
 #include <tchar.h>
 #include <clocale>// 必要に応じて
をソースの頭の記述しておく、
これにより汎用データマッピング用の関数を利用できる。
(実際はマクロ)
ex) 汎用データマッピング用書式付出力
_tprintf(_T("ゴルァ World!\n"));
これが、マルチ文字環境だと
printf("ゴルァ World!\n");
ワイド文字環境だと
wprintf(L"ゴルァ World!\n");
なる。
561デフォルトの名無しさん:2006/05/02(火) 17:32:21
>>556
WS_オーバーラップトだったかそのへんが0ってことで
562デフォルトの名無しさん:2006/05/02(火) 17:41:56
>>559
XPでは 0xffffffff なのに問題無いとでも?
563556:2006/05/02(火) 17:44:00
>>558
ん?答えなんかあった?

>>561
そういえばそうだった。
てことはつまり WS_POPUP は WS_OVERLAPPED じゃないってこと?
いやその辺りは自分で調べてみます。

どうもですた
564デフォルトの名無しさん:2006/05/02(火) 18:29:46
>>562
終了ステータスは32ビットってどっかに書いてあった?
単に16ビットしか有効じゃないだけじゃないの?

>>563
WS_SYSMENUを指定したら枠がつく>そりゃそうだ

WS_SYSMENUを指定しない(≒WS_POPUPでも指定する)
565デフォルトの名無しさん :2006/05/02(火) 18:29:54
>>560
レスありがとうございます
まだ何がわかってて何がわかってないかさえ分かってない
レベルだとわかりました。
とりあえず、もっとゴリゴリ書いて経験積みます。
566デフォルトの名無しさん:2006/05/02(火) 18:43:12
デバイスコンテキストをバックバッファとして使いたいのですが

char * str = "foo";
HDC hdc2 = GetDC(hWnd);
TextOut(hdc2,x,y,(LPCSTR)str,strlen(str));

ってことをやったとして、これを画面に出力したいときは
BitBlt 使う以外に方法ありますか?
的外れな質問だったらスマソ
567デフォルトの名無しさん:2006/05/02(火) 18:52:22
まとはずれです。
メモリDCとかで調べてみてください。
568デフォルトの名無しさん:2006/05/02(火) 19:01:31
>>567
ありがとうございます
569557:2006/05/02(火) 19:09:21
>>564
> 終了ステータスは32ビットってどっかに書いてあった?
> 単に16ビットしか有効じゃないだけじゃないの?

WinMainより
> WM_QUIT メッセージの wParam パラメータで受け取った値を返さなければなりません。


なるほど納得した
サンクス
570デフォルトの名無しさん:2006/05/02(火) 19:38:14
>>564
> 終了ステータスは32ビットってどっかに書いてあった?

でも、

> VOID PostQuitMessage(int nExitCode);
> nExitCode
> この値は、WM_QUIT メッセージの wParam パラメータとして使われます。

intもWPARAMも32ビットなのに、16ビットしか有効じゃないってのは・・・
571デフォルトの名無しさん:2006/05/02(火) 20:08:38
MSDNのexit()には、
>exit 呼び出しおよび _exit 呼び出しは値を返しませんが、待機中の呼び出しプロセスがある場合は、
>現在の呼び出しプロセスが終了した後で、待機中の呼び出しプロセスが status の下位バイトを利用できます。
>status の値は、オペレーティング システムのバッチ コマンド ERRORLEVEL を使用して、2 種類の定数で表すことができます。
>つまり、定数 EXIT_SUCCESS を値 0、定数 EXIT_FAILURE を値 1 として表します。
と書いてあるんだよね。
これだけ見ると、16ビットどころか8ビットしか使えない。
572デフォルトの名無しさん:2006/05/02(火) 20:26:19
GetExitCodeProcess関数の説明では、
 甲 - ExitProcess関数またはTerminateProcess関数の中で指定された終了コード
 乙 - プロセスのmain関数またはWinMain関数からの戻り値
 丙 - 処理されない例外のためにプロセスが終了した場合は、 その例外コード
573デフォルトの名無しさん:2006/05/02(火) 21:26:00
>>570
Win 9xは16ビット時代を引きずっているからそんなもんだろ。

>>571
どこかでプロセス内の最後のスレッドがExitThreadしたら、
そのスレッドの終了コードがプロセスの終了コードになると書いてあった覚えがある。
574デフォルトの名無しさん:2006/05/02(火) 22:09:35
こんばんは、
HFONT の fnWeight を取得するには、どうすればいいのでしょうか教えてください。
テキストの中を均等割付したいのですが、そう見せかけるだけで、
四角の枠の中に均等に文字が入るように、計算しようと思いす。
ので、フォントの幅で、計算すると出てくるかなと思いまして。
575デフォルトの名無しさん:2006/05/02(火) 22:10:55
>>574
GetObject
576デフォルトの名無しさん:2006/05/02(火) 22:13:09
一文字ずつ幅を計算していけばいい。
577デフォルトの名無しさん:2006/05/02(火) 22:14:06
>>574
fnWeight ってのが何なのかわからないけど、
フォントの幅・・というのが文字の幅のことなら、
文字によって違うから GetTextExtentExPoint とか
GetCharacterPlacement とか使ったほうが良い。
578デフォルトの名無しさん:2006/05/02(火) 22:27:10
>>574
均等割り付けと言えばSetTextCharacterExtraやSetTextJustificationもお忘れなく、一応ね。
579デフォルトの名無しさん :2006/05/02(火) 23:09:18
すいません、教えてください
下の定義したDlgPrc()でリンクのエラー
「_MyDlgProc@16 が関数 _WndProc@16 で参照されました」
がでたのですが、何のライブラリを
#pragma comment(lib, "・・・")
で読み込めば良いのでしょうか
DefDlgProcを返そうと思いましたが返る値がLRESULTなので
わけがからなくなりました。
どなたか教えてください

BOOL CALLBACK MyDlgPrc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
   static HWND hParent;
    switch(msg){
       case WM_INITDIALOG:
         return TRUE;
       case WM_COMMAND:
            switch(LOWORD(wp)){
               case IDOK:
                 ・
                 ・
                 ・
case IDC_CLOSE:
DestroyWindow(hDlg);
return TRUE;
}
return FALSE;
}
return FALSE;
}
580デフォルトの名無しさん:2006/05/02(火) 23:12:48
>>574です
>>575-578さんありがとうございます。
今いろいろ教えていただいたのを調べていますので、
また、結果かきます。ありがとうございました。
581デフォルトの名無しさん:2006/05/02(火) 23:16:22
キティ警報>>579
582デフォルトの名無しさん:2006/05/02(火) 23:39:18
>>579
MyDlgPrcをMyDlgProcに直せ。
583デフォルトの名無しさん:2006/05/03(水) 00:00:24
sendmessageにてマウスを上下にしか移動出来なくすることって出来ますか?
584579:2006/05/03(水) 00:03:11
>>582さん
ありがとうございましった
アホでした
585デフォルトの名無しさん:2006/05/03(水) 00:10:59
>>583
SendMessage以外の方法なら知ってる。
586デフォルトの名無しさん:2006/05/03(水) 00:15:09
マウスを!?
587デフォルトの名無しさん:2006/05/03(水) 00:27:15
SendMessageは無理ですか?
LBUTTONDOWN中のみそうしたかったのですが・・・
して、そのSendMessageの方法とは?


教えてください、お願いします。
588587:2006/05/03(水) 00:29:41
3行目に「以外」を付け忘れますた
589デフォルトの名無しさん:2006/05/03(水) 00:38:54
飲んでインザ終電の漏れに言わせればるとそれはクリップカーソーさ
590デフォルトの名無しさん:2006/05/03(水) 00:44:43
>>587
ClipCursor()を使って無理やり。

LRESULT WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
RECT rc;

switch (uMsg)
{
// 中略
case WM_LBUTTONDOWN:
rc.left = rc.right = LOWORD(lParam);
rc.top = 0;
rc.bottom = 768; // どうでもいい
ClipCursor(&rc);
break;

case WM_LBUTTONUP:
ClipCursor(NULL);
break;

// 中略
}
591デフォルトの名無しさん:2006/05/03(水) 00:56:32
たしかに無理やり出来そうですね。
戻し忘れたときが恐そうですけどね。
592デフォルトの名無しさん:2006/05/03(水) 16:04:07
戻し忘れたら、他のプログラムがClipCursor(NULL);するか再起動しない限り
マウスカーソルが上下にしか動かない。
593デフォルトの名無しさん:2006/05/03(水) 16:28:58
すみません

bool myWin::Message(){

if(!GetMessage(&msg, NULL, 0, 0))
        return FALSE;

TranslateMessage(&msg);
DispatchMessage(&msg);
return TRUE;
}

このようなクラスメンバ関数を作ったのですが
windowsから何もメッセージが送られてきていないとき、何かメッセージが送られてくるまでここで待機してしまってるみたいなんです。
何か対策はありますか?
よろしくお願いします。
594デフォルトの名無しさん:2006/05/03(水) 16:32:52
つ PeekMessage
595デフォルトの名無しさん:2006/05/03(水) 16:43:17
>>594
ありがとうございます。

でもPeekMessageだと期待したような動作をしてくれなかったので
いろいろ試した結果下のような変更で解決しました。

bool myWin::Message(){
        bool f;

f=GetMessage(&msg, NULL, 0, 0);
TranslateMessage(&msg);
DispatchMessage(&msg);

if(!f)
return FALSE;
else
return TRUE;
}
596593:2006/05/03(水) 19:44:51
ごめん、すげー早とちりした
回線切って首つってきまつ
597デフォルトの名無しさん:2006/05/03(水) 19:57:53
このとおりだから許してあげて
     ∧||∧
>>596(  ⌒ ヽ
     ∪  ノ
     ∩∪∩
     (・∀・| |
      |     |
    ⊂⊂____ノ
         彡
___________
598デフォルトの名無しさん:2006/05/03(水) 20:00:55
だが、ゆるっさん!
599597:2006/05/03(水) 20:12:53
許さないかぁ
それならさらに罰を与えましょう、そうしましょう。
600471:2006/05/03(水) 22:37:42
>>471です。
お願い、だれか答えて
601デフォルトの名無しさん:2006/05/03(水) 22:41:12
>>600
多分WM_GETMINMAXINFOが関係してる。
602600:2006/05/03(水) 22:51:58
ありがと、ほんまだ!
けど、
なんでEDITが0で、BUTTONが0じゃないのか?
603デフォルトの名無しさん:2006/05/03(水) 23:00:45
>>574です
こんばんは、いろいろ試してみた結果、
GetObject でHFONT を指定して、LOGFONT を取得すると、
HFONTに、高さのみ指定している場合は、幅がマイナス値になるようなのです。
(間違いかもしれませんが、)ので、GetTextExtentPoint32で、
SIZEを取得して、計算しました。
SetTextJustificationを使って表示させると、何回も呼び出した場合。
不具合が、発生しましたので、その後の表示は、一文字づつ呼び出し
TextOutでかきました。
どうも、文字全体をまとめて表示すると、文字化けになるので、
苦労します。

なお、GetObject はフォントダイアログ呼び出しの
初期値設定に使うことができ感謝してます。

それでは、みなさまありがとうございました。
604デフォルトの名無しさん:2006/05/04(木) 00:25:55
1文字ずつ書くとClearTypeかけたときに結構表示が汚くなることがあるから個人的にはやめてほしい。
605デフォルトの名無しさん:2006/05/04(木) 14:50:39
マルチバイト文字列を、全角文字を考慮して(全角文字で分割しない)
指定長さ(バイト数)以下に入るよう切り詰めるAPIってないですか?

例えば "あいう\0" を6バイトのバッファに入れる場合
単純に切り詰めると "あい(うの1バイト目)\0" となってしまうので
その場合は "あい\0" となるように。
606デフォルトの名無しさん:2006/05/04(木) 14:55:41
ShiftJISの頭のコードを判別してバッファに入れてやればいいだけ。
607デフォルトの名無しさん:2006/05/04(木) 15:00:06
それは分かってるんですが、API一発で出来たらいいなあと。
608デフォルトの名無しさん:2006/05/04(木) 15:05:13
探さなくてもあるけど
609デフォルトの名無しさん:2006/05/04(木) 15:06:35
>>607
たとえAPI一発でやれるとしても、それは内部で同じ事をやってくれるだけだろう?
自分でその機能を持った関数を作って、それを一発呼ぶ事の何が嫌なんだ?
610デフォルトの名無しさん:2006/05/04(木) 15:07:47
車輪の再発明はしたくない
611デフォルトの名無しさん:2006/05/04(木) 15:11:56
str系の関数、apiがあるだろ
612デフォルトの名無しさん:2006/05/04(木) 15:12:32
文字コードがShiftJISとは限らない
613デフォルトの名無しさん:2006/05/04(木) 15:21:32
考えるのが嫌なんだよ!!!
614デフォルトの名無しさん:2006/05/04(木) 15:29:09
考えるのが嫌なわけではなく、自分で書いた場合テスト・保守などの手間がかかり
十分テストされている(と思われる)APIでできるのならそれに越した事は無いな
と思っているのですが。

>>611
C標準のstrncpyだと全角文字考慮されていないようですが…

char buf[6];
strncpy(buf, "あいう", 5);
buf[5] = '\0';
// buf[4]に「う」の1バイト目が入っている
615デフォルトの名無しさん:2006/05/04(木) 15:31:59
質問の前にMSDNぐらい見よう
616デフォルトの名無しさん:2006/05/04(木) 15:34:51
他人が検証済みのロジックを、WEBなりで調べて実装するのは再発明では無い。
他人の作った設計図を元に、車輪を作ることを再発明だと思っているのか?
再発明の意味を分かっていないのに使う奴のあまりの馬鹿さかげんに涙が出てくる。
617デフォルトの名無しさん:2006/05/04(木) 15:35:35
>>615
見ていますが、lstrcpyn, StrCpyN, StringCbCopyN, StringCchCopyN
全てアウトだったのですが。
618デフォルトの名無しさん:2006/05/04(木) 15:38:49
>>614
文字コードを全てUTF16で表現すれば解決。
今後Win32APIを使っていくのならUNICODEが常識。
地域依存コードなど使えば,
>テスト・保守などの手間がかかり
問題が出る。
619デフォルトの名無しさん:2006/05/04(木) 15:40:21
ええと、仕様でマルチバイト対応でなければならないんです。
620デフォルトの名無しさん:2006/05/04(木) 15:42:47
>テスト・保守などの手間がかかり
>十分テストされている(と思われる)API
を使うため、仕様を変更すればいい。
621デフォルトの名無しさん:2006/05/04(木) 15:44:17
調べるのめんどくさいんだよ!!!
622デフォルトの名無しさん:2006/05/04(木) 15:46:14
だよな。ここで訊いて誰かが答えるの待ってた方が早いし。
623デフォルトの名無しさん:2006/05/04(木) 15:52:34
自己解決しますた。
624デフォルトの名無しさん:2006/05/04(木) 15:56:29
だからマルチバイト対応が仕様ならば、必要な機能を実現する上で
>テスト・保守などの手間がかかり
これが必要なわけだろ。その分の工数を見込んでいなかったのであれば
それは見積もりミスであって、APIのせいではない。
625デフォルトの名無しさん:2006/05/04(木) 16:00:26
>>605
APIがあるかないかが分かればいいのなら、無い。
626デフォルトの名無しさん:2006/05/04(木) 16:02:53
>>625
ありがとうございます。無いと分かっただけで十分です。
627デフォルトの名無しさん:2006/05/04(木) 16:10:09
>>617
でた情報小出し
628デフォルトの名無しさん:2006/05/04(木) 16:10:27
あるか無いかの質問なのに、的外れな回答が多いな。
かと思えば>>138-139みたいな素っ気無いやりとりがあったり
基準がよくわからん。
629デフォルトの名無しさん:2006/05/04(木) 16:10:55
>>619
ここにも小出し
630デフォルトの名無しさん:2006/05/04(木) 16:23:27
確かに>>614はダメみたいだが
lstrcpynで常識的なやり方でやったらできた。
631デフォルトの名無しさん:2006/05/04(木) 16:31:04
>617はlstrcpynでできなかったのか
できたぞ
632デフォルトの名無しさん:2006/05/04(木) 16:34:09
>>630-631
もしかして

char buf[6];
lstrcpyn(buf, "あいう", 5);
buf[5] = '\0';

で出来たとか言ってる?
"あいう"じゃなくて"aあい"だとダメだよ。
633デフォルトの名無しさん:2006/05/04(木) 16:46:54
lstrcpyn
指定された文字列を、指定した文字数分だけ、バッファにコピーします。
LPTSTR lstrcpyn(
LPTSTR lpString1,// バッファへのポインタ
LPCTSTR lpString2,// コピー元文字列へのポインタ
int iMaxLength// コピーするバイト数または文字数
);

解説
iMaxLengthパラメータで指定する値は、終端のNULL文字分も含みます。
たとえば、次のプログラムを実行すると、
"abc"と終端のNULL文字が、chBufferにコピーされます。

TCHAR chBuffer[512] ;
lstrcpyn(chBuffer, "abcdefghijklmnop", 4) ;
----------------

MSDN↑意味不明だけど
iMaxLength これはバッファの大きさだから5バイト分あれば十分
終端もコピーしたあとで自分で入れる必要ない
634デフォルトの名無しさん:2006/05/04(木) 16:55:28
結局lstrcpynはマルチバイト考慮せずぶった切るから駄目だな。
635デフォルトの名無しさん:2006/05/04(木) 16:55:36
だからlstrcpynは文字数じゃなくてバッファのサイズ指定な
636デフォルトの名無しさん:2006/05/04(木) 17:10:02
_mbsnbcpy で出来るんじゃねーのー♪
と思って試してみたら、NULL終端を入れてくれなかった。
CRTのソース追ってみたら確かに
buff[6];
"あいう"
だとNULL終端コピってくれない。
ただ、ウチの環境古いんで最新のP SDKで誰かやってみて。
あと、セーフバージョン *_s とか。
637デフォルトの名無しさん:2006/05/04(木) 19:35:48
>>632
aは、どこからきた?
638デフォルトの名無しさん:2006/05/04(木) 19:39:47
例を示しただけだろ
639デフォルトの名無しさん:2006/05/04(木) 19:52:46
小出し
640デフォルトの名無しさん:2006/05/04(木) 20:01:19
>>636
_mbsnbcpyの中で_ISLEADBYTE使ってるから
途中で切れることはない
終端は頭使えば何とかなる。
641デフォルトの名無しさん:2006/05/04(木) 20:34:38
wchar_tの使い方がいまいちわかりません。
char型からwchar_t型に変えたとき、
strlenなどをwcslenに変えなくてはいけないのはわかりました。
けど、引数がchar型の関数(MessageBox)を呼び出すときはどうしたらいいのでしょう?
642デフォルトの名無しさん:2006/05/04(木) 20:51:50
>>641
WideCharToMultiByte等で変換するかMessageBoxWを使う。
643デフォルトの名無しさん:2006/05/04(木) 21:01:23
MessageBoxWというのがあるのですね!!
もしかしてほかの関数も似たような命名規則でしょうか?
644デフォルトの名無しさん:2006/05/04(木) 21:16:46
645デフォルトの名無しさん:2006/05/04(木) 21:28:59
>618
サロゲートペアの後ろ半分だけ残る希ガス。
646デフォルトの名無しさん:2006/05/04(木) 23:39:50
>>636
mbだろうがなんだろうが、strncpy系の関数はバッファサイズ一杯まで
つめたときには末尾のゼロは入らない仕様。

buff[6] だとどうせ5バイトしか使えないわけだから、_mbdsbcpy では
バッファサイズ5を指定して自分で先にbuff[5]=0とするのが正しい使いかた。
647デフォルトの名無しさん:2006/05/05(金) 00:28:58
昔はAPIの日本語HELPがあったけど、今そういうのって無いんだね…
難儀な世の中になったもんだ。
648デフォルトの名無しさん:2006/05/05(金) 00:58:11
>>647は閉じた世界の住人。
世の中とは>>647の部屋の中。
649デフォルトの名無しさん:2006/05/05(金) 03:30:38
ListViewに表示されるスクロールバーのハンドルを得るにはどのようにすればいいのでしょうか?
650デフォルトの名無しさん:2006/05/05(金) 04:03:18
なにをどうやっても得られません。
651デフォルトの名無しさん:2006/05/05(金) 05:47:53
何がやりたいんだろうね?
自分でスクロールさせたいとか?
652デフォルトの名無しさん:2006/05/05(金) 07:47:26
>>647
Borland C++ 4.5J の win32api.hlp は今でも時々つかう
653デフォルトの名無しさん:2006/05/06(土) 01:10:12
ウィンドウを、タイトルバーをつかんだりシステムメニューから移動させたあと
移動が確定した時に発行されるメッセージってありますか?

WM_WINDOWPOSCHANGEDとかはドラッグ中もばしばし送られて来るのでちょっと違う…

WM_WINDOWPOSCHANGEDでフラグ立てて左マウス離された時とかも考えたけど
なんかスマートじゃない気が
654デフォルトの名無しさん:2006/05/06(土) 03:58:59
WM_EXITSIZEMOVE
655653:2006/05/06(土) 07:32:00
あざ〜〜〜すっ!
656デフォルトの名無しさん:2006/05/06(土) 08:51:01
どうでもいいけど、文字で「あざ〜す」ってのは
他人を馬鹿にしているのかよっぽど自身が馬鹿なのかどっちかにしか見えないな。
657デフォルトの名無しさん:2006/05/06(土) 09:31:20
どうでもいいと言いながらレスするのは
馬鹿にしか見えないなw
658デフォルトの名無しさん:2006/05/06(土) 09:37:25
真剣に考えると、返事してくれて嬉しい
659デフォルトの名無しさん:2006/05/06(土) 09:44:33
>>656
なんか攻撃的だな
きっとカルシウム不足だぞw
660636:2006/05/06(土) 15:47:36
>>646
なるぺそ、そうなのか。
strncpyの仕様確認してみます。サンクス。
661デフォルトの名無しさん:2006/05/06(土) 16:08:34
どうでもいいけど、カタカナで「サンクス」ってのは
他人を馬鹿にしているのかよっぽど自身が馬鹿なのかどっちかにしか見えないな。
662デフォルトの名無しさん:2006/05/06(土) 16:49:41
どうでもいいけど、言い出しが「どうでもいいけど」ってのは
他人を馬鹿にしているのかよっぽど自身が馬鹿なのかどっちかにしか見えないな。
663デフォルトの名無しさん:2006/05/06(土) 16:55:12
どうでもいいけど、言い出しが「どうでもいいけど」って言っておいて「どうでもいいけど」を批判するのは
他人を馬鹿にしているのかよっぽど自身が馬鹿なのかどっちかにしか見えないな。
664デフォルトの名無しさん:2006/05/06(土) 17:05:31
char header[]="どうでもいいけど、";
char core[]="言い出しが「どうでもいいけど」って言っておいて、";
char footer[]="「どうでもいいけど」を批判するのは他人を馬鹿にしているのかよっぽど自身が馬鹿なのかどっちかにしか見えないな。";
for(int i=1;;i++){
 printf("%s",header);
 for(int j=1;j<i;j++) printf("%s",core);
 printf("%s\n",footer);
}
665デフォルトの名無しさん:2006/05/06(土) 17:36:40
どうでもいいけど、「どうでもいいけど」を批判するのは他人を馬鹿にしているのかよっ
ぽど自身が馬鹿なのかどっちかにしか見えないな。
どうでもいいけど、言い出しが「どうでもいいけど」って言っておいて、「どうでもいい
けど」を批判するのは他人を馬鹿にしているのかよっぽど自身が馬鹿なのかどっちかにし
か見えないな。
どうでもいいけど、言い出しが「どうでもいいけど」って言っておいて、言い出しが「ど
うでもいいけど」って言っておいて、「どうでもいいけど」を批判するのは他人を馬鹿に
しているのかよっぽど自身が馬鹿なのかどっちかにしか見えないな。
どうでもいいけど、言い出しが「どうでもいいけど」って言っておいて、言い出しが「ど
うでもいいけど」って言っておいて、言い出しが「どうでもいいけど」って言っておいて
、「どうでもいいけど」を批判するのは他人を馬鹿にしているのかよっぽど自身が馬鹿な
のかどっちかにしか見えないな。


666656:2006/05/06(土) 18:01:44
どうでもいいけど、喪前等大好きだv
667デフォルトの名無しさん:2006/05/06(土) 18:49:08
いや、俺は嫌いだけど。
668デフォルトの名無しさん:2006/05/06(土) 18:51:47
わしも小学生の頃は好きな子にわざと嫌いなふりをしてしまったものじゃ。
669デフォルトの名無しさん:2006/05/06(土) 19:11:09
あ〜ら、あたしもよ。
670デフォルトの名無しさん:2006/05/06(土) 20:16:21
さすがにうざいんでやめてくれよ
671デフォルトの名無しさん:2006/05/06(土) 23:26:06
つれない子ね
672デフォルトの名無しさん:2006/05/07(日) 12:46:56
サブクラス化したプロシージャ内で他のコントロールの値を取得するにはどうしたらいいのでしょうか
GetDlgItemText(hWnd, ID_hogehoge, (LPSTR)hogehoge, 20);
とやっても無理でした…orz
673デフォルトの名無しさん:2006/05/07(日) 13:38:07
674デフォルトの名無しさん:2006/05/07(日) 13:38:56
675デフォルトの名無しさん:2006/05/07(日) 14:34:13
こんにちは
HFONT について教えてください
HFONT を(中身の構造)保存して、呼び出したいのですが、
HFONTからLOGFONT を取り出して、その構造体をテキストファイルに書き出しているのですが、
ofstream of;
LOGFONT hont;
of.open(filename,ios::out);
of << dec << hont.lfHeight << endl;
of << dec << hont.lfWidth << endl;
of << dec << hont.lfEscapement << endl;
of << dec << hont.lfOrientation << endl;
of << dec << hont.lfWeight << endl;
of << hex <<hont.lfItalic << endl;
of << hex << hont.lfUnderline << endl;
of << hex << hont.lfStrikeOut << endl;
of << hex << hont.lfCharSet << endl;
of << hex << hont.lfOutPrecision << endl;
of << hex << hont.lfClipPrecision << endl;
of << hex << hont.lfQuality << endl;
of << hex << hont.lfPitchAndFamily << endl;
of << hont.lfFaceName << endl;
こんな感じで
テキストファイルにはlfItalic とlfUnderline lfStrikeOut
は空白です。それを読み込んで、LOGFONT として、
それをHFONT に一つ筒今度は渡しているのですが、
アンダーラインも取り消し先もすべて、ついてしまうのです。
どうすればフォントの保存ができるのでしょうか。教えてください。

676デフォルトの名無しさん:2006/05/07(日) 14:58:11
>>675です。
とりあえず力技で、空のときはFALSE としました。
677672:2006/05/07(日) 15:27:04
>>674
自作関数にhWndを渡して、関数内でGetDlgItemTextでコントロールの値を取得できたので、
サブクラスのプロシージャでもGetDlgItemTextで出来るのかと思ってやったら出来なかったので…
取得したいコントロールのハンドルをグローバルにして
GetDlgItemText([グローバル変数にコントロールのハンドル], ID_hogehoge, (LPSTR)hogehoge, 20);
にすると取得できるのですが、グローバル変数を使わない方法はどうするのでしょうか…
678デフォルトの名無しさん:2006/05/07(日) 15:28:04
>>675
まずは、LOGFONTの構造から見直せ
679デフォルトの名無しさん:2006/05/07(日) 15:31:07
>>677
674ではないが、
findwindow
680デフォルトの名無しさん :2006/05/07(日) 15:53:23
猫でもわかるWindosプログラミングで勉強してる初心者だけど
やけに変数初期化してない所が多くて
グローバル変数は勝手に0で初期化されるとはいえ
やっぱ全部初期化した方が良いっすよね?
それとも、面倒な所はほっとけって感じで思っておいた方が
書いていくのは楽なんでしょうか
681デフォルトの名無しさん:2006/05/07(日) 15:56:48
>>680 きっちり初期化するべし
趣味ならいいが、仕事なら癖つけとけ
682デフォルトの名無しさん:2006/05/07(日) 15:58:35
猫はAPIの使い方を見るサイトなのであって、
その他すべてのことは一切参考すべきではない
683672:2006/05/07(日) 16:19:10
>>679
FindWindowで出来ました、ありがとうございました
複数起動していてもアクティブの方で取得してくれるので便利な関数ですね
684デフォルトの名無しさん:2006/05/07(日) 16:50:44
WFP(Windows File Protection)で保護されているファイルを書き換えるにはどうすればいいのですか?
よくソフトのインストーラなどが再起動時にファイルを書き換えているみたいですが、これをやるにはどうすればいいのでしょうか?
685デフォルトの名無しさん:2006/05/07(日) 17:37:59
>>684

1. ファイルを書き換える。
2. ディスクキャッシュをフラッシュする。
3. 即座にリブート(2完了から5秒以内に)

参考
ttp://www.sysinternals.com/blog/2006/05/power-in-power-users.html

まあ確か、WFPを無効にする方法があったはず。
本当に書き換えることが必要ならば、無効にすればいい。
でも、それはXPまでしか動かない、腐った設計のプログラム。

Vistaでは、WFPはファイルの書き換え自体を拒絶するようになる。

参考
ttp://blogs.msdn.com/oldnewthing/archive/2006/03/21/556505.aspx
686デフォルトの名無しさん:2006/05/07(日) 19:29:14
>>675
とりあえず、デシマルとヘキサを読み出して、文字に変換した後に、これはどうだろ。
#include<stdio.h>
voidmain(void){
chara[100]={0};
charb[100]={0};
inti=0;
scanf("%[^_]",a);
scanf("_%s",b);
printf("%s%s",a,b);
}
例えばabc_defと入力するとabcdefと出力される。
ttp://www.microsoft.com/JAPAN/developer/library/vccore/_crt_scanf.2c_.wscanf.htm
ttp://www.microsoft.com/JAPAN/developer/library/vccore/_crt_format_specification_fields_.2d_.scanf_and_wscanf_functions.htm
ttp://www.microsoft.com/JAPAN/developer/library/vccore/_crt_scanf_width_specification.htm
687デフォルトの名無しさん:2006/05/07(日) 19:30:44
このケースだとsscanfかな
688デフォルトの名無しさん :2006/05/07(日) 21:32:45
質問さしてください
コントロールのリストボックスの初期化で
hList1 = GetDlgItem(hDlg, IDC_LIST2);として
ボックス内のリストを
ListBox_AddString(hList1, szListBirthYear[i]);
で加えていって
ListBox_SetCurSel(hList1, nBirtY);
[nBirtY はINT型グローバル変数で0として初期化]
で、ListBox_SetCurSel()の第二引数は
何を設定しているのかがわからず、一応入れてある
だけの状態です。
でダイアログプロシージャ内で
case WM_COMMAND:
switch(LOWORD(wp))内の
case IDC_LIST2:で
id = ListBox_GetCurSel(hList1);
wsprintf(szText[1], L"%sが選択されました",
szListBirthYear[id]);
InvalidateRect(hMain, NULL, TRUE);
nBirtY = id;
return TRUE;
としてるのですが、実行してみるとIDC_LIST2のボックスに
加えた文字列、及びスクロールバーが表示されないです。
ただ、そのリストボックスをクリックすると空表示ですが
リストに加えた最初の文字列はウィンドウに反映されます
これは、リソースのプロパティ設定の不備なのでしょうか
それとも、ソースで足りない処理があるのでしょうか
どなたか教えて下さい。
689デフォルトの名無しさん:2006/05/07(日) 21:43:36
>>688
もうちょっと読みやすく書く癖をつけましょう。
690688:2006/05/07(日) 22:45:13
>>689
まだ初心者で、ソースも大したことない物だと思うので
一応ソースのリンク張らしてもらいます。ただ、まだ
ダイアログボックスのコントロールからウィンドウ反映される処理は
途中なので単純にIDC_LIST2にの部分での処理について
お願いします。
(出来れば、ここが良くない。ここはこうするべきだ等注意点が
あれば出来ればで結構なのでお願いします。)
http://mitty.jp/up/src/up1783.c
http://mitty.jp/up/src/up1784.rc
691デフォルトの名無しさん:2006/05/08(月) 00:25:21
>>690
ソースから解析するのだりぃから、まずexe実行して現象を見てみようと思って、
コンパイルしたらresource.hが見当たらないのでコンパイルできなくて断念です。

ソースで説明するのではなく、ある程度日本語で解説するよう心がけましょう。
692デフォルトの名無しさん:2006/05/08(月) 01:27:25
>>691
いや、いまやってる最中だが、resorce.h作って、
.rcからID〜を見つけては.hに
#define ID〜 番号//重複しない値
をふってくのは常識だよ。
後は、
#include <windows.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include<resource.h>
の順にインクルードされるようにしてやる
693デフォルトの名無しさん:2006/05/08(月) 01:27:47
しゅんません
今からAPIやるのに適した言語なんでしょ?
694デフォルトの名無しさん:2006/05/08(月) 02:14:14
>>690
分かったよ。
hDlg = CreateDialogとせっかくメインウィンドウと別枠でハンドル作ってるのに、
BOOL CALLBACK MyDlgProc(HWND hWndとやってるからまずい。
MyDlgProcないのイベント処理は、hWndであるが為になんとメインウィンドウにメッセージが来たときの処理になってる。
BOOL CALLBACK MyDlgProc(HWND hDlgとすればいい。
あと、LISTBOX2のリソースのプロパティで垂直スクロールちぇきら!してやれば、そこまでの造りとしては思っているものと一致すると思うが。
695デフォルトの名無しさん:2006/05/08(月) 03:19:09
>MyDlgProc内のイベント処理は、hWndであるが為になんとメインウィンドウにメッセージが来たときの処理になってる。
もっと具体的に言うと、
IDCANCEL:IDOK:IDC_RADIO1:IDC_RADIO2:IDC_LIST2:がメインウィンドウへのメッセージとして処理するが、
各イベント処理でやってることは、MyDlgProcの処理になっている、さらにこれらのIDとメインウィンドウのIDが幸いぶつかっていない。
WM_INITDIALOG:が来てもメインウィンドウはすでに立ち上がっているので、おそらく処理しないのだろう。
したがって、この中でやるはずの
hMain = GetParent(hDlg);
はやらないことになるから、当然後ろのInvalidRectする相手hMainは存在しないから、ダイアログボックスのフォーカスも再描画されない。
696訂正:2006/05/08(月) 03:21:14
メインウィンドウのID>WndProcのID
697もう一個訂正:2006/05/08(月) 03:45:17
>WM_INITDIALOG:が来てもメインウィンドウはすでに立ち上がっているので、おそらく処理しないのだろう。
IDM_DLG:でダイアログボックスがすでに立ち上がっているので、その後WM_INITDIALOG:が来ても処理しないだろう。
698デフォルトの名無しさん:2006/05/08(月) 03:59:49
初歩的な質問でもうしわけないですが…。
バッチやWSHなどのスクリプトファイルをEditアクションに関連付けられている
アプリケーションで開くにはどのAPIをつかえばいいんでしょうか?
Editアクションの定義が無かったらエラー報告とします。
よろしくお願いします。
699デフォルトの名無しさん:2006/05/08(月) 10:00:30
>>698
シェルのなんかでそんな事出来た気が

あれ、Editアクション?シラネ
700デフォルトの名無しさん:2006/05/08(月) 10:08:26
既存のウィンドウクラスのインスタンスの外観を変える方法はありますか?
また、その方法はサブクラス化ですか?
701デフォルトの名無しさん:2006/05/08(月) 10:11:43
>>698
ShellExecute
702688:2006/05/08(月) 10:11:45
>>691>>697さん
ありがとうございます。
ここまで丁寧に説明してもらって
何もお返し出来ないのが残念なくらいです
猫でもわかるwindowsと
W32APIのリファレンス本もみながら勉強してるんですが
猫でもわかるwindowsのソース打っても
なんか、つまらんので、自分なりにソースを作ってる感じです。
本当に、丁寧な説明ありがとうございました。
もっと勉強して、質問にたいして返答できるようにがんばります。
本当にありがとうございました。
703デフォルトの名無しさん:2006/05/08(月) 10:51:21
>なんか、つまらんので、自分なりにソースを作ってる感じです。

それで、ハマって他人に聞いてたら世話ねーな・・・
704デフォルトの名無しさん:2006/05/08(月) 11:21:08
こっち向きのネタだな

くだすれVisual C++(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1141087248/
705デフォルトの名無しさん:2006/05/08(月) 12:23:39
SetPixelとBitBltってどっちが早いんですか?
自分敵にはSetPixelとは思いますが、自信が無くて・・・。

計測方法でも良いので教えてください。
706デフォルトの名無しさん:2006/05/08(月) 12:28:48
同じ回数呼ぶなら、SetPixelの方が早いんじゃない?

10万回SetPixel呼ぶよりは、1回BitBltした方が早いと思うよ
707デフォルトの名無しさん:2006/05/08(月) 12:31:42
おねーちゃんの言うことわかる?
画面サイズ800×600でも、480000回もSetPixel関数呼ぶの。
でも、BitBltなら1回でいいの。
708デフォルトの名無しさん:2006/05/08(月) 12:43:52
>>706
ソース先頭に以下のコードを記述すると、
timeGetTime関数が使えるようになる。

#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")


んで、以下のようにしてmsexを計測すればいいじゃなーい。
(ちなみに一例)

DWORD dwTime;

// 開始時
dwTime = timeGetTime();

/* 計測する処理 */
 ・
 ・

// 終了時
dwTime = timeGetTime() - dwTime;

709708:2006/05/08(月) 12:45:19
>>708で、正しくは705へのレスです。

>>706の人、ごめんね。
710デフォルトの名無しさん:2006/05/08(月) 12:52:02
>>705
目的が違うので、比べる意味がない。





ついでに、測定するならプロファイラ使えよ。
711デフォルトの名無しさん:2006/05/08(月) 13:26:44
>>698
ShellExecute
712デフォルトの名無しさん:2006/05/08(月) 13:46:16
>>706-710
ありがとう!

目的は一応1x1を描画することでした。
それをSetPixelするか、BitBltで1x1をどこかから取ってきて転送するかで迷ったんです。

一応自分でも計ってみましたが、SetPixelよりもBitBltの方が二倍近く遅かったです。
広範囲を書き出すにはBitBltが早かったです(当たり前)

>>705
BCCなのかどうかは知りませんがプロファイラはありませんでした
もしかしてフリーダウンロードとかが出来るようなものですか?


本当にありがとう!
713デフォルトの名無しさん:2006/05/08(月) 17:18:01
環境はVisual C++ 2005 Express Editon / WindowsXPです。

SetWindowTextをメッセージループの中で回すなどとアホなことしてたので
コメントアウトをしたんですが、コメントアウトをするとメッセージループに入る前に
予め読み込んだテキストファイルの一部が文字化けするという、謎の現象が起きていて困ってます。

メッセージループの中でSetWindowTextを呼んでる限りはそんなことないのですが、
常にウィンドウのタイトルがちらつくようになるのでどうにか修正したいです。

文字コード関係かなとも思うのですが、見当が付きません。。。
714デフォルトの名無しさん:2006/05/08(月) 17:21:09
他にもアホなことをしてるんだろうと思うが、さすがに検討つかんね
715700:2006/05/08(月) 17:34:54
あげ〜

わかりませんかね?
716712:2006/05/08(月) 17:36:33
うあ!

御礼の後者は >>710 に宛ててます っていう修正
717デフォルトの名無しさん:2006/05/08(月) 17:47:11
>>713
\n,\rとか大丈夫か?
718デフォルトの名無しさん:2006/05/08(月) 17:54:59
以前ほかで質問したのですが反応がなかったため

フォント名に対応するフォントファイルのファイルパスを取得する方法はありますか?
SHGetSpecialFolderPathでフォルダまでは取得できましたがファイル名がわかりません。
719デフォルトの名無しさん:2006/05/08(月) 18:17:12
>>718
フォントファイル(*.ttf)は[Fonts]ってフォルダにあるけど、
実際はデータ登録式じゃなかった?

AddFontResource, RemoveFontResourceで、
フォントテーブルにフォントデータをインストールして、
GDIとかそこへ問い合わせるんじゃなかったけ?

EnumFont〜はDC問い合わせで、システム問い合わせじゃない訳だし・・・
720デフォルトの名無しさん:2006/05/08(月) 18:21:40
>>718
そこで、フォントファイルヘッダを解析ですよ。
721デフォルトの名無しさん:2006/05/08(月) 19:01:00
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Fonts
(NT系の場合)

722デフォルトの名無しさん:2006/05/08(月) 19:08:03
HKLM\Software\Microsoft\Windows\CurrentVersion\Fonts
(9x系の場合)
723デフォルトの名無しさん:2006/05/08(月) 19:10:42
>>721, >>722がいい事いった。

WMI叩くより簡単だ。
724688:2006/05/08(月) 19:34:19
>>694>>695>>696>>697さん

非常に適切で親切な細かい返答ありがとうございました
こんどからは、くずたれの方で質問するようにします
725デフォルトの名無しさん:2006/05/08(月) 19:55:04
>>701
rundll32.exe shel32l.dll,shellexecuteXX ....ですかね?
XX ....の部分をもう少し調べてみます。

※おおむね察しがつくと思いますが、既存プログラムのパッチをしようとしています。
ありがとうございました。
726718:2006/05/08(月) 21:03:37
みなさん感謝!!
テーブルの場所さえわかればこっちのもんです
727デフォルトの名無しさん:2006/05/09(火) 13:37:58
質問させてください。

Windowsでファイルシステムを介さずにバイナリデータをべたで
直接デバイスに書き込むには、普通、どんなふうにするんでしょうか。

例えば、USBメモリに書き込む場合、
Unix系だとデバイスを表すファイルが存在するので、
/dev/sda1
なんかをopenしてwriteしてしまえばよいような気がするのですが、
Windowだとどうなるのでしょうか?

もし、すれ違いでしたらすいませんが誘導してください。
よろしくお願いします。
728デフォルトの名無しさん:2006/05/09(火) 13:53:18
>>727
MSDNのCreateFile()を隅から隅まで読むことをお勧めする。
取り敢えずディスクであればセクタ単位でアクセスできる。
#それでも直接アクセスできるわけじゃないけどね。
729デフォルトの名無しさん:2006/05/09(火) 14:13:49
> デバイスファイル
ファイルシステムじゃん。
コレじゃ駄目?
http://www.microsoft.com/japan/whdc/device/storage/rem-stor.mspx
730デフォルトの名無しさん:2006/05/09(火) 14:29:24
BUTTONやEDITなどのウィンドウの外観を変える方法はあるんですか?

自分的にはサブクラス化してWM_PAINTの部分を頂いていくのかと思ってますが・・・
731デフォルトの名無しさん:2006/05/09(火) 14:32:12
EDITのWM_PAINTなんか頂いちゃったら、ほぼ全面的に
エディットコントロールを作るハメになるぞ。
732デフォルトの名無しさん:2006/05/09(火) 14:34:48
>>730
ボタンはオーナードローで良いんじゃないの?
733727:2006/05/09(火) 14:51:45
僕のつたない説明から質問の意図を汲み取ってくださってありがとうございます。

>>728
読んでみました。隅から隅までちゃんと読むべきでした。 orz
呆れずに親切に教えて頂いて本当に感謝します。

>>729
僕にはかなり難しそうな気がするのですが、きっとこれから役に立つのでしょうね。
Bookmarkしておきます。
どうもありがとうございました。
734730:2006/05/09(火) 18:16:08
>>731
あ、そっか。
例にと思って適当に出したけど、出すべきではなかったね。

>>732
あ、そっか。
単純だ。つか忘れてた・・・。


さすがにタブコントロールとかはサブクラス化しかないかな・・・。
735デフォルトの名無しさん:2006/05/09(火) 21:41:18
リンク切れしていますよ。

>>4
Win32 プログラミング入門
http://www7.plala.or.jp/keny01/windows/win32/
736デフォルトの名無しさん:2006/05/10(水) 12:46:38
>>735
kenyyyyyyyyyyyyyy!!!!
737デフォルトの名無しさん:2006/05/10(水) 13:21:15
738デフォルトの名無しさん:2006/05/10(水) 16:14:05
ソースのない、圧縮されたDLLがあります。
このDLLをLoadLibraryしてDllMainが走る前にメモリ上でパッチを当てたいのですが、
どのような方法がありますか?

LoadLibraryExのDONT_RESOLVE_DLL_REFERENCESが近い動作なのですが、
ドキュメントを読んだ感じではインポートテーブルの解決等はしてくれないようなので・・・
739デフォルトの名無しさん:2006/05/10(水) 17:24:13
SetEndOfFile() の逆、つまり、ファイルの始端をずらしたいのですが、
やはり「別ファイルを開いてコピー」という方法をとるしかないのでしょうか?
740デフォルトの名無しさん:2006/05/10(水) 17:37:34
>>739
ReadFile, WriteFileのOVERLAPPEDを利用して、
同ファイルを読みながら書く事もできますが、
失敗や例外時を考えると別ファイルに転送するのが無難だと思います。

741sage:2006/05/10(水) 17:42:55
画像の高さと幅の情報だけを取得したいのですが、
そのような API はありますか
742デフォルトの名無しさん:2006/05/10(水) 17:58:35
ありません。
743デフォルトの名無しさん:2006/05/10(水) 18:05:27
ファイルを読み込むAPIだけでいける。
あとはヘッダ部分の調べれば完了。
744デフォルトの名無しさん:2006/05/10(水) 18:16:10
>>738
_
745デフォルトの名無しさん:2006/05/10(水) 19:11:07
>>741

>>743さんの追記で
BITMAPFILEHEADER構造体,BITMAPCOREHEADER構造体を
ビットマップファイルの先頭部分からReadFile関数で取得するの。
746デフォルトの名無しさん:2006/05/10(水) 20:15:39
アプリの実行者がAdmin権限かUser権限かを判定するにはどうすればいい?
Adminでログインしたユーザにだけ実行を許可するようにしたいんだけど。
747デフォルトの名無しさん:2006/05/10(水) 20:25:09
「'_tagNN ( *)[16]' 型は '_tagNN *' 型に変換できない」
って警告が出たんだけど、どうすれば回避できる?
(NN*)ってキャストすれば無理やりには出来るんだけど、その後の動作に支障が有りそうだし、
警告を避ける正しいやりかたが知りたいです。

教えてー

とりあえずソース
{
  NN* s;
  s = new NN[10][10];
  delete []s;
}
748デフォルトの名無しさん:2006/05/10(水) 20:26:53
Admin権限とは、プロセスのユーザがAdministratorsグループに
属していると考えればいいのか?それとも、セキュリティポリシーで
何らかのユーザ権利が割り当てられているものと考えるべきか。
749デフォルトの名無しさん:2006/05/10(水) 20:28:58
NN*s;を NN (*s)[10];にしろと言われている気がする。
750747:2006/05/10(水) 20:35:00
うあ、ホントだ!
サンクス!

でもなんだこれは?
(NN[10])へのポインタってこと?
勉強不足だなぁ・・・
勉強します。頑張ります。
751デフォルトの名無しさん:2006/05/10(水) 20:38:55
自分はCで関数ゴチャゴチャ作ってたときにそれが出てきた。

>(NN*)ってキャストすれば無理やりには出来るんだけど

この手もあるのか。
2重ポインタで2次元配列を動的に作る時に
どの段階から作るかは難しいなあ
752デフォルトの名無しさん:2006/05/10(水) 21:03:44
>>748
前者です。
ちなみに、NetUserGetLocalGroupsってあるけど、これって
所属しているすべてのグループを取得するんだよね?
あくまで「今」実行したユーザがAdministratorとして実行したか
Userで実行したかを知りたいんだけど。
753デフォルトの名無しさん:2006/05/10(水) 21:16:45
>>752
ttp://faqs.org.ru/progr/windows/win32api.htm
の最初のQA。
2番目の look_at_token_method() が752の要求仕様をみたしてると思う。
754デフォルトの名無しさん:2006/05/10(水) 21:35:56
>>750
typedef NN[10] ArrayNN;とすれば
ArrayNN* s;
s = new ArrayNN[10];
これをtypedefを使わずに書くと>>749になる。
755747:2006/05/10(水) 22:04:11
>>754
配列までtypedefってできるんだ・・・。
すげーわかりやすいです。どうも。全ての謎が解けました(?)

よく考えたらAPI関係無いじゃんってことでスレ違いですね。注意します。


みなさんくすこ
756デフォルトの名無しさん:2006/05/10(水) 22:09:24
>>753
thx!
明日会社で試してみます。
757デフォルトの名無しさん:2006/05/11(木) 00:14:07
あるレジストリの値に変化がおきたらコールバックしてくれる。
なんて、そんな仕組みあるもんでしょうか?タイマーで見張るしかないですか?
758デフォルトの名無しさん:2006/05/11(木) 00:37:47
これってトリビアになりませんか。
759デフォルトの名無しさん:2006/05/11(木) 01:25:24
よろしくお願いします。
760デフォルトの名無しさん:2006/05/11(木) 04:00:34
何らかを描画するときって全部WM_PAINTの中でやったほうがいい?
それともWM_PAINTをWindowsから送られるものとほぼ割りきって、要所要所で描画したほうがいい?
それともそれとももしかしてアプリケーションの性質による?

どうか教えて
761デフォルトの名無しさん:2006/05/11(木) 05:35:37
要所要所でWM_PAINTという考えはないのか
762デフォルトの名無しさん:2006/05/11(木) 06:13:35
>757
RegNotifyChangeKeyValue
763デフォルトの名無しさん:2006/05/11(木) 06:15:00
c言語でタスクトレイにアイコンを表示したいんですが、


//////////////ソースファイル
NOTIFYICONDATA ic;
HICON hic;

---省略----

hic=LoadIcon(GhInst, "IDA_A");

ic.cbSize=sizeof(NOTIFYICONDATA);
ic.hWnd=HND;
ic.uID=2;
ic.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
ic.uCallbackMessage=5000;
ic.hIcon=LoadIcon(GhInst, "IDA_A");
strcpy(ic.szTip, "こんにちわ");

Shell_NotifyIcon(NIM_ADD ,&ic);


/////////リソーススクリプト
IDI_AICONDISCARDABLE"Icon1.ico"


↑なぜかアイコンは表示されず、トレイには空白が出現します。
カーソルあてるとツールチップは表示されるんですが、、、

どこが悪いのか教えてくださいませ
764763:2006/05/11(木) 06:17:14
↑リソースのところ、スペースがぬけてますが気にしないでください
765デフォルトの名無しさん:2006/05/11(木) 06:31:50
リソースの名前が間違ってるんじゃないのか?
766763:2006/05/11(木) 06:44:51
>>765
間違ってました(笑
それで、修正したんですが、それでもなぜか空白になってました。
アイコンハンドルをウィンドウクラスに設定したら、タスクバーには正常にアイコンが表示されるんですがね、、
767763:2006/05/11(木) 08:13:38
すいません、、、

どうやら、リソースの名前が間違っていたのと、インスタンスハンドルをグローバル変数に代入する所で hInst=GhInst と逆に引数に代入していたようです(笑
プログラミング以前に注意力が足りないようです、、、

考えてくれた方、ありがとうございました。
768デフォルトの名無しさん:2006/05/11(木) 13:27:20
>>760
画面の内容は常にメモリビットマップに持っておく。

RPGでキャラが動いた時とか、すぐ描画したい時、
WM_PAINT以外(WM_KEYDONWとか)で、
まず、そのメモリビットマップに更新部分を描画し、
その後、それをウィンドウに描画する。

WM_PAINTが来た時は、
メモリビットマップをBeginPaintで描画する。
769デフォルトの名無しさん:2006/05/11(木) 14:05:10
いやゲームとか画像編集(表示)ソフトならそーだろうけどさ。
770760:2006/05/11(木) 15:14:52
>>761
適当なリージョンを指定して描画ってか。
あー、そっか。盲目になってた。
そう言う方法もあるのか。

>>768
とりあえずhdcFlipとかhbmpFlipとかいう感じで似たようなことはやってるが、
WM_PAINT以外でメモリBMPに描画することは考えて無かったよ・・・。

>>769
残念ながらゲームでした。ゲ板行った方が良かったんかな。


どうやら教えてもらった方法で解決しそうです。
それにゲーム作る知識も広がった気がするし。

みんなありがとう!
771デフォルトの名無しさん:2006/05/11(木) 21:53:07
猫でもわかるプログラミング、
「Windows SDK編 第1部 第85章 MDIでメモ帳もどきを作る その2」
ttp://www.kumei.ne.jp/c_lang/sdk/sdk_85.htm
のところを勉強していました。

そしたら、WM_CREATEのところにある、
CreateWindowの最後の引数(LPVOID lpParam)が
「(LPSTR)&ccs」となっていました。
ここのところが、なぜLPSTRにキャストしているのかわかりません。
普通に考えたらLPVOIDにキャストするような気がするのですが・・・

わかる方がおられたら教えてください。
お願いします。
772デフォルトの名無しさん:2006/05/11(木) 21:58:44
たぶん意味はない。
773デフォルトの名無しさん:2006/05/11(木) 21:59:43
サイトの管理人に聞けばいいんじゃないかな
774771:2006/05/11(木) 22:06:33
MDIのプログラムを作ろうとして、
コピペでソースを作っていたのですが、
ここは気にせず「(LPVOID)&ccs」にしても問題ないということですよね?
見た目では特に不具合なさそうに見えるので
775デフォルトの名無しさん:2006/05/11(木) 22:12:03
(LPVOID)にキャストする必要も無いな
776774:2006/05/11(木) 22:29:23
>>775
わざわざ「(LPSTR)&ccs」としているので、
キャストするならどっちかっていうと「(LPVOID)&ccs」ではないのかと思ったのですが、
void型にキャストするのは時間の無駄ですよね。
777デフォルトの名無しさん:2006/05/11(木) 22:33:46
はっきり言ってどうでもいい
778776:2006/05/11(木) 22:35:06
訂正
誤)void型にキャストするのは時間の無駄ですよね。
正)LPVOID型にキャストするのもやっぱし時間の無駄ですよね。
779778:2006/05/11(木) 22:36:56
>>777
すみません、わざわざ・・・
ですのでとりあえず「&ccs」にしときます。
ありがとうございました。
780760:2006/05/11(木) 23:42:34
型キャストは使い方を誤ると危険です、「出来る限り」使わないようにしましょう。
781デフォルトの名無しさん:2006/05/11(木) 23:46:38
JavaではそうだったけどCってキャスト無しじゃどうにもならんよね
サンプルもキャストまみれじゃん
782デフォルトの名無しさん:2006/05/11(木) 23:48:13
>>781
>出来る限り
783デフォルトの名無しさん:2006/05/11(木) 23:48:46
まぁWin32APIを使ってるとどうしてもね
Javaもgenerics導入まではダウンキャストしまくってたけど
784デフォルトの名無しさん:2006/05/11(木) 23:50:20
なぜ>>780>>760として登場した事のほうが気になる
785デフォルトの名無しさん:2006/05/11(木) 23:58:38
引数無し関数をいちいち void で宣言してる香具師いる?

ちなみに俺はVOID派
786デフォルトの名無しさん:2006/05/12(金) 00:01:20
はつみみです
787757:2006/05/12(金) 00:19:36
>>762
ありがとうございました!
やっぱあったんだ…。
788デフォルトの名無しさん:2006/05/12(金) 00:54:28
VC6でmanifestを使ってXP風のUIを作ってて困っているのがタブコントロール
XP風だと上下方向に微妙にグラデーションが掛かってて、単にタブに子ダイアログを
被せると、背景色を似せても完全に溶け込んでくれない
何か定石見たいなものってある?
単にタブのグラデーションと同じ背景色のダイアログが作れれば問題ないんだが
グラデーションのかかったダイアログをわざわざ用意しなきゃいけないの?
つーか、ダイアログの背景にグラデーションを掛けるやり方なんて知らないし・・・・
789在宅バイトマニュアル:2006/05/12(金) 01:25:01
【情報暴露】

※1時間以内に1万円以上儲からなければ即返金!
(1万円というのはあくまで最低ライン)

★話題の在宅バイトマニュアル★
( 在宅ワーク人気NO.1 )

【参考】

在宅バイトマニュアル ←とネットで検索♪
790デフォルトの名無しさん:2006/05/12(金) 02:43:58
・・・1時間以内に1万円以上儲からなければ即返金って、
1時間で1万円分の仕事が出来なかったら、給料没収ってことじゃんw
791デフォルトの名無しさん:2006/05/12(金) 02:45:34
>(1万円というのはあくまで最低ライン)
ってのがポイントなのな。
792デフォルトの名無しさん:2006/05/12(金) 08:33:17
つーか、要は「バイトマニュアル」の販売が目的なんだろ。
793デフォルトの名無しさん:2006/05/12(金) 11:22:15
すみません、ちょっとAPIとか関係ない質問かもしれませんが
データマトリックス方式の二次元バーコードを作るソースはどこで手にはいりますか?
または、どこで聞けばいいでしょうか?
794デフォルトの名無しさん:2006/05/12(金) 11:51:16
795デフォルトの名無しさん:2006/05/12(金) 11:51:45 BE:31055982-#
796デフォルトの名無しさん:2006/05/12(金) 16:03:32
LoadImageでLR_CREATEDIBSECTIONを指定した場合に出来るオブジェクトのbppはなにで決まるんでしょうか?
32bppに固定したいんですができますか?
797デフォルトの名無しさん:2006/05/12(金) 20:44:51
>>796
それをDCに乗せる時に考えれば?
798デフォルトの名無しさん:2006/05/12(金) 22:20:41
VC++でプログラムしている学生です。
マインスイーパの画面を色を読み取って、
それをプログラムの中で行列にしたいのですが、
どういったコマンドを使えば良いのでしょうか?
・画面の読み取り方
・画像から行列データの変換の仕方など
教えてください。
799デフォルトの名無しさん:2006/05/12(金) 22:43:07
誰とは言わんがトップページを ttp にしてる超馬鹿がいるな・・・
今時直リンがどうのと言うアナクロニズムを超越したシュールな笑いを提供してくれるのはいいが
それは他でやってくれ
800デフォルトの名無しさん :2006/05/12(金) 23:19:26
かなり初歩的な事だと思うのですが質問さしてくださ
例えば,ウィンドウクラス登録で下の関数を使うとして

ATOM 関数名(HINSTANCE hInst)のhInst には WinMainのhCurInstを入れ

ATOM 関数名(HINSTANCE hInst){
    WNDCLASSEX wc;
    wc.cbSize = (UINT)sizeof(WNDCLASSEX);
        ・
        ・
    wc.hInstance = hInst;
        ・
        ・
    return (RegisterClassEx(&wc));
}
で、RegisterClassEx()の戻り値がATOMなので
分かるのですが、他にも自作関数でATOMを使う
場合があるのでしょうか
ヘッダを見ると
typedef unsigned short WORD;
typedef WORD ATOM;
となってますが、利点というか、この時にATOM型を使う
という区別は、返す値の型に依存することになるのでしょうか
あと、ATOM型で変数を宣言するなんて事はあるんでしょうか
HICON型やHCURSOR型や(HBRUSH型などは
なんとなく理解できてるつもりですが、ATOM型に関しては
わからないけど使ってるという状態で
どなたか説明して頂けないでしょうか。
お願いします。

    
801デフォルトの名無しさん:2006/05/13(土) 00:08:45
Shell_NotifyIconについてなんですが
http://yokohama.cool.ne.jp/chokuto/urawaza/api/Shell_NotifyIcon.html
第1引数の dwMessage で、NIM_SETFOCUS の解説のところ。
>タスクバー通知エリアにフォーカスを返します。タスクバーアイコンは、
>ユーザーインターフェース操作が完了したときにこのメッセージを送るべきです。
>例えば、タスクバーアイコンにショートカットメニューを表示して、ユーザーが
>ESC キーを押してキャンセルしたときに、このメッセージを送信してフォーカスを
>タスクバー通知エリアに返すべきです。
このあたりがどうもよくわかりません。どんなタイミングでこれを発行すべきなのか・・・?
802デフォルトの名無しさん:2006/05/13(土) 01:02:12
>>800
ATOMはどちらかというとローカルアトム・グローバルアトムでお世話になる。
RegisterClass(Ex)などが返すクラスアトムとは混用できないので注意。
803デフォルトの名無しさん:2006/05/13(土) 06:34:53
そういう事じゃなくて・・・

アセンブラでプログラミングした場合に、
1. システムが何か使えるパラメータを積んでくれているのかどうか
2. ExitProcessでなくretした場合にret 4とかret 8とかでなくretでいいのかどうか
という事です。

ちなみにレスが遅いのはアク禁で代行してもらってるからです。なのですぐにレス書けないですがよろしくお願いします。
804デフォルトの名無しさん:2006/05/13(土) 08:53:58
入門書で勉強する
サンプルプログラムを参考にする
それでわからなかったら検索する
それでもわからなかったら掲示板で質問する
805デフォルトの名無しさん:2006/05/13(土) 10:46:34
>>803
AdvancedWindowsに書いてあるが、
Windowsはエントリポイントを引数なしで呼んでいる。
だから、何も積まれていないしretで良い。
806デフォルトの名無しさん:2006/05/13(土) 15:15:18
>>799
いちいち気にするオマエの方がどうかと思うが・・
気になるなら専ブラ使うなり、フィルタ掛けるなりしろよ。
それよりも関係ないことでageるな。
807デフォルトの名無しさん:2006/05/13(土) 15:30:06
>>806
ageかどうかこそ関係あるまい
直リンと同レベルの都市伝説かっこわりー
808デフォルトの名無しさん:2006/05/13(土) 15:36:50
わからないなら無理しなくていいぞ
「よくわからないが名前欄に"sage"て書いて置こう」
と覚えておこう!
809デフォルトの名無しさん:2006/05/13(土) 16:35:36
いやきっと、sage不要教条主義なんだよ。
810デフォルトの名無しさん:2006/05/13(土) 19:16:06
unixみたいにrootでパスワードなしに任意のユーザにsuしたいのですが
該当するAPIはありませんか?
811デフォルトの名無しさん:2006/05/13(土) 20:01:48
Administratorから「パスワード無しでパスのついてある任意のユーザにsu」なら不可能。
812デフォルトの名無しさん:2006/05/13(土) 20:06:22
無理すか。不便だ。
813デフォルトの名無しさん:2006/05/13(土) 20:10:56
つーか、Windowsそれ自体だって、たとえば、
サービスをLocalSystem以外の権限で動かすには、
ユーザ名とパスワードの入力が要る。
(サービスのログオン設定)
814デフォルトの名無しさん:2006/05/13(土) 20:13:13
LV.1 クラッカーが経験値稼ぎ中か・・・初々しくていいねw
815・∀・)っ-○◎● ◆toBASh.... :2006/05/13(土) 20:13:45
>>506
60キーの英語キーボードです。
816デフォルトの名無しさん:2006/05/13(土) 20:20:25
>>506
さあね、捨て値で叩き売りしてたやつ・・・ ぱっと見、109かな? それだけ
スペースが左に寄りすぎてなくて電源キーがあればとりあえず何でもいい
@が2のところにあるのでも特に違和感はないし
817デフォルトの名無しさん:2006/05/13(土) 21:00:17
>>506
英語キーボードのiBook。
Macは英語配列の方がキーバインド上使いやすい。
818デフォルトの名無しさん:2006/05/13(土) 21:47:46
すれ違い
819796:2006/05/13(土) 23:56:51
>>797
CreateBitmapなどで32bppのを作って、いったんLoadImageしたのを入れればどうかってこと?
LoadImageで読み込んだ時点で16bppや24bppだとデータの劣化があるわけで
そのあとでいくら32bppに変換しても元のデータと違うのでまずいのですよ。
それなのでLoadImageの時点で確実に32bppで読めるようにできないのか聞きました。
820796:2006/05/13(土) 23:58:30
×16bppや24bppだと
○16bppだと
821デフォルトの名無しさん:2006/05/14(日) 00:05:44
>>819
心配しなくてもソース側 BITMAPFILE の BPP で読まれます。
822デフォルトの名無しさん:2006/05/14(日) 01:56:44
MAKEPOINTSがあってMAKEPOINTがないことに疑問を持ち
とりあえず作ってみようと思いますた。
とりあえずマクロで、
#define MAKEPOINT(lParam) ((POINT){((lParam & 65535),(lParam >> 16)}))
としました。
しかし・・・
式の構文エラーと出ます。
INT型などの場合は#define aa(i) ((INT)i)などは出来ます。
構造体でこういったことをするにはどうしたらいいのでしょうか?
823デフォルトの名無しさん:2006/05/14(日) 02:09:05
>>822
マクロではそれは難しいです。やめた方が良いでしょう。
C++ なら inline 関数でほぼ同じことができるので、そちらを使いましょう。
824デフォルトの名無しさん:2006/05/14(日) 02:13:31
>>822
コンパイラがC99対応の必要あり。

http://seclan.dll.jp/c99d/c99d07.htm#dt19991101
825デフォルトの名無しさん:2006/05/14(日) 02:20:55
>>823
えっ?
そんなに難しい」のですか?
これのために色々考えてたのですが・・・
それではアドレスが指す場所に直で計算した数値を無理やり突っ込むのはどうでしょうか?
そういうのは無理でしょうか?(そういや環境によって構造体サイズが違うのか・・・)
826デフォルトの名無しさん:2006/05/14(日) 02:26:20
>>824
inline関数のことでしょうか?
それにしても、Cで使えるようになっっていたのですね
gccしかないものだと・・・
827デフォルトの名無しさん:2006/05/14(日) 02:29:26
建前、Win32API は C でいいことになってるけど、
現実問題としてやっぱ C++ でないときついことが多いな
828デフォルトの名無しさん:2006/05/14(日) 02:40:55
>>827
そうですね、そろそろ私もC++もするべきかなって思ってます。
やっぱしStringがないのが一番堪える!
829デフォルトの名無しさん:2006/05/14(日) 03:39:22
CString は MFC でも今や忌み子だけどな
830デフォルトの名無しさん:2006/05/14(日) 06:22:14
このスレは週末も連休も関係無くスレが伸びているな。
関心関心。
831デフォルトの名無しさん:2006/05/14(日) 12:23:31
FindWindowで得られたウィンドウハンドルを使って、そのプロセスのハンドルを取得
することってできますか?
832デフォルトの名無しさん:2006/05/14(日) 12:40:14
>>831
GetWindowThreadProcessIDとOpenProcessを組み合わせればいいと思う。
833831:2006/05/14(日) 12:49:49
>>832 おお!ありがとうございました!
834デフォルトの名無しさん:2006/05/14(日) 15:47:00
>>831-833
Vista だと UIPI 関係で失敗する場合があるんじゃなかったっけ?
自分よりも相手の権限のほうが上位だった場合に。
835デフォルトの名無しさん:2006/05/14(日) 19:05:46
突然、Vistaの話に飛んだね。
836デフォルトの名無しさん:2006/05/14(日) 20:04:59
WinXP SP2のIEで、ダウンロードが自動的に始まるページへ移動すると

"セキュリティ保護のため・・・"

と表示され、自動的にダウンロードが行われないようになっていますが、
IWebBrowserを使用したIEコンポーネントで同じような機能を実装するには
どうすれば良いのでしょうか?

よろしくお願いします。
837デフォルトの名無しさん:2006/05/14(日) 20:48:20
>>836
IEコンポーネントを使い倒すスレ Ver.2
http://pc8.2ch.net/test/read.cgi/tech/1145189322/
838デフォルトの名無しさん:2006/05/14(日) 21:44:08
>>835
すまんね。Vista で動かすつもりがないんならいいんだけどさ・・・
839デフォルトの名無しさん:2006/05/14(日) 23:04:25
>>834
エラー処理をきちんと組んで突然落ちたりしなければ、大抵それで十分だと思う。
840デフォルトの名無しさん:2006/05/15(月) 03:13:09
98とVistaは何が違うんですか
841デフォルトの名無しさん:2006/05/15(月) 07:49:25
>>834
その手の話はここに詳しいけど。

ttp://blogs.msdn.com/nickkramer/archive/2006/04/15/576758.aspx

より権限の高いHWNDから読むことは出来るが、変更は出来ないとか。
(たとえばGetXXX()はできるが、SetXXX()はできない、などと考えていいのかな。)
というかSendInput()を多用しているプログラムが問題になりそう。
まあ、下位互換性を考慮して、抜け道を用意するんだろうけど。
少なくともユーザが権限を指定できるはず。


>>839
下位互換性の問題から、セキュリティ上の問題で失敗しても、エラーが戻ってくることはない。
842デフォルトの名無しさん:2006/05/15(月) 10:53:32
IPアドレスを指定してNetBIOS名を取得するようなWin32APIって、ご存じないですか?
どなたかご教授願います。
よろしくお願いします。
843デフォルトの名無しさん:2006/05/15(月) 11:32:59
>>842
WinSock系でgethostbyaddr関数。
844デフォルトの名無しさん:2006/05/15(月) 15:38:41
モデム着信を検出し、そのまま、PPP 接続させたいのです。
AT コマンドの ATA でオンフックさせればよいのかなと思うのですが…。
RasDial の電話番号指定を "A" だけにすればよろしいのでしょうか?
ご存知の方、ご教授お願いいたします。


845デフォルトの名無しさん:2006/05/15(月) 15:48:43
【質問内容】
NICとNICに設定しているDNSサーバの関係付けを知るためのAPIって有りませんか?

【やりたいこと】
NICの設定をする「インターネットプロトコル(TCP/IP)のプロパティ」みたいな
ダイアログボックスを作りたい。

【ひっかかっている点】
NICとNICに設定しているIPアドレスetcの関係付けはGetAdaptersInfo()で
知ることができるのは理解しています。
DNSサーバを知る手段にGetNetworkParams()が有ることも理解しています。
しかしこの2つのAPIだけでは、NICが複数枚あった場合にどのNICと
どのDNSとが関係しているのかが不明なので、ここでの質問に及んだというわけです。

よろしくおながいします。
846デフォルトの名無しさん:2006/05/15(月) 18:27:13
二次元バーコードでデータマトリックス方式のソースを公開してるURLを教えてください
847デフォルトの名無しさん:2006/05/15(月) 18:34:21
WIN32APIと関係ない。
848デフォルトの名無しさん:2006/05/15(月) 18:58:58
>845
なんでNICとDNSが関連付くんだ?単にWindowsの標準設定ダイアログが
そうなってるだけだろ?
849845:2006/05/15(月) 20:20:50
>>848
そういえば、そうですね(^^;)。設定のダイアログと同じようなものを作ろうとしてたので
NICとDNSの設定が対になっていると思い込んでました。
確かにFreeBSDなんかNICとIPアドレスの設定は/etc/rc.confにして
DNSの設定は/etc/resolv.confにするもんなぁ…

ありがとうございました。
850デフォルトの名無しさん:2006/05/15(月) 20:38:06
>>849
わんわんわん、わん
(それでも納得いかないなら)

わんわわんわん、わんわわんわんわん わんわんわん
(WMIのWin32_NetworkAdapter,Win32_NetworkAdapterConfigurationで情報を取得するってのがある)

わんわん
851デフォルトの名無しさん:2006/05/15(月) 21:21:28
流行ってそうだから
俺もわん。
852デフォルトの名無しさん:2006/05/15(月) 21:22:26
デフォルトゲートウェイはNICごとですよね?
853デフォルトの名無しさん:2006/05/15(月) 21:30:24
わんわわん
854デフォルトの名無しさん:2006/05/15(月) 22:08:29
うわあん
855デフォルトの名無しさん:2006/05/15(月) 22:54:07
デフォルトゲートウエイもその定義からして、
PCに1つあれば十分
856デフォルトの名無しさん:2006/05/15(月) 22:58:53
>>841
> (たとえばGetXXX()はできるが、SetXXX()はできない、などと考えていいのかな。)
ああ、なるほど。じゃあ、FindWindow くらいなら問題ないのかな。
…と思ったらそのブログには要注意 API として挙げられてるなあ。
わけわからん。

> まあ、下位互換性を考慮して、抜け道を用意するんだろうけど。
> 少なくともユーザが権限を指定できるはず。
XP のときのように個々のアプリごとに互換性ダイアログが用意されている。
問題が起きたらこれを使って権限を上げとけ、ということらしい。
857デフォルトの名無しさん:2006/05/15(月) 23:04:30
>>850-854
    ∧__∧
   / -  - \
   |  ▼   |
  /|=(_人_)= | < 日本語でおk
 / ヽ、____ノ
`Jr  ___ ノ
 ∪⌒∪   ∪
858デフォルトの名無しさん:2006/05/15(月) 23:29:17
NT4.0でSE_TCB_NAME特権をゲットする方法誰か知りませんか?
LogonUser()を使いたいんでう。
859デフォルトの名無しさん:2006/05/15(月) 23:37:33
流行ってそうだから
俺もでう。
860デフォルトの名無しさん:2006/05/15(月) 23:59:27
GetCurrentProcessId() ってDWORDを返すようですが、
実際に使われるプロセスIDの範囲って決まってたりするんでしょうか?
861デフォルトの名無しさん:2006/05/16(火) 00:18:54
いかなる仮定も置くべきではないことは確かだな。
862デフォルトの名無しさん:2006/05/16(火) 05:19:57
>>860
無限ループでプロセス作ってみたら?
863デフォルトの名無しさん :2006/05/16(火) 09:23:33
すいませんくずたれな質問さして下さい
スクリーンセーバーを猫の本みながら作ってたんですがリンカでエラー
がでてしまいます。
どうすれば良いのでしょうか。教えて下さい。
#include <windows.h>
#include <scrnsave.h>
#include "resource.h"
#pragma comment(lib, "scrnsave.lib")
#pragma comment(lib, "comctl32.lib")
#define ID_TIME 100

LRESULT WINAPI ScreenSaverProcW(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam)
{
        ・
        ・
        ・
return DefScreenSaverProc(hWnd, msg, wParam, lParam);
}

BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
return TRUE;
}
BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{
return TRUE;
}
のようなソースで
scrnsave.lib(scrnsave.obj) : error LNK2019: 未解決の外部シンボル _ScreenSaverProc@16 が関数
_RealScreenSaverProc@16 で参照されました
となります。
何が足りないのかわからないです。すいませんが、教えて下さい
864デフォルトの名無しさん:2006/05/16(火) 09:39:35
>>863
よくわからんけどなんでScreenSaverProcWってWついてんの?
865デフォルトの名無しさん:2006/05/16(火) 09:43:11
>>864
実はそれが正解かもわん
866デフォルトの名無しさん:2006/05/16(火) 09:43:15

あなたのソースをコピペして実行してみた結果です。


ss.cpp
リンク中...
scrnsave.lib(scrnsave.obj) : error LNK2001: 外部シンボル "_ScreenSaverProc@16" は未解決です
Release/ss.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー

ss.exe - エラー 2、警告 0

867デフォルトの名無しさん:2006/05/16(火) 10:49:04
>>864
scrnsave.h 見た。
実体は UNICODE で分岐してるね ScreenSaverProc/ScreenSaverProcW

# コード記述時は UNICODE に関わらず ScreenSaverProc を要求しているようだけど
868デフォルトの名無しさん:2006/05/16(火) 11:14:53
RealScreenSaverProc()はどこにある?
869デフォルトの名無しさん:2006/05/16(火) 11:19:57
#define UNICODE

//#pragma comment(lib, "scrnsave.lib")
#pragma comment(lib, "scrnsavw.lib")

通った
870デフォルトの名無しさん:2006/05/16(火) 11:21:17
#define UNICODE



#include <windows.h>
#include <scrnsave.h>

より前に必要

/D でも可?
871デフォルトの名無しさん:2006/05/16(火) 11:27:09
#define UNICODE

#include <windows.h>
#include <scrnsave.h>
#include "resource.h"

#pragma comment(lib, "scrnsavw.lib")
#pragma comment(lib, "comctl32.lib")

#define ID_TIME 100

LRESULT WINAPI ScreenSaverProcW(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam)
{
        ・
        ・
        ・
return DefScreenSaverProc(hWnd, msg, wParam, lParam);
}

BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
return TRUE;
}
BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{
return TRUE;
}

これでFA?
872863:2006/05/16(火) 12:12:48
VS2005std
でUNICODEでビルドしてるので
>>869さんの
#pragma comment(lib, "scrnsavw.lib") ←
#pragma comment(lib, "comctl32.lib")
でいけました
ありがとうございました
他にもwになってるのがおおいのかな
873デフォルトの名無しさん:2006/05/16(火) 12:14:55
あっ、そうそう、ワイド文字を使いたい場合は
#define UNICODE
#define _UNICODE
と2つ書くのでおk?
874デフォルトの名無しさん:2006/05/16(火) 12:21:34
>>872

>VS2005std
>でUNICODEでビルドしてるので

それを最初に書かんかいゴルア
875デフォルトの名無しさん:2006/05/16(火) 12:24:02
>>873
そです
876デフォルトの名無しさん:2006/05/16(火) 14:53:59
少し質問させてください。
キーボードフックしてあるアプリケーションに別のアプリケーションから、
PostMessageでWM_KEYDOWN/UPを投げてもフックプロージャが呼ばれません。
これをどうにかする良い知恵ありませんか?
877デフォルトの名無しさん:2006/05/16(火) 14:59:00
↑ X:プロージャ O:プロシージャ
878デフォルトの名無しさん:2006/05/16(火) 16:21:01
そんな突っ込みはいりまsんしんでください
879デフォルトの名無しさん:2006/05/16(火) 16:26:41
↑ X:いりまsん O:いりません
880デフォルトの名無しさん:2006/05/16(火) 16:47:53
他のプロセスのウィンドウにキーメッセージを送りたいんですけど、いろいろ試しても成功しません。
どなたかご教授ください。

↓のようなc言語ソースなんですが、どこが悪いんでしょうか?

WINHND=FindWindow(NULL,"メモ張");
PostMessageA(WINHND,WM_RBUTTONDOWN ,0,0x012C012C);
PostMessageA(WINHND,WM_RBUTTONUP,0,0x012C012C);

正常ならメモ張の300x300の所に右クリメニューが出るはずなんですが・・
881デフォルトの名無しさん:2006/05/16(火) 16:56:19
Windowsについてくる、メモ帳にメッセージ送ろうとしてるわけではないよね?
882デフォルトの名無しさん:2006/05/16(火) 17:00:40
>>881
>Windowsについてくる、メモ帳にメッセージ送ろうとしてるわけではないよね?

そうです。無理なんですか?
無理だとしたら、メモ張だから(windowsについて来るアプリだから)という事ですかね?
883880:2006/05/16(火) 17:10:02
>>882も私です。

そもそも、同じプロセス内でしかメッセージって送れないんでしょうか?
884デフォルトの名無しさん:2006/05/16(火) 17:16:05
んなことはない。
880のコードではメモ帳の親ウィンドウにメッセージを送っているが、
エディタ部分(おそらく標準のエディットコントロール)の方に送ってやらないとダメなんじゃないか。
885デフォルトの名無しさん:2006/05/16(火) 17:19:54
あとさぁ
×メモ張
○メモ帳
886デフォルトの名無しさん:2006/05/16(火) 17:27:26
HWND hNotepad, hEdit;

hNotepad = FindWindow("Notepad", NULL);
hEdit = FindWindowEx(hNotepad, NULL, "Edit", NULL);
PostMessageA(hEdit, WM_RBUTTONDOWN ,0, 0x012C012C);
PostMessageA(hEdit, WM_RBUTTONUP, 0, 0x012C012C);
887デフォルトの名無しさん:2006/05/16(火) 17:28:11
>>884
SPY++ でみた。
エディタ部分は標準のEDITコントロールだーね(サブクラス化されてるかはワカランけど)
888デフォルトの名無しさん:2006/05/16(火) 17:45:35
例のソースに入ってた
889880:2006/05/16(火) 18:15:18
できました!ありがとうございます。
なるほど。表示されてるウィンドウに送ればいいってもんじゃないんですね。
890デフォルトの名無しさん:2006/05/16(火) 21:56:50
サブクラス化について質問があります。
typedef struct 構造体
{
WNDPROC fnSubProc;//親のプロシージャ
・・・
}構造体;
と前もってこの構造体を作っていました。

サブクラス化したときの戻り値である親ウィンドウのアドレスを
構造体 *a;
a = (構造体*)malloc(sizeof(構造体));
SetWindowLong(hWnd,GWL_USERDATA,a);
a->fnSubProc = (WNDPROC)SetWindowLong(hWnd,GWL_WNDPROC,(LONG)SubProc);
といったふうにこの構造体内に入れました。

そして領域の開放は、SubProc内のWM_DESTROYにて、
構造体 *b;
b = (MYDATA *)GetWindowLong(hWnd,GWL_USERDATA);
free(b);
return 0;
と開放処理を入れました。

これでとりあえずは動いていました・・・、終了処理以外。
エラーの原因は、WM_DESTROYした後にもSubProcが来ていて、
既に消した構造体を参照しようとしているからだと思うのですが
WM_DESTROY以降に来るメッセージがわかりません。
それにこの方法自体してはいけないのかもわかりません。
長くなりましたが、どなたか教えてもらえないでしょうか。
891デフォルトの名無しさん:2006/05/16(火) 22:01:46
>>890
最後に来るメッセージは WM_NCDESTROY 。
ドキュメントのどっかに載ってます。

あと将来のことも考えて、
LongPtr とか GetWindowLongPtr の使用も考えてください。
892デフォルトの名無しさん:2006/05/16(火) 22:30:08
>>891
はやい書き込み、ありがとうございます。
WM_DESTROYをWM_NCDESTROYに変えたらエラーが出ませんでした。
ほんとうにありがとうございました。
893デフォルトの名無しさん:2006/05/16(火) 23:01:20
質問です。
LPCWSTRでも使えるWriteFileみたいな関数はないでしょうか?
894デフォルトの名無しさん:2006/05/16(火) 23:05:00
WriteFileで使えるだろ。
895デフォルトの名無しさん:2006/05/17(水) 01:35:20
一瞬WriteFileW()が浮かんでしまった漏れがいる…orz
896デフォルトの名無しさん:2006/05/17(水) 02:24:49
Writeした結果がどうなって欲しいのかわかんないと、どうにも。
897デフォルトの名無しさん:2006/05/17(水) 03:17:39
猫でものプログラムをUNICODEバージョンに変えようと思いました。
http://www.kumei.ne.jp/c_lang/sdk/sdk_00.htm←このプログラム
ですので、
そのプログラムの先頭に
#define UNICODE
#define _UNICODE
をつけ、
「char szClassNme[] = "ウィンドウクラス・ネーム";」などを
「LPCTSTR szClassNme = TEXT("ウィンドウクラス・ネーム");」
に変更して実行しました。
ですが結果なのですが
if (!RegisterClass(&myProg)) return FALSE;
のところで処理を抜けているみたいです(MessageBoxで確認)。
なにがだめ駄目だったのかわかりません。
どなたか教えてもらえないでしょうか?
898デフォルトの名無しさん:2006/05/17(水) 03:42:34
>>897
GetLastErrorは?
899デフォルトの名無しさん:2006/05/17(水) 05:51:34
普通に動くサンプルを元にした方がいい。
動かないものを動くようにするのは初心者には無理
900デフォルトの名無しさん:2006/05/17(水) 12:06:47
VisualSutdioのウィーザードでアプリを作ると素っ気ないアプリが出来てしまうんですけど、
できれば、Picasa2みたいなイカス外観とか、スキンのような仕組みを取り入れないんですけど、
フレームワークのような物があるんでしょうか?
何か情報ありましたら教えてください、よろしくお願いします。
901デフォルトの名無しさん:2006/05/17(水) 12:27:47
>>892
後始末なら サブクラス化前の WNDPROC を書き戻した方が良くないかい?
902897:2006/05/17(水) 14:17:53
>>898
UNICODEにしたらメッセージボックスの文字列がおかしくなっていました。
ですのでわかりませんでした。
>>899
UNICODEでなかったら動きました。
903デフォルトの名無しさん:2006/05/17(水) 14:33:55
>>897
プログラムの先頭って、具体的にどこ?
ヘッダファイルの宣言より上だよね?
904デフォルトの名無しさん:2006/05/17(水) 14:37:52
>>902
OS が Windows 98 とか ME なんじゃないでしょうか。
905デフォルトの名無しさん:2006/05/17(水) 14:38:42
>>903
ヘッダファイルより下だと、ANSIに切り替わるだけじゃない?
906デフォルトの名無しさん:2006/05/17(水) 14:40:44
>>905
ANSIコードにしときならが、pragma で WIDE側 lib 連結してたら ワケワカ状態になる可能性が
907903:2006/05/17(水) 14:41:08
>>905
そりゃそーだw

漏れが悪かった
908デフォルトの名無しさん:2006/05/17(水) 14:48:26
>>906
WinAPIはdefineで切り替えてるから問題なくね?
909デフォルトの名無しさん:2006/05/17(水) 14:52:41
>>908
あ API は シンボル名 違うから、衝突なんておきないか。
# 元質問のリンカエラーがそうだったし
910デフォルトの名無しさん:2006/05/17(水) 14:55:58
>>902
どういう環境で書いてるのかシランが、
デバッガの使い方を覚えるか、デバッガを使える環境に移行することを勧める
911デフォルトの名無しさん:2006/05/17(水) 15:01:08
喪前らこんな20行程度のコードも机上デバグできないのかよ・・・ビクリしますた。
帰ってきたエラーコードは 0x00000078 、原因は 897 が WIndows98/ME/95を
使っているから。以上でオシマイ。
912897:2006/05/17(水) 15:02:28
>>903
ヘッダファイルの宣言より上です。
>>904
もしかして98系だと無理なのですか?
今、諸都合により98系です。
913デフォルトの名無しさん:2006/05/17(水) 15:05:52
>>911
すまねぇ SDK見りゃ一発だわな
RegisterClass
 Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000.
914897:2006/05/17(水) 15:16:20
>>904,911,913
すんません、自分がばかでした。
XPばかりだったので忘れてたみたいです。
つきあってくれてありがとうございました。
915デフォルトの名無しさん:2006/05/17(水) 16:49:12
>>914
Microsoft Layer for Unicodeを使えば9xでも一応Unicode版APIが使える。
916デフォルトの名無しさん:2006/05/17(水) 20:23:36
ツールバー(BTNS_CHECKのボタンがあるもの)にて
ツールバーのチェック状態を得るにはどうしたらいいのでしょうか?
917デフォルトの名無しさん:2006/05/17(水) 20:37:00
TB_GETSTATE
918デフォルトの名無しさん:2006/05/17(水) 20:44:58
ウニコードとか意味不明だぜ
919デフォルトの名無しさん:2006/05/17(水) 22:05:26
釣りだろ
920デフォルトの名無しさん:2006/05/18(木) 01:18:24
ウニコードも知らんのか
921デフォルトの名無しさん:2006/05/18(木) 01:19:21
僕の肛門もウニコードに置き換えられそうです。
922872:2006/05/18(木) 02:38:32
>>874さん
すんません

>>897さん
猫でもの本を買った俺からの意見
「なんでこんなにグローバルで変数宣言してんだ」
「なんで、こんなに変数を初期化せずに使ってるんだ」
「この変数は関数内だからグローバルじゃなくてstaticで関数内で宣言すれば良いじゃねぇか」
「なんで、こんなにAPIについて説明が中途半端なんだ」
「おいおい、このAPIについての説明はこれだけ?」
「初心者の俺みたいな奴に、EnableMenuItem()を初めて説明するときに
フラグをMF_BYCOMMANDで指定させるか?」
「リソースの名前を""で囲めば楽ですよ、ってMAKEINTERESOURCE()使った方がもっと楽じゃねーかよ」
「なんで、毎回ウィンドウクラスの登録とCreateWindowするとこだけは律儀に
書いてんだよ、で、前の章では使ってない関数とかをなんで太字にしたりしなかったり」
「この変数どこで宣言してんだよ・・・・あ、またグローバルで宣言してるよ」
「あれ、本通り打ち込んだのに動かない、あれこの関数宣言してるのに使ってない
・・・って、急に別ページにのこりの関数書くなよ」
「ライブラリを#pragma command(lib, "〜")する仕方の説明なしかよ(この板で
教えてもらったよ)」
「別に拡張子で判断されないのは分かるけど、せめて.cppはやめようよ」
「なんだか、この本のプログラムの書き方を身につけて良いのだろうか・・・・」
と、いう過程によりくずたれな俺がリファレンス本を買いプログラムの書き方について
考えさせられ、自発的に向上をうながしてくれる良い本だよ。
一度買ってみると良い。だんだんいらついてくるきてやる気薄れてくるから。

ただ、俺は一応全部UNICODE変えて書いてて
世の流れもそうなっていくらしいからそうしてるけど、ANSIの方が良いのかな
くずたれの俺にはわからない。
923デフォルトの名無しさん:2006/05/18(木) 02:42:05
>>922
NTカーネルの内部は、すべてUTF-16になっている。
いまのANSI版のAPIは、すべてWide版のラッパに過ぎない。
当然、ANSI版のAPIを使うと、文字コード変換のオーバーヘッドが生じる。


MSもUNICODEに移行したがっているけど、過去との互換性の問題で、なかなかうまくいかない。
今までに書かれ、今もなお動いているコードが多すぎるから。

やっと、VCから、デフォルトの文字コードがUNICODEになったけどね。
本格的に移行するには、あと5年から10年はかかるのかな。
924デフォルトの名無しさん:2006/05/18(木) 05:52:16
>>922
「猫でも〜」はWebで全部見られるから本買う気が起きない
925デフォルトの名無しさん:2006/05/18(木) 06:16:53
webのやつがそのまま本になったわけじゃないだろうけど
書いた本人は同じだからな
926デフォルトの名無しさん:2006/05/18(木) 07:54:59
猫でもにはいろいろ(今となっては)不満もあるが、10年前にはあれほどには
まとまったものはなかった。オレには有り難かった。昔はメールで聞くと教えて
くれた。あれを最新版にするため見直すってのは、マ大変だな。

世話になって感謝の気があるならたまにアクセスしてアクセス回数を増やして
礼の代わりにしたがいい。いずれは陳腐化して消えるだろうが、出来るだけ
残ってほしいと思う。
927デフォルトの名無しさん:2006/05/18(木) 07:56:43
感謝する気があるのなら、寧ろ早く消えてもらって次の誰かの登場を期待すべくアクセスしない方が医院で内科医。
928デフォルトの名無しさん:2006/05/18(木) 08:20:31
猫だけで勉強するのは絶対不可能
初心者の場合は特にそう
ただサンプルがいっぱいあるから使える。
929900ですが、:2006/05/18(木) 12:16:36
ここじゃレス付きそうもないですかね?
何方かスレ紹介してくれませんでしょうか?
930デフォルトの名無しさん:2006/05/18(木) 14:12:22
猫はAPIのサンプルだろ。
931デフォルトの名無しさん:2006/05/18(木) 14:36:17
>>929
codeprojectから
ttp://www.codeproject.com/wtl/SkinX.asp
ttp://www.codeproject.com/dialog/skindlg.asp

あとは、MediaPlayerみたいにリージョンで切り抜くとか
932デフォルトの名無しさん:2006/05/18(木) 16:17:53
最近は Region で切り抜くよりも
SetLayeredWindowAttributes で
ゴニョゴニョする方がクール

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/layerwin.asp
933デフォルトの名無しさん:2006/05/18(木) 16:29:19
子ウィンドウの数を調べるにはGetWindowでループさせるくらいしかないですか?
934デフォルトの名無しさん:2006/05/18(木) 16:33:35
せめて EnumChildWindows 使えよ
935デフォルトの名無しさん:2006/05/18(木) 17:21:00
VisualStudioなどのForm作成画面について質問です。
あのForm作成画面で作成されるボタンとかはCreateWindowで作ったボタンに、
フォーカスが移動したとき、
そのボタンの上にサイズ変更の枠の形をしたWindowを重ねるという処理して実現させているのでしょうか?
936デフォルトの名無しさん:2006/05/18(木) 17:24:52
違います
937デフォルトの名無しさん:2006/05/18(木) 17:31:08
それでは、ボタンっぽい自作ウィンドウですか?
938デフォルトの名無しさん:2006/05/18(木) 18:07:02
違います
939デフォルトの名無しさん:2006/05/18(木) 18:09:33
SPY とかで見たら?
940デフォルトの名無しさん:2006/05/18(木) 18:17:48
SPY?
それはなんなのでしょうか?

作り方わかんない・・・
941デフォルトの名無しさん:2006/05/18(木) 18:28:19
わかんないなら作らなくていいですよ?
942デフォルトの名無しさん:2006/05/18(木) 18:34:06
>>939
コントロールじゃないんだからspy++で見ても意味無いだろ

>>935
DrawFrameControl()とか使って自前で描画してください
943デフォルトの名無しさん:2006/05/18(木) 18:56:23
いちおうspy++で見たら
VC6のはそのまんま実物だな
あとは知らん
944デフォルトの名無しさん:2006/05/18(木) 19:24:26
>>942
そんなのがあったんだ・・・
この関数の内容を見たら
ボタン、タイトルバー、メニュー、スクロ−ルバー
しか出来ないみたいですが
EDITやSTATICは自分で書くしかないのですか?
945デフォルトの名無しさん:2006/05/19(金) 00:59:00
わかんないなら作らなくていいですよ?
946デフォルトの名無しさん:2006/05/19(金) 02:39:05
DrawTextで文字を表示させようと思ったのですが
背景が白くなってしまいます。
背景を白く塗らなくするにはどうしたらいいのでしょうか?
947946:2006/05/19(金) 02:48:01
事故解決しました。
SetBkMode(hdc,TRANSPARENT);
948デフォルトの名無しさん:2006/05/19(金) 07:03:56
がんがれ
949デフォルトの名無しさん:2006/05/19(金) 07:55:18
>>950 踏んだ人 次スレよろしく
950デフォルトの名無しさん:2006/05/19(金) 11:32:55
>>949
次スレ立てたわん
951デフォルトの名無しさん:2006/05/19(金) 11:48:17
952デフォルトの名無しさん:2006/05/19(金) 14:25:47
DrawFrameControlなのですが
ラジオボタンやチェックボックスは、
ボタンの位置やサイズ、テキストの位置は自分で計算するしかないのでしょうか?
953デフォルトの名無しさん:2006/05/19(金) 14:29:10
>>952
DrawFrameControl は現状殆ど使い物にならないからやめた方がいいよ。
本物のコントロールを配置して、手前をWS_EX_TRANSPARENTなウィンドウで
覆っておくのがお勧め(何か上書きしたいならそのウィンドウで)。
954デフォルトの名無しさん:2006/05/19(金) 14:42:22
>>953
やっぱしそうですか・・・。
「ボタンだけならどうにかなるけどチェックボックスとかはどうするのこれ?」って
結構迷いました・・・
というわけど教えてもらった方法を考えてみたいと思います
955デフォルトの名無しさん:2006/05/19(金) 14:44:57
だれだ DrawFrameControl を薦めた香具師は
956デフォルトの名無しさん:2006/05/19(金) 14:46:27
>やっぱしそうですか・・・。
最初から自分で作ればいいんじゃないか
957デフォルトの名無しさん:2006/05/19(金) 14:51:03
>>956
まぁ、そうでしょうけど作るのがしんどいだろうし(自分のレベルじゃ)
できたとしても違うものが出来そうなので・・・
958デフォルトの名無しさん:2006/05/19(金) 19:46:43
埋めようぜ
959埋めようぜ:2006/05/19(金) 20:04:50
乙女座の聖闘士は、
自分の写真と某アニメのロリキャラとの合成プリントシャツ着たキモオタデブ
960デフォルトの名無しさん:2006/05/19(金) 21:12:37
なんでもいいので埋めてください。
961デフォルトの名無しさん:2006/05/19(金) 21:18:56
SuspendThread
962デフォルトの名無しさん:2006/05/19(金) 21:25:06
ExitThread
963デフォルトの名無しさん:2006/05/19(金) 21:25:59
とりあえず>>960を埋めました
         、、、、
       _彡_, ,_ヾ
     /∩|;`"皿`"|) =3
    くヘ | ̄ヽL| |」 ]つ ┐
       |j、__| |_| ┰'’
       |__|_| _||_    (○)
       |__)_) | ∪ |     |/)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ⊂⌒~⊃。Д。)⊃
964デフォルトの名無しさん:2006/05/19(金) 21:26:02
FreeLibraryAndExitThread
965デフォルトの名無しさん:2006/05/19(金) 21:28:47
CreateWindowは存在しない!
966デフォルトの名無しさん:2006/05/19(金) 21:39:52
_onexit( exit_func );

...

int exit_func()
{
967デフォルトの名無しさん:2006/05/19(金) 21:56:57
BUTTONウィンドウの背景色を
灰色じゃない色(例えば、赤)に変えるにはどうしたらいいのでしょうか?
968デフォルトの名無しさん:2006/05/19(金) 22:11:04
2つのPOINT構造体からRECT構造体を返す関数はないでしょうか?
969デフォルトの名無しさん:2006/05/19(金) 22:36:01
>>968
それくらい自分で作れ。
そういえばMFC/ATLのCRectにはPOINTとSIZEを受け取るコンストラクタがあった気がする。
970デフォルトの名無しさん:2006/05/19(金) 22:41:46
>>969
そういう関数が最初からあるんだったら
そちらを使ったほうがいいかなと思ったのでとりあえず・・・
ないのでしたら自作します。
971デフォルトの名無しさん:2006/05/19(金) 22:48:58
RaiseException(
  0
  , dwExceptionFlags //復帰不可能
  , 0, NULL ) ;
972971:2006/05/19(金) 22:51:48
__except(EXCEPTION_EXECUTE_HANDLER) { /*typo*/ }
//素で間違えたOrz
973デフォルトの名無しさん:2006/05/20(土) 02:06:49
いいこと思いついた
お前らこのスレを埋めろ
974デフォルトの名無しさん:2006/05/20(土) 02:10:07
よっし、お前が埋めろ
975デフォルトの名無しさん:2006/05/20(土) 10:32:03
>>968-970
単純にコピーでいいとは限らない訳だがみんなはどうしてる?
976デフォルトの名無しさん:2006/05/20(土) 10:46:30
namespace foo {

class RECT
{
  ::RECT rect ;
public :
  RECT(::POINT left_top, ::POINT right_bottom)
  {
    rect.left = left_top.x ;    rect.top = left_top.y ;
    rect.right = right_bottom.x ;    rect.bottom = right_bottom.y ;
  }

  operator ::RECT() { return rect ; }
} ;

} //namespace foo

うーん、激しく車輪の再発明な気がしないでもない。
977デフォルトの名無しさん:2006/05/20(土) 11:27:35
RECT のポインタを渡して中身を書き換えたときに
元の POINT の中身も換わって欲しかったりすることない?
978デフォルトの名無しさん:2006/05/20(土) 11:35:08
よくわからないが、CRectをコピれば終わらないか?
979デフォルトの名無しさん:2006/05/20(土) 11:46:41
ソースみたけどやっぱりコピってるんだね
980デフォルトの名無しさん:2006/05/20(土) 11:48:43
SetRect
981976:2006/05/20(土) 13:13:28
>>979
いや、そのヘッダは読んでいないけど、誰が書いても同じものになると思う。
982デフォルトの名無しさん:2006/05/20(土) 13:18:18
コピってるっていう意味は元のPOINTの
インスタンスにデータをコピーしてるってことです
983デフォルトの名無しさん:2006/05/20(土) 13:18:54
ごめん文章がおかしくなった

コピってるっていう意味は元のPOINTのデータを
RECTのインスタンスにコピーしてるってことです
984デフォルトの名無しさん:2006/05/20(土) 13:20:50
afxwin1.inl というインライン定義記述用ソースファイルの中に

// CRect
_AFXWIN_INLINE CRect::CRect()
{ /* random filled */ }
_AFXWIN_INLINE CRect::CRect(int l, int t, int r, int b)
{ left = l; top = t; right = r; bottom = b; }
_AFXWIN_INLINE CRect::CRect(const RECT& srcRect)
{ ::CopyRect(this, &srcRect); }
・・・

こういうのが延々と続いていました
985976:2006/05/20(土) 13:48:09
>>982
ここで、POINT構造体のラッパも用意してみる。
処理は全部、全部クラス内に記述する。

RECT rect = foo::RECT(foo:POINT(0, 0), foo::POINT(640, 480)) ;

賢いコンパイラなら、インライン展開したほうが得であると考えて、
インライン展開->さらに最適化->普通のRECT構造体に値を設定した場合と、なんら変わらない処理に。


というかコピーとかいうのは、どういう意味で使っているのだろう。
986976:2006/05/20(土) 13:49:37
あ、POINT構造体とか言っている時点で、そもそも上の例は間違っているか。
普通のRECTなら、

RECT rect = {0, 0, 640, 480} ;

でいいか。
987デフォルトの名無しさん:2006/05/20(土) 16:40:03
MFC使おうよ
988デフォルトの名無しさん:2006/05/20(土) 16:53:20
>>985
わかりにくくてすみません

POINT p1 = { 5, 7 };
POINT p2 = { 13, 31 };

RECT r = hoge(p1, p2);

ここまではみなさんの考えてることと同じなのですが、

r.lefttop.x = 3;

としたときに、もとの

p1.x も 3 になってほしいのです
989デフォルトの名無しさん:2006/05/20(土) 16:59:22
struct HOGE
990デフォルトの名無しさん:2006/05/20(土) 17:01:18
間違えたorz


struct HOGE
{
  POINT lefttop ;
  POINT rightbottom ;
} ;


こんな感じかな。
こんなあほみたいなテクニックを使う、
わかりにくいコードなんて、読みたくないが。
991デフォルトの名無しさん:2006/05/20(土) 17:11:11
それじゃだめでしょ
992デフォルトの名無しさん:2006/05/20(土) 17:15:56
>>991
オーケー>>988を読み直した。
コンストラクタでp1,p2の参照を取って、メンバに保持しておき、
RECTフェイクなクラスが変更されたら、参照も変更する。

ますます読みたくないコードだ。
993デフォルトの名無しさん:2006/05/20(土) 17:26:10
>>978 とか >>980 とか >>987 を無視するあたりどう見ても(ry
994デフォルトの名無しさん:2006/05/20(土) 17:27:46
埋めようよ
995デフォルトの名無しさん:2006/05/20(土) 17:28:25
埋めてしまえ
996デフォルトの名無しさん:2006/05/20(土) 17:30:05
997デフォルトの名無しさん:2006/05/20(土) 17:30:27
もったいないスレの使い方を・・・
998デフォルトの名無しさん:2006/05/20(土) 17:31:26
いいじゃんいままでそうやって埋めてきたんだし
999デフォルトの名無しさん:2006/05/20(土) 17:31:45
1000だったらVistaで新API UninstallWindowsVista導入
1000デフォルトの名無しさん:2006/05/20(土) 17:32:27
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。