Win32API質問箱 Build60

このエントリーをはてなブックマークに追加
1はじめてのスレ立て
これからもヨロシクな
2デフォルトの名無しさん:2007/12/06(木) 02:19:29
>>1
氏ね
3デフォルトの名無しさん:2007/12/06(木) 02:21:36
1が使えないので、代わりにテンプレ貼っとく。

スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

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

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
4デフォルトの名無しさん:2007/12/06(木) 02:22:12
59 ttp://pc11.2ch.net/test/read.cgi/tech/1194701996/
58 ttp://pc11.2ch.net/test/read.cgi/tech/1191781463/
57 ttp://pc11.2ch.net/test/read.cgi/tech/1189255282/
56 ttp://pc11.2ch.net/test/read.cgi/tech/1186989201/
55 ttp://pc11.2ch.net/test/read.cgi/tech/1184853465/
54 ttp://pc11.2ch.net/test/read.cgi/tech/1181645965/
53 ttp://pc11.2ch.net/test/read.cgi/tech/1178882828/
52 ttp://pc11.2ch.net/test/read.cgi/tech/1176828891/
51 ttp://pc11.2ch.net/test/read.cgi/tech/1174416295/
50 ttp://pc11.2ch.net/test/read.cgi/tech/1171721448/
49 ttp://pc10.2ch.net/test/read.cgi/tech/1168708801/
48 ttp://pc10.2ch.net/test/read.cgi/tech/1166172047/
47 ttp://pc8.2ch.net/test/read.cgi/tech/1163375772/
46 ttp://pc8.2ch.net/test/read.cgi/tech/1159158014/
45 ttp://pc8.2ch.net/test/read.cgi/tech/1156032806/
44 ttp://pc8.2ch.net/test/read.cgi/tech/1151501925/
43 ttp://pc8.2ch.net/test/read.cgi/tech/1148005509/
42 ttp://pc8.2ch.net/test/read.cgi/tech/1144962549/
41 ttp://pc8.2ch.net/test/read.cgi/tech/1141392216/
40 ttp://pc8.2ch.net/test/read.cgi/tech/1138893959/
39 ttp://pc8.2ch.net/test/read.cgi/tech/1136673250/
38 ttp://pc8.2ch.net/test/read.cgi/tech/1133798345/
37 ttp://pc8.2ch.net/test/read.cgi/tech/1131884991/
36 ttp://pc8.2ch.net/test/read.cgi/tech/1128951330/
35 ttp://pc8.2ch.net/test/read.cgi/tech/1125850096/
34 ttp://pc8.2ch.net/test/read.cgi/tech/1122723009/
33 ttp://pc8.2ch.net/test/read.cgi/tech/1120153520/
32 ttp://pc8.2ch.net/test/read.cgi/tech/1117271829/
31 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
5デフォルトの名無しさん:2007/12/06(木) 02:23:14
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
9 ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
8 ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
7 ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
6 ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
5 ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
4 ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
3 ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
2 ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
1 ttp://pc.2ch.net/tech/kako/991/991576947.html
6デフォルトの名無しさん:2007/12/06(木) 02:24:12
7デフォルトの名無しさん:2007/12/06(木) 02:28:11
- Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
- Win32 プログラミング入門
http://www7.plala.or.jp/keny01/

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

-おまけ
Build19が見たい人で余裕のある人は●でも買ってくれ。
8デフォルトの名無しさん:2007/12/06(木) 02:40:09
以上、1の代わりにテンプレ貼り。
デスクトップ2chの長期メンテナンス、にくちゃんねるの終了により、
最後を独断で一部変更。
9デフォルトの名無しさん:2007/12/06(木) 15:27:55
>>8
乙です

FPSを計るプログラムを書いてみたんですが
実行すると"14,15FPS"位の時と"140〜160FPS"位出る時に何故か分かれます
普通に実行した場合が前者で、2ch見てると後者になるんですが
理由がよく分かりません、こういうのはパソコン側の問題なんでしょうか?
10デフォルトの名無しさん:2007/12/06(木) 16:36:51
CPU使用率っていうのも取ってみました
前者が100%で後者はもっと低くなっていました
google見ても後者になったのでブラウザ立ち上げるとなるみたいです
11デフォルトの名無しさん:2007/12/06(木) 17:59:18
いい加減スペル直そうぜ
12デフォルトの名無しさん:2007/12/06(木) 18:12:25
質問です。

自分以外のウインドウがアクティブになっているときでも、
キーボード入力があればイベントが発生するようにプログラミングするには、
フックが必要になるのでしょうか?
フックを使わずにこれを行う方法はあるのでしょうか?
13デフォルトの名無しさん:2007/12/06(木) 18:52:28
>>12
特定のキーの組み合わせだけでよければ、ホットキーというのもある。
使用するAPIはRegisterHotKey/UnregisterHotKey
14デフォルトの名無しさん:2007/12/06(木) 19:52:40
「共有フォルダ/ネットワークドライブ」がリムーバルドライブ上に存在するかを確認する方法てありませんか?
15デフォルトの名無しさん:2007/12/06(木) 20:03:16
>>9お前は本当にそれでレスが付くとでも思ってるのか?w
16デフォルトの名無しさん:2007/12/06(木) 21:59:04
UpdateLayeredWindowで半透明にしたウィンドウに文字列を表示しようとしてます。

HDC hScreenDC = GetDC(0);
HDC hWndDC = CreateCompatibleDC(hScreenDC);
HBITMAP hBmp = CreateDIBSection(0, 略, (void **)&bmpData, 0, 0);
/// bmpDataに背景を直接描画
DeleteObject(SelectObject(hWndDC, hBmp);

///ここでTextOut

UpdateLayeredWindow(hWnd, hScreenDC, ... , hWndDC, ... , ULW_ALPHA);

としてみたところ文字列は表示されますが、文字列の表示領域の背景がおかしくなって、
文字列自体も透明度100%の状態で表示されます。
これを半透明のウィンドウに自然に文字列が表示されるようにはどうすればいいですか。
17デフォルトの名無しさん:2007/12/06(木) 23:20:03
テキストの背景ブラシに透明ブラシを設定するとかなんとか
18デフォルトの名無しさん:2007/12/07(金) 01:09:34
SetBkMode(TRANSPARENT);

最高に頭の悪い発言をしてみた(テヘッ
19デフォルトの名無しさん:2007/12/07(金) 01:40:10
  /\___/\
/ ⌒   ⌒ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < やるじゃん
|   ト‐=‐ァ'   .::::|    \_____
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\
20デフォルトの名無しさん:2007/12/07(金) 02:07:43
   /\___/\
/ ⌒   ⌒ ::: \
| (○), 、(○)、 |    / ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < わろたよ
|   ト‐=‐ァ'   .::::|    \_____
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\
21デフォルトの名無しさん:2007/12/07(金) 02:22:08
全画面表示(っていうのかな? 、クライアント領域をデスクトップにバァっとかぶせる感じにしたいんだけど
以下のコードじゃうまくいきません
どうしたらいいですか?
ShowWindow(FindWindow(TEXT("Shell_TrayWnd"), NULL), SW_HIDE);
GetWindowRect(GetDesktopWindow(), &rc);
AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, TRUE);
MoveWindow(hwnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE);
どこかおかしいでしょうか?
22デフォルトの名無しさん:2007/12/07(金) 02:27:49
>>17-18
文字列表示領域の背景が変になるのはそれで直りました。
文字列事態が透明になってしまうのはTextOutでの文字列描画が32bitで
記録されないためのようです。
bitmapDataからα値が0のところを0xffに書き換えてやるとちゃんと表示されました。
が、およそ全てのピクセルを一度チェックしないといけないため非効率に思われます。
32bit値で文字列をbitmapDataに描画する方法があれば引き続き教えて下さい。
23デフォルトの名無しさん:2007/12/07(金) 02:27:54
どう上手くいかないんだよ
24デフォルトの名無しさん:2007/12/07(金) 02:42:37
>>22
よく考えれば分かる気が

GetDC(0)〜CreateCompatibleDCで半透明ウィンドウ用のDCを生成してるって事は
hdcのビット深度は24ビットになってる
それならtextoutが24ビットで出力するのは当然だと思う

32ビットで出力したければ(以下略
25デフォルトの名無しさん:2007/12/07(金) 10:39:55
LVM_SETICONSPACING で ListView のアイコンの間隔を変えてやると,
ListView の認識しているアイコンの位置は中途半端にしか変わって
ないみたいで,シフトキーを押しながらマルチセレクトをした時に
ずれて選択されっけど,これって仕様なの?
26デフォルトの名無しさん:2007/12/07(金) 11:26:37
>>21の質問に答えてあげる人はいないの?
2723:2007/12/07(金) 11:32:10
なんとなく分かってもらえると思ったが>>23>>21宛て
28デフォルトの名無しさん:2007/12/07(金) 11:33:36
とりあえず

>ShowWindow(FindWindow(TEXT("Shell_TrayWnd"), NULL), SW_HIDE);

これおかしいだろ
Shell_TrayWndってタスクバーじゃなくて端の通知トレイだろ
29デフォルトの名無しさん:2007/12/07(金) 11:56:49
>>22>>24
GDIの昔からある描画関数は32bit対応が全く考慮されてない
半透明対応で文字描画するならGDI+使うかDrawThemeText
30デフォルトの名無しさん:2007/12/07(金) 12:38:42
VC#からWinAPIって使えるんですか?
31デフォルトの名無しさん:2007/12/07(金) 12:45:37
使える
32デフォルトの名無しさん:2007/12/07(金) 14:43:39
UTF-8をデコードする方法を教えてください
33デフォルトの名無しさん:2007/12/07(金) 14:48:31
このスレで聞いてるってことはAPIで?
MultibyteToWidechar()を使えばいい。
コードページはCP_UTF8
34デフォルトの名無しさん:2007/12/07(金) 14:55:42
>>33
そうですAPIで探していました。
ありがとうございます。
早速ためしてみます
35デフォルトの名無しさん:2007/12/07(金) 15:00:18
親ウィンドウのプロシージャ内から、ウィンドウを作成しようとしたのですが、
CreateWindowに失敗してしまいます。エラーコードは1401でメニューハンドルが無効とのことです。
このウィンドウは子ウィンドウではなく独立したウィンドウとして作成しています。

hMyWnd = CreateWindow(
"MyWnd", NULL,
WS_VISIBLE | WS_CLIPCHILDREN,
NULL, NULL, 300, 50,
NULL, (HMENU)MYWND, GetModuleHandle(NULL), NULL);

どこが間違っているのでしょうか?ちなみにメインとなるウィンドウプロシージャのWM_CREATE内で作成しています。
36デフォルトの名無しさん:2007/12/07(金) 15:06:26
(HMENU)のところ、IDを入れていいのはWS_CHILDな子ウィンドウだけだぞ
37デフォルトの名無しさん:2007/12/07(金) 15:15:05
hMenuのとこにIDが入ると子ウィンドウ ID 、ハンドルが入るとメニュー扱い。
38デフォルトの名無しさん:2007/12/07(金) 15:15:14
>>36
まじすか・・・。NULLにしてみたらウィンドウを生成できました。
実はこの後WS_EX_LAYEREDを追加したいので子ウィンドウには出来ないのですが、
WS_CHILD属性を持ってないと持ってないでまた不便ですね。
WS_EX_LAYEREDが子ウィンドウに使えたらいいのに・・・
39デフォルトの名無しさん:2007/12/07(金) 15:17:50
>>38
だからID使わないでLoadMenu使えばいいでしょ。
40デフォルトの名無しさん:2007/12/07(金) 15:44:56
メニューIDとウィンドウIDを混同してないか?
WS_CHILDなウィンドウでないとウィンドウIDは持てないぞ?
41デフォルトの名無しさん:2007/12/07(金) 15:47:26
Vistaのエクスプローラでは、サムネイルプロバイダから取ったイメージに
「動画用」とか「静止画用」みたいにフレーム装飾を付けて表示できますけど、
その「装飾済みのイメージ」を取得する方法ってないでしょうか?
42デフォルトの名無しさん:2007/12/08(土) 00:43:31
あほな質問してごめんなさいと言え
43デフォルトの名無しさん:2007/12/08(土) 00:47:28
あほな質問してごめんなさい
44デフォルトの名無しさん:2007/12/08(土) 00:58:31
ハッ!
4521:2007/12/08(土) 02:41:10
何がおかしいかというと、自分の考えとしては、クライアント領域がデスクトップ全面を覆ってしまう
ようになってほしかったのですが、(つまり、背景白のクライアント領域で、全く描画していない状態だと、
デスクトップが真っ白になるという状態)、タスクバーの部分だけはそのままデスクトップの壁紙が見えてるという状況になっているんです。

ShowWindow(FindWindow(TEXT("Shell_TrayWnd"), NULL), SW_HIDE); //これでタスクバーは消えます(壁紙が見えるようになる)
GetWindowRect(GetDesktopWindow(), &rc); //デスクトップのサイズを取得して
AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, TRUE); //それをクライアント領域のサイズとするように、ウィンドウの位置、サイズを取得
MoveWindow(hwnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE); //で、ウィンドウを移動&リサイズ
AdjustWindowで返されるRECT構造体を見る限り、自分の想定どおりの値が返ってきてるのですが・・・
46デフォルトの名無しさん:2007/12/08(土) 02:46:06
勝手にタスクバー消すのはどうかと…
それはそうと、たぶんWS_OVERLAPPEDがだめなんじゃないかなと思う
WS_POPUPにしてみたら?
47デフォルトの名無しさん:2007/12/08(土) 04:37:15
WS_OVERLAPPEDがダメな理由は??
48デフォルトの名無しさん:2007/12/08(土) 06:05:14
ジョークソフトなら兎も角、勝手にタスクバー消すなんて行儀悪すぎだろ

ま、どうしてもタスクバーが邪魔ならウィンドウを画面サイズにして最前面表示するかDirectXだろう
スクリーンセーバがやってる方法だな
49デフォルトの名無しさん:2007/12/08(土) 06:07:30
>>47
そんくらいググレ
50デフォルトの名無しさん:2007/12/08(土) 11:16:31
ウィンドウのリサイズ等をしたときにビットマップがちらついて困ってます。
CreateCompatibleBitmapというものを使えばちらつきが防げるようですがイマイチ使い方が分かりません。
WM_CREATEで
hBmpOff = LoadBitmap(((LPCREATESTRUCT)lp)->hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
のようにビットマップを読み込んだ後、WM_PAINTでどのような処理を行えばいいのでしょうか?
51デフォルトの名無しさん:2007/12/08(土) 11:50:28
局所的に使い方を理解しようとするから理解できない
順序だてて体系的に理解しろ。GDI全部覚えるつもりで

とりあえず↓読んでこい
http://wisdom.sakura.ne.jp/system/winapi/win32/win104.html

分からないならGDI最初から読み直せ
52デフォルトの名無しさん:2007/12/08(土) 12:41:30
>>51
一応全部読みました。ビットマップは画像と考えるよりもブラシと考えたほうがよさそうですね。
しかしやっぱり理解できません。WM_PAINTが発行されたときに、再描画領域にあるものは
一度全部消されるんですよね?InvalidateRectなどの引数でFALSEなどが指定された場合を除いては。
実際はこのCreateCompatibleBitMapはWM_CREATE内で何をするのでしょうか?
53デフォルトの名無しさん:2007/12/08(土) 13:21:15
CreateCompatibleBitmapから離れろよ

CreateCompatibleBitmapは
デバイスコンテキストと互換性のあるビットマップを作成する関数であって
これ自体がちらつきを抑える機能を持っているわけではない

ちらつきを抑えるってのは再描画をなるべくしない事だ
裏で別のデバイスコンテキストを用意して必要な描画を全て終えてから表に転送する
54デフォルトの名無しさん:2007/12/08(土) 13:35:48
なんでちらつくかというと、背景塗りつぶし→描画の過程が見えてしまうから。
背景を消去する必要が無ければ、ウィンドウの背景ブラシをNULLか
WM_ERASEBKGNDを自分で処理すればいい。
55デフォルトの名無しさん:2007/12/08(土) 13:56:43
まずは、ウィンドウクラスのスタイルから
CS_HREDRAWとCS_VREDRAWを外してからだな。
56デフォルトの名無しさん:2007/12/08(土) 14:10:51
その裏で用意するのがメモリDCですよね?それで裏で描画処理を終えてから表に転送するという事は、
背景塗りつぶし→描画 から 裏で描画→それで上書き になるって事で合ってますか?
なんかちょっと分かってきたような気がしないでもないような・・・

>>55
CS_HREDRAWとCS_VREDRAWをはずしたらちらつきがなくなりました。
なんか当然のようにいつも指定しているスタイルなので盲点でした。
しかし、このスタイルよく考えたらあまりいらないな。。。
57デフォルトの名無しさん:2007/12/08(土) 15:03:38
要らなくはないだろ。

でも、HREDRAWとVREDRAWに分ける意味は分からん。
単独で使うことあるのか?
58デフォルトの名無しさん:2007/12/08(土) 16:44:53
スクロール方向が固定ならありかもね
59規制中のため代理レスです:2007/12/08(土) 18:12:04
>>21
 ゲームのように一定のサイズ(800x600など)でしたいわけではないんですよね。ChangeDisplaySettingsとかでやったり、DirectXのメソでやったりあるが。スクリーン全体の幅を求めるのは GetDeviceCapsとかもある。

プロシャージャ内で
 static RECT rcClient; 作成時にでもとっておくGetWindowRect(hWnd, &rcClient);
 static RECT rcScreen; GetWindowRect(GetDesktopWindow(), &rcScreen); AdjustWindowRect(&rcScreen, WNDSTYLE, FALSE);
フル化したいとき MoveWindow(hWnd, rcScreen.left, rcScreen.top, rcScreen.right - rcScreen.left, rcScreen.bottom - rcScreen.top, TRUE);
元に戻したいとき MoveWindow(hWnd, rcClient.left, rcClient.top, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, TRUE);

 case WM_GETMINMAXINFO: {
   RECT rc; LPMINMAXINFO lpmmi = (LPMINMAXINFO)lParam;
   GetWindowRect(GetDesktopWindow(), &rc); // デスクトップのサイズを取得して
   lpmmi->ptMaxSize.x = rc.right - rc.left; lpmmi->ptMaxSize.y = rc.bottom - rc.top;
   AdjustWindowRect(&rc, WNDSTYLE, FALSE); // 最大値を変更、終了時に元に戻したほうがいいかも
   lpmmi->ptMaxTrackSize.x = rc.right - rc.left; lpmmi->ptMaxTrackSize.y = rc.bottom - rc.top;
   } return 0;
改行多いとかで書き込めなかったので、読みやすいように書いてね。spy++でどういうメッセージやり取りしているのか見たけど、WM_NCCALCSIZEとか使うのかもしれないが。
60デフォルトの名無しさん:2007/12/08(土) 19:32:19
WM_TIMERだと精度が悪いんで、QueryPerformanceCounterを使って
タイマーイベントを発生させたいんですけど、単純にwhile文で回して
カウンタをインクリメントして、カウンタが一定値になる度にメッセージを
投げるようにすると、CPU使用率100%になってしまいます。
下記にソースを載せます。

CPU使用率を余り上げずに精度の高いタイマーイベントを取得する方法はないでしょうか。

unsigned __stdcall timerthread(void *lpx){
__int64 hindo;
int ms = *(int*)lpx;

if( QueryPerformanceFrequency( (LARGE_INTEGER *)&hindo ) == TRUE ) {
//hindoに、精度/secが入る
__int64 count; //
__int64 def_count; //

//ms(ミリ秒)ごとにMY_TYMERを送る
QueryPerformanceCounter( (LARGE_INTEGER *)&def_count );
while(1){
do {
QueryPerformanceCounter( (LARGE_INTEGER *)&count );
} while( count - def_count < (hindo*ms/1000) );
def_count = count;
SendMessage(hWnd_copy, MY_TIMER, NULL, NULL);
}
}
else {
Debug("***1.パフォーマンスカウンタは実装されていません。***");
}
return 0;
}
61デフォルトの名無しさん:2007/12/08(土) 19:35:54
ms単位の制御は無理だろ…Windowsじゃ
62デフォルトの名無しさん:2007/12/08(土) 19:56:22
その関数の頭に
timeBeginPeriod(1);
を入れて
ループの中に
Sleep(1);
を入れて
最後に
timeEndPeriod(1);
を入れるんだ
63デフォルトの名無しさん:2007/12/08(土) 21:08:36
64デフォルトの名無しさん:2007/12/08(土) 21:13:40
65デフォルトの名無しさん:2007/12/08(土) 21:13:48
timeSetEvent
66デフォルトの名無しさん:2007/12/08(土) 22:27:13
>60
昔見た手法ではWM_TIMERで大まかに時間を刻んで、残りをQueryPerformanceCounterで
時間待ちをして精度を出すってのをやってたが。
67デフォルトの名無しさん:2007/12/08(土) 22:55:10
fpsに大体合わせて動作させるのに、
マルチメディアタイマーで1ms毎に割り込ませつつ、
予め作っておいた時間間隔テーブルに合わせて実行
ってな感じの作り方をしたことがあるな。ゲームじゃないけど。
テーブルは、60fpsだと{ 16, 33, 50, ,,, }という風に1秒分を整数演算で生成。
6860:2007/12/08(土) 23:10:23
>>61-67

timeBeginPeriod, timeEndPeriod, timeSetEventを使ってみたところ
安定してタイマイベントを発生させることが出来ました。

ありがとうございました。
69デフォルトの名無しさん:2007/12/09(日) 08:34:58
>>59
ありがとうございました。
思い通りの結果が得られました。
貴重な助言、ありがとうございました。

いまいちMINMAXINFOのそれぞれのメンバーがどういった効果を持つのか不明なので
いろいろ実験してみます。
本当にありがとうございました。
70デフォルトの名無しさん:2007/12/09(日) 08:42:11
>>69
> MINMAXINFO

Windows がウィンドウサイズを変更する前にそのウィンドウに
「君はどの範囲でサイズを変更してもいいのかな?」
とお伺いを立てるメッセージとその返却に使う構造体。
71デフォルトの名無しさん:2007/12/09(日) 10:45:34
>>70
それはわかってるんだけど、ptMaxSizeに値を設定して、ptMaxTrackSizeに値を入れないと
全画面化したときに、タスクバーの部分は除外されてしまうし、
ptMinTrackSizeに値をいれないと、クライアント領域がほとんどゼロみたいなウィンドウが表示されるし
そこら辺を色々試してみようかな、と思ってる
72デフォルトの名無しさん:2007/12/09(日) 13:36:31
>>70-71
lpmmi->ptMaxSizeは必要ないな
ptMaxTrackSizeさえ設定しておけばOK、のようだ
73デフォルトの名無しさん:2007/12/09(日) 16:01:01
VC2005でオーナードローを使ってテキストボックスの描画の殺し方を教えてください。
ボタン等のオーナードローの方法は分かるのですがテキストボックスのオナードローは良く分かりませんでした。

ご教授よろしくお願いします
74デフォルトの名無しさん:2007/12/09(日) 16:29:01

WindowsXP SP2 VC++6.0で動くプログラムの
共有メモリについて質問があります。

ページングとメモリマップドファイルについて
以下の認識であっていますでしょうか?

1) Windowsでメモリを確保した場合、OSの決めた優先順位により、ページング作業で
  特定できないタイミングで外部記憶装置に書き込まれる場合がある。

2)メモリマップドファイルはメモリ上に配置され、実際にファイルに書き込むことはしない。
 ただしページングは発生する。

3)設定でページング無しにすると、ページングは発生しない。

4)物理メモリを動的に確保する場合、要求サイズを超える連続した物理メモリが無い場合
 ページング作業が発生する。3)でページングなしにすると確保できない。

3Mのデータを動的にメモリに確保して処理する作業を一定時間で1日2万件くらい処理した
いのですが、ページングが発生すると、問題がありそうなのでどうにかしたいのです。
75デフォルトの名無しさん:2007/12/09(日) 16:40:39
>>74
まず、仮想メモリと物理メモリについて調べるとよさげ。

プロセスから見えるメモリ空間が仮想メモリで、これを適当なサイズで区切ったのがページ。
物理メモリも同じサイズで区切って、これらを 1:1 で対応付けるのが OS の仕事。
使ってないと判断されたプロセスの特定ページをディスクに退避して空きを作るのがページング。
退避した仮想アドレスにアクセスが発生した瞬間に OS が検知して書き戻す。
たとえ物理メモリ上でページが連続していなくても、仮想メモリ上では連続して割り当てられる。

普通のアプリケーションならこんなこと気にする必要はない。
プロセスから見えるアドレスはいつでも連続してるし存在してると仮定しておk。
直接物理メモリをどうこうするのはデバイスドライバとか書かないとできない。
76デフォルトの名無しさん:2007/12/09(日) 17:36:18
質問です。

最前面化したウィンドウを一切入力が出来ないようにするにはどうすればいいのでしょうか?

SetLayeredWindowAttributesで半透明化し、SetWindowPosで最前面化したウィンドウ(A)をEnableWindowで入力無効化してみたののですが、その下に透けて見えているウィンドウ(B)を操作することが出来ません。
(AとBが重なっていない所ではBを操作できるのですが、重なっているとろでマウスクリックをすると、Bからフォーカスが外れてしまう)

イメージ的には「マウスカーソルをAとBの間に滑り込ませる」ようにしたいと思っているのですが、どうやったらそれが出来るのかがわかりません。

お願いします。
77デフォルトの名無しさん:2007/12/09(日) 18:09:32
むり
78デフォルトの名無しさん:2007/12/09(日) 18:13:46
レイヤードウィンドウなら、WS_EX_TRANSPARENTをつければ、マウス操作は全部透過するはず。
7976:2007/12/09(日) 18:25:45
>>78
その方法で出来るようになりました。ありがとうございます。
80デフォルトの名無しさん:2007/12/09(日) 18:36:58
>>74
1) ある。
2) なんのこっちゃわからん。
3) 発生する。例えばプログラムの実行コードはexeファイルをメモリマップしてるだけなので、コードを実行するその時々に必要な部分部分だけをexeファイルからページインし、そのメモリを他の用途に使う必要が生じたらページアウトする。
4) 物理メモリが連続してる必要は無い。飛び飛びでも空いてれば使える。ページングなしに設定していれば、exeの実行コードとかディスクキャッシュといった、再ロード可能/破棄可能なページを回収して要求に応える。それでも足りなければ確保できない。
81デフォルトの名無しさん:2007/12/09(日) 21:02:25
VC++ 6.0を使っているんだけど
cのソースファイルから開くとワークスペースが無いので
コンパイルやビルドしようとすると

このビルドコマンドにはアクティブプロジェクトワークスペースが〜って出てはいをクリックするとデフォルトのワークスペースが作成されますよね?

でも、今私が見ているソースは主にwin32アプリケーションなので
プロジェクトの設定がwin32アプリケーションの方が都合が良いわけです。

デフォルトのワークスペースをwin32アプリケーションに対応する方法などはありませんか?
82デフォルトの名無しさん:2007/12/09(日) 21:40:27
それはWin32APIの質問なのか?
83デフォルトの名無しさん:2007/12/09(日) 21:43:55
>>82
違うな
84デフォルトの名無しさん:2007/12/09(日) 22:31:38
>cのソースファイルから開くとワークスペースが無いので
>コンパイルやビルドしようとすると
>このビルドコマンドにはアクティブプロジェクトワークスペースが〜って出てはいをクリックするとデフォルトのワークスペースが作成されますよね?

ふつーcl。
85デフォルトの名無しさん:2007/12/10(月) 00:27:48
74です。回答ありがとうございます。

仮想メモリと物理メモリをもう少し理解を深めてきます。
86デフォルトの名無しさん:2007/12/10(月) 00:30:31
>>81
こちらでどうぞ。

★初心者にVisual C++を教えるスレ★ Part28
http://pc11.2ch.net/test/read.cgi/tech/1196430042/
87デフォルトの名無しさん:2007/12/10(月) 01:38:27
今時VC6てw

と、ドトネトインスコしたくないのでVC6使ってる漏れが言ってみる
88デフォルトの名無しさん:2007/12/10(月) 01:40:58
VC2005だって、ドトネト使わない開発できるだろ? 
もしや俺の知らないところで、ドトネト暗躍してるのか!? いやユーザに配布してんだ、そんな筈は!
89デフォルトの名無しさん:2007/12/10(月) 02:32:38
msvcrt.dllを使うために未だにVC6。
90デフォルトの名無しさん:2007/12/10(月) 04:35:32
ファイル名として適切ではない文字を、「-」に置き換えてくれるような関数はないでしょうか?

例えば
int CheckPath(LPCTSTR lpPath, LPTSTR lpCheckedPath);
lpPathで、例えばユーザーが入力したパス「ホゲホゲ12/10」を「ホゲホゲ12-10」に直して返してくれるような関数です。
IEなんかにも実装されていると思うんですが
91デフォルトの名無しさん:2007/12/10(月) 04:44:57
それぐらい自分で作れよ
92デフォルトの名無しさん:2007/12/10(月) 05:37:30
>>90
PathCleanupSpec()
93デフォルトの名無しさん:2007/12/10(月) 08:10:38
ウィンドウがアクティブかノンアクティブかを調べるにはどうすればいいですか?
WM_ACTIVATEにおいてフラグを設定しているのですが、イマイチ挙動がおかしいような気がします。
ウィンドウのアクティブ状態を調べるにはWM_ACTIVEでフラグを設定するだけではいけないのでしょうか?
94デフォルトの名無しさん:2007/12/10(月) 09:16:04
アクティブウィンドウって一個じゃないよ
フォアグラウンドウィンドウは一個だけど
95デフォルトの名無しさん:2007/12/10(月) 09:32:54
>>94
MSNのメッセンジャーみたいに、ノンアクティブの時に右下にウィンドウを出したいのですが、
あれはアクティブでない時にウィンドウを出してるのではなく、フォアグラウンドでない時に出してるってことですか?
今までのアクティブの認識が間違ってたせいか、ちょっと混乱しています。
フォアグラウンドになった時、フォアグラウンドでなくなった時に発行されるメッセージとかあるのでしょうか?
96デフォルトの名無しさん:2007/12/10(月) 09:40:26
メッセージはWM_ACTIVATEだったと思う

WM_ACTIVATEで次にアクティブになるウィンドウを調べて
自スレッドの所属してなければ非フォアグラウンド化でいいんでは
97デフォルトの名無しさん:2007/12/10(月) 09:52:05
>>86
すみません。そちらで訊いてきます。
98デフォルトの名無しさん:2007/12/10(月) 09:57:14
>>96
あれ?WM_ACTIVATEで処理してたんですけどね・・・
WPARAMの下位ワードの値を見てWA_INACTIVEだったらアクティブフラグをFALSEに
それ以外の値であればアクティブフラグをTRUEにするのではダメですか?
99デフォルトの名無しさん:2007/12/10(月) 12:38:35
>>93
その用途ならWM_ACTIVATEAPPかも。
100デフォルトの名無しさん:2007/12/10(月) 13:33:33
ウィンドウが最小化されてるかどうかを調べる関数が思い出せない。
なんだっけ?
101デフォルトの名無しさん:2007/12/10(月) 13:39:05
IsIconic
102デフォルトの名無しさん:2007/12/10(月) 14:02:24
それだ!Thx!
103デフォルトの名無しさん:2007/12/10(月) 14:05:45
>>99
おぉそれを使ってなんとかできました。
アクティブ化の判定をWM_ACTIVATEでwpの上位と下位ワードを使って行って、
非アクティブ化の判定をWM_ACTIVATEAPPのwpの値を使ってやりました。
ありがとうございました。
104デフォルトの名無しさん:2007/12/10(月) 14:26:56
と思ったら、なんかタスクバーをクリックで最小化する時の動作が若干変に・・・
メインウィンドウと、メインウィンドウ内で作成したTOPMOSTのレイヤードウィンドウがあるのですが、
メインウィンドウがノンアクティブになったら、レイヤードウィンドウを非表示にするという動作をします。
ここで、タスクバーのアイコンを2回押さないと最小化しないのですが、どういう原因が考えられますかね?
105デフォルトの名無しさん:2007/12/10(月) 14:33:20
て、分かるわけないですね、ソースもうpせずに。
とりあえずタスクバーのアイコンをクリックして最小化するのと、
ウィンドウの右上の _ マークを押して最小化するのと、何が違うのでしょうか?
詳しくは分からないのですが、タスクバーをクリックして最小化しようとすると、
一回目のクリックで、一瞬ノンアクティブになってまたすぐにアクティブになるような挙動をしてるように思えます。
2回目のクリックでは普通にノンアクティブになる感じなのですが・・・
106デフォルトの名無しさん:2007/12/10(月) 14:43:35
つspy++
107デフォルトの名無しさん:2007/12/10(月) 14:47:41
>>105
>タスクバーのアイコンをクリックして最小化するのと、
>ウィンドウの右上の _ マークを押して最小化するのと、何が違うのでしょうか?

タスクバーをクリックして最小化
→まずタスクバーがアクティブになる
108デフォルトの名無しさん:2007/12/10(月) 14:47:47
っと自己解決しました。原因は↓でした。
メインウィンドウがアクティブになると、それまで非表示にしていたTOPMOSTのレイヤードウィンドウを再表示に。
ここでShowWindow()によってフォーカスがレイヤードウィンドウに移動、メインウィンドウはフォーカスを失う。
次にタスクバーのアイコンをクリックするけど、ここでは最小化せずに、フォーカスがメインウィンドウに移動するだけ。
最後にタスクバーのアイコンをクリックでようやく最小化しました。
てことで、ShowWindowのあとにSetFocusでメインウィンドウにフォーカスを持っていくことで解決しました。
一人で騒いでてすみませんでした。

>>106
spy++苦手だったり・・・。
109デフォルトの名無しさん:2007/12/10(月) 14:50:36
つSW_SHOWNOACTIVATE
110デフォルトの名無しさん:2007/12/10(月) 14:53:09
>>109
なんと・・・。今までSW_HIDEとSW_SHOWしか使ったことなかったのですが、
それキーワードにググって見たらShowWindowにも色々定数が用意されてるんですね。
これを機会に色々覚えておこう・・・
111デフォルトの名無しさん:2007/12/10(月) 16:23:42
覚える必要はない。MSDNで調べるクセをつけろ。
112デフォルトの名無しさん:2007/12/10(月) 20:49:39
>>110
ってか……ShowWindow使ってりゃ、何があるかぐらい分かるだろ。
調べるのはSW_SHOWやSW_HIDEではなく、ShowWindowの方だぞ。
113デフォルトの名無しさん:2007/12/10(月) 21:56:09
ウィンドウを強制的に再描画させるためにInvalidateRectを使ってるんですが
描画がやたら重くなってしまいます
WM_PAINT以外を受け取ったときに再描画する、もっとスマートな方法はあるでしょうか?
114デフォルトの名無しさん:2007/12/10(月) 22:16:05
>>113
WM_PAINT以外では描画してはいけない、という決まりは無い。
WM_PAINTのハンドラとは別に、
更新に必要最小限の描画だけを行うルーチンを用意すればいい。
再描画の際に、クリップ系APIで本当に描画が必要な領域を
判定するだけで済む話かもしれないけど。
115113:2007/12/10(月) 22:53:06
>>114
普通にBitBltで描画したら若干軽くなりました。
でもなんだか根本的な不具合が解決してないっぽいので
もう少し調べてみます。ありがとうございました。
116デフォルトの名無しさん:2007/12/10(月) 23:01:44
だぶるばっふぁりんぐ
117デフォルトの名無しさん:2007/12/11(火) 00:38:53
子プロセスとして起動させるコンソールアプリケーションの標準出力を奪い取り処理したいと考えています
FStartupInfo.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
FStartupInfo.wShowWindow := SW_HIDE;
CreatePipe(FhStdout, hStdout, @FSecurityAtt, BUFF_SIZE-1);
にてパイプを作成し、
CreateProcess(nil, PChar(name), @FSecurityAtt, nil, true, CREATE_NEW_CONSOLE, nil, nil, FStartupInfo, FProcessInfo);
にてプロセスを作成し、PeekNamedPipeにて取り出しています
負荷の軽い処理の場合は問題なく動作するのですが、重い場合(重いI/O処理を行っている場合)は標準出力を拾えません
処理が軽くなってからまとめて取り出されます。

データの取りこぼしこそありませんが、リアルタイム性を重視しているため困っています
ためしにコンソール(cmd.com)からプロセスを起動してみると標準出力には送られていますし
標準入力をはき出すecho.exeを作成し、cmd.comからecho.exe|target.exeとすればちゃんとパイプ処理されます

多分、CreatePipeで作成されたパイプはバッファをフラッシュされない限りPeekNamedPipeで拾えないように思えるのですが、何か方法はありませんか?
CreateProcessで 'CMD /C target.exe'とcmd.comを通す方法も試してみたのですがダメでした
118デフォルトの名無しさん:2007/12/11(火) 01:07:49
子プロセス側が、自前のバッファリング機構をもっているというオチではなかろうね
119デフォルトの名無しさん:2007/12/11(火) 02:54:56
>>92
PathCleanupSpecを使ってみたけど、戻り値は0だし、第二引数の文字列にも何も返ってこない
120デフォルトの名無しさん:2007/12/11(火) 03:31:20
>>119
自作すればいいだろ
その程度の文字列処理もできないならC言語を勉強し直した方がいい
121デフォルトの名無しさん:2007/12/11(火) 04:04:07
>>118
stdio.hを利用した一般的なコンソールアプリケーションは意識的、無意識的を問わずバッファリング機構を使用していると理解しています
122デフォルトの名無しさん:2007/12/11(火) 04:05:46
PathCleanupSpecだって \/:*?"<>| を取り除いてるだけだしね
123デフォルトの名無しさん:2007/12/11(火) 04:07:39
>>121
そういう問題じゃなくて、子プロセスが出力をプールするバッファを持ってて
一定量になる度にパイプに出力してんじゃねえのかって話
124デフォルトの名無しさん:2007/12/11(火) 07:04:27
>>119
MSDNは読んだか?
APIの使い方はあってるんだよな?

であれば、残念ながらこのAPIでは要件を満たさないようなので、>>120の言うとおり自作するしかないね。
125デフォルトの名無しさん:2007/12/11(火) 07:11:20
shiftjisで渡してんじゃないの?
unicodeだぞ
126デフォルトの名無しさん:2007/12/11(火) 07:18:53
>>122
そういう動作をしてもらいたいんだけど、試したけどうまくいかないです。

>>124
APIの使い方、というほど複雑ではないと思います。文字列の受け渡しは、どのAPI関数でも同じですので
間違ってはいないと思うのですが

>>125
一応テスト・プログラムをUNICODE識別子つけて作ってますので、それは大丈夫ではないかと

例をあげると、ビジネス版の
http://news24.2ch.net/test/read.cgi/bizplus/1197293849/l50をIEでローカルファイルに保存する場合、ファイル名は
【金融】スイス最大手銀のUBS、サブプライム関連評価損を100億米ドル追加計上 [07/12/10].htm
ではなくて
【金融】スイス最大手銀のUBS、サブプライム関連評価損を100億米ドル追加計上 [07-12-10].htm
となります。
こういう動作をさせたいのですが・・
自作自作と、このくらい自作するのは訳ありませんが、APIの用意されてるならそれを使いたいと
127デフォルトの名無しさん:2007/12/11(火) 07:41:53
SetTimer(hwnd, TM_START, 30, NULL);
でタイマーを作成したのですが、WM_TIMERメッセージが来ません。
NULLを返していないのでタイマーの作成でこけてるわけじゃないのですが・・・
どういう原因が考えられますか?
128デフォルトの名無しさん:2007/12/11(火) 07:48:38
>>126
そのAPIの呼び出し周りのソース晒せば?
129デフォルトの名無しさん:2007/12/11(火) 07:54:35
>>127
hwndが間違ってるとしか
130デフォルトの名無しさん:2007/12/11(火) 07:58:50
ありえないと思うけどWM_TIMERイベントの優先度はメッセージの中で一番低いから
他に処理すべきメッセージが入ってきてる時はGetMessageで取り出せない
131デフォルトの名無しさん:2007/12/11(火) 08:18:58
>>129-130
早い回答ありがとうございます。昨日からずっと悩んできたのですが、
今目的の動作をしました。しかし意味がよく分からないです。今から仕様を書きます。

メインウィンドウ生成 → スレッド作成
スレッド内でサーバーとのメッセージのやり取りを行う。
ある特定のメッセージが来たらCreateWindowでウィンドウ(新着ウィンドウ)を作成する。
新着ウィンドウのプロシージャでタイマーを作成し、一定時間が過ぎたら自分で自分を破棄する。
で、この新着ウィンドウの生成はmyCreateWindow()という関数を作り、そこで作成を行っています。
スレッド内からmyCreateWindow()を呼び出した場合、先ほどのようなタイマーが発行されないという問題が起きます。

しかし、このスレッド内からmyCreateWindowを呼び出すのではなく、
まずSendMessageでユーザ定義のメッセージをメインウィンドウに送り、
メインウィドウがそのメッセージを受け取ったら、そこでmyCreateWindowを呼び出し新着ウィンドウを生成する。
こんな流れて作成した場合正常に動作しました。全く意味が分からないのですが、
スレッド内からの関数呼び出しと、メインウィンドウからの呼び出しで何かが違うのでしょうか?
132デフォルトの名無しさん:2007/12/11(火) 08:22:26
嫌な予感…

別スレッドにTIMERイベントがポストされてないか?
133デフォルトの名無しさん:2007/12/11(火) 08:23:09
>>126
ここにぐだぐだ書いてる暇があったら自作できるだろ
時間を無駄にするなよw
134デフォルトの名無しさん:2007/12/11(火) 08:26:38
>>132
SetTimerが成功して、かつWM_TIMERが発行されない事を考えるとその可能性もないとは言い切れないですね。
一応spy++で確認したのですが、新着ウィンドウのプロシージャにWM_CREATEは来てませんでした。
しかし、新着ウィンドウのプロシージャのWM_CREATE内で、SetTimer(hwnd, , , );をしているのに
他のプロシージャにWM_TIMERが行く事ってあるのでしょうか?
一応新着ウィンドウのプロシージャの定義は
LRESULT CALLBACK NewWindowProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp);
としてますし・・・。もしかしてこのhwndに変な値が・・・いや、そんな事は・・・。
135デフォルトの名無しさん:2007/12/11(火) 08:27:43
>>134
すみません、書き間違えです。2行目のWM_CREATEはWM_TIMERの間違いです。
WM_CREATEが発行されてるのは確認できています。
136デフォルトの名無しさん:2007/12/11(火) 09:54:38
APIでは無いのですが、ビットマップフォントのフォントファイルを作るにはどうすればいいのでしょう?
.FONや.FNTは、バージョン2と3共に、開始文字と終了文字の指定が1バイトで、半角文字しか作れなさそうなのです。
137デフォルトの名無しさん:2007/12/11(火) 10:39:26
ウィンドウを作成したスレッドに、ウィンドウは属する。で、>>132
GUI系の操作はメインスレッドに統一するのが常識だ。
138デフォルトの名無しさん:2007/12/11(火) 11:22:16
馬鹿な質問をしてごめんなさいって家!
139デフォルトの名無しさん:2007/12/11(火) 11:31:26
ごめんなさい
140デフォルトの名無しさん:2007/12/11(火) 11:52:55
MFCも使っているのですが、APIに関連しているので、
こちらで質問させていただきます。

WindowsのTCHARって、Unicodeビルド時はwchar_tになりますが、
これは16ビットですよね。
ということは、TCHAR文字列はUTF-16しか扱えないということなのでしょうか。

UTF-8のUnicodeファイルを読み込んでCStringに入れ、
それをエディットボックスなどにSetWindowText()したいのですが、
単にUnicodeビルドでCStringにReadString()してもダメということでしょうか。
141デフォルトの名無しさん:2007/12/11(火) 12:00:03
CStringA使えばいいじゃない
142デフォルトの名無しさん:2007/12/11(火) 12:06:28
SendMessageで自分で定義したメッセージを送る時にWPARAMの上位ワードと下位ワードそれぞれに
値を格納したいのですが、どのようにすればいいのでしょうか?
LOWORD(wParam) = (WPARAM)hWnd;
HIWORD(wParam) = (WPARAM)hoge;
イメージ的には↑のようにしたいのですが・・・。
143デフォルトの名無しさん:2007/12/11(火) 12:06:58
>>128
static TCHAR szPath[MAX_PATH], szPathCleaned[MAX_PATH + 1];

iRet = PathCleanupSpec(szPath, szPathCleaned);
MessageBox(hwnd, szPath, APPNAME, 0); //当然これは入力したパスが表示されるが
MessageBox(hwnd, szPathCleaned, APPNAME, 0); //修正されたパスが表示されると思いきや、何も表示されない
wsprintf(szBuffer, TEXT("%d"), iRet);
MessageBox(hwnd, szBuffer, APPNAME, 0); //で、戻り値は「0」が返ってる

shlobj.hで見る限り、PathCleanupSpec関数の戻り値として期待される値は
#define PCS_FATAL 0x80000000
#define PCS_REPLACEDCHAR 0x00000001
#define PCS_REMOVEDCHAR 0x00000002
#define PCS_TRUNCATED 0x00000004
#define PCS_PATHTOOLONG 0x00000008
だから「0」はないんじゃないのかな、と思うんですが
144デフォルトの名無しさん:2007/12/11(火) 12:11:13
>>142
MAKELONG

ってこれはマクロだけど
145デフォルトの名無しさん:2007/12/11(火) 12:20:08
>>144
ありがとうございます。出来ました。
146デフォルトの名無しさん:2007/12/11(火) 12:36:13
>>142
HWNDは32bit値だからMAKELONGに食わせちゃだめだぞ
16bit以下の値でないと

64bit環境だとさらに問題だが
147デフォルトの名無しさん:2007/12/11(火) 12:37:01
>>143
第2パラメータはIN/OUT

とりあえず、↓でいいんじゃね?
lstrcpyn(szPathCleaned,szPath,MAX_PATH);
PathCleanupSpec(NULL, szPathCleaned);
148デフォルトの名無しさん:2007/12/11(火) 12:37:04
>>143
どう見ても使い方が間違ってます。本当にありがとうございました。
MSDN読まないで質問するなよ。
149デフォルトの名無しさん:2007/12/11(火) 12:38:22
>>140
UTF-8はMultibyteChar
150デフォルトの名無しさん:2007/12/11(火) 12:43:01
>>143
こんな馬鹿なら自前で作らせるよりAPI使わせた方がまだマシか
151デフォルトの名無しさん:2007/12/11(火) 12:53:20
>>146
そうでした。HWNDはLPARAMにぶち込みます。。。
152デフォルトの名無しさん:2007/12/11(火) 12:54:30
ウィンドウの背景色を動的に変えたいのですが、
ウィンドウクラスの登録の時に指定した色から変えることは可能でしょうか?
可能ならどういった関数が用意されてるのか教えてください。
153デフォルトの名無しさん:2007/12/11(火) 12:58:47
WM_ERASEBKGNDで処理しなさい
154デフォルトの名無しさん:2007/12/11(火) 13:05:54
>>153
ググって頑張ってみます。ありがとうございまいした。
155デフォルトの名無しさん:2007/12/11(火) 13:07:24
>>148 >>150
俺のPSDK Windows Server 2003 Familyには↓のように書いてあるんだよぉ!!!

pszDir
[in] A NULL-terminated Unicode string that contains the starting file path.
It must not exceed MAX_PATH characters in length, including the terminating NULL character.

pszSpec
[out] A string buffer that receives a NULL-terminated Unicode string that contains the cleaned file path.
This buffer should be at least MAX_PATH characters in length to avoid the possibility of a buffer overrun.
156148:2007/12/11(火) 13:16:50
>>155
正直すまんかった。M$もテキトーだなぁ。
157デフォルトの名無しさん:2007/12/11(火) 13:18:19
>>141
>>149
VCでのいわゆるUNICODEはwchar_t配列で、これはUTF16。
UTF8を扱うときには、結局はchar配列を使って読み込み、内部でTCHARに変換。
ということになりますでしょうか?
158デフォルトの名無しさん:2007/12/11(火) 13:20:10
>>155
最新のをチェックする癖をつけようぜ
webのは重いけど
159デフォルトの名無しさん:2007/12/11(火) 13:34:13
>>157
それであってると思われ
160デフォルトの名無しさん:2007/12/11(火) 13:38:32
>>123
それは無いようです
試しにVC++でコンソールアプリケーションを作成してfflush(stdio);を挿入した場合としていない場合では動作が違うため、標準ライブラリのバッファ動作が原因と考えています
しかしながら、cmd.comからの起動ではバッファをフラッシュするタイミングが違うのが理解できません・・・
161デフォルトの名無しさん:2007/12/11(火) 14:05:08
>>147
今試してみたら、完璧でした
本当にありがとうございました。
162デフォルトの名無しさん:2007/12/11(火) 14:35:23
>>155
そのAPIはSettlement Program Interfacesに載ってる元非公開APIだ
これらのAPIはドキュメントに嘘が多くて説明のいい加減な物が多い

例えば
>Minimum operating systems Windows 2000
と書かれているが実際は9xでも使える(ただし文字列引数がANSIになる)

しかも将来使えなくなる可能性もあると書かれてるものが多いので
自分で解決できないなら使わない方が無難なAPIってこった
163デフォルトの名無しさん:2007/12/11(火) 16:32:11
The Old New Thing のコメント欄て2chみたいだな
164デフォルトの名無しさん:2007/12/12(水) 04:00:55
>>162
Shell○○には、非公開のものが結構あるみたいですね。
終了ダイアログやアイコン選択ダイアログなんかも、dll内の関数の番号??を指定して呼び出すとか

typedef LONG (CALLBACK *SHCHANGEICONDIALOG)(HWND hwnd, LPCSTR szFileName, LONG Size, int *IconIndex);
SHCHANGEICONDIALOG SHChangeIconDialog=NULL;

hShell32 = LoadLibrary(TEXT("SHELL32.DLL"));
SHChangeIconDialog = (SHCHANGEICONDIALOG)GetProcAddress((HINSTANCE)hShell32, (LPCSTR)62);
bRet = (BOOL)SHChangeIconDialog(hwnd, (char*)wBuffer, MAX_PATH, IconIndex);

とか
昔の人は大変だったんだな
165デフォルトの名無しさん:2007/12/12(水) 09:13:50
>>159
了解です。ありがとうございます。
せっかくのUNICODEビルドなのに、結局は面倒臭い処理が入るのですね。
166デフォルトの名無しさん:2007/12/12(水) 09:59:21
>>165
だからUTF-8はマルチバイトだから当然だろ
API一発で変換できるのにめんどくさいんだったらプログラム書くのやめたら?
167デフォルトの名無しさん:2007/12/12(水) 10:22:59
>>165
UNICODE識別子(UTF-16)はWindows SDKやMS謹製ライブラリなどに対して、
「Unicode用のAPI、構造体、型などを使用する」と指示しているだけに過ぎない。
外のものに対しては関知しない。

面倒なら、.NETに移行したら?
StringクラスやMarshalクラスで簡単にHandlingできる。
それ相応の代償も必要だがw
168デフォルトの名無しさん:2007/12/12(水) 20:39:50
winsockで通信するプログラムを作成中なんですが、先ほど突然
Debugモードでビルドしたクライアントプログラムが、サーバプログラムと通信出来なくなってしまいました。

Debugモードでビルドしたクライアントプログラムがサーバプログラムにconnect()すると
connect()直後に通信が遮断されてしまいます。
Releaseモードでビルドしたプログラムは、今まで通り問題なく通信出来ています。
現象が起きる前のソースをビルドしても、Debugモードでビルドすると通信出来なくなってしまいました。

ファイアウォールやセキュリティソフトの設定も特にいじっていないのですが
原因として考えられることってありますか?
169デフォルトの名無しさん:2007/12/12(水) 22:59:13
socket自体には問題はないだろう
ws2_32.dllにデバッグモードも糞もない

ステップ実行で周辺洗ってみたら?
デバッグコードが何か悪さしてるんだろうけど
170168:2007/12/12(水) 23:23:39
>>169
ありがとうございます。

ステップ実行してみたところ、サーバ側ではacceptが終了した直後に
recvの返り値が0になり、通信が終了してしまっています。
また、クライアント側は非同期で通信していますが、connect()直後に
FD_CLOSEに飛んでしまい、やはり通信が終了してしまいます。

特にSOCKET_ERRORが出てるわけでもなく、手の打ちようがありません…。
171デフォルトの名無しさん:2007/12/12(水) 23:36:02
FD_CLOSE前後の条件分岐が未初期化とかなんじゃねーの。
172デフォルトの名無しさん:2007/12/12(水) 23:43:48
鯖、クライアントともに全ての closesocket や shutdown にブレークポイント仕掛けて実行してみれば?
173168:2007/12/12(水) 23:48:42
>>171
まさにそうでした。
いつの間にかそうなってたみたいです・・・ありがとうございます。

でもなんでreleaseモードだと切れなかったんだろう…。
174デフォルトの名無しさん:2007/12/12(水) 23:49:37
ヒューマンエラーでした
175168:2007/12/12(水) 23:57:51
FD_CLOSE前後の条件分岐のせいかと思ったんですけど、やはり違ったみたいです。
更に今度はreleaseモードでも切断するようになってしまいました。
FD_READには一度も入らないみたいです。もうわけがわかんないです・・・。
176デフォルトの名無しさん:2007/12/13(木) 00:08:16
>>175
ネットワークトレース見たのか
177デフォルトの名無しさん:2007/12/13(木) 00:21:57
デバッグ関係ないじゃん
TCPモニターでACKでも見てろ
178デフォルトの名無しさん:2007/12/13(木) 18:08:07
LoadImage()でDIBとしてロードした
ビットマップの色深度ってそのままなんでしょうか?

GetObject()で調べてみたんですが
ヘッダの情報では取得できないのか0になってるので分からなくて
179デフォルトの名無しさん:2007/12/13(木) 18:19:14
どうせハンドルが無効とか引数が間違ってるとかそんな所だろ
180デフォルトの名無しさん:2007/12/14(金) 01:13:20
オーナー描画のポップアップメニューで、
メニューアイテムで描画している画像をアニメーション表示したいのですが、
任意のタイミングでWM_DRAWITEMを発行させるにはどうすればよいでしょう?
181デフォルトの名無しさん:2007/12/14(金) 03:04:17
それはシステムが勝手に送ってくる奴だから無理ー

どうしてもやりたければメニューイベントをハンドリングして自分で書こう
182デフォルトの名無しさん:2007/12/14(金) 10:25:35
Alphaチャンネルマスクを持ったImageListを、ImageList_DrawIndirectでHDCに描画したのですが、
1bitマスクでしか描画してくれません。

ILD_TRANSPARENTだけではダメ?

TreeViewにセットしたら正しく描画されたので、ImageListは正しく作られてます。
183デフォルトの名無しさん:2007/12/14(金) 12:58:32
ILC_COLOR32付けてる?
XP以降?
184デフォルトの名無しさん:2007/12/14(金) 14:37:42
今は言いたくありません
185デフォルトの名無しさん:2007/12/14(金) 15:05:07
言いたくなるまで待ってるよ
嘘だけど
186デフォルトの名無しさん:2007/12/14(金) 15:12:59
ちょっと面白かった
187デフォルトの名無しさん:2007/12/14(金) 15:13:25
今言ってもいいですか?
188デフォルトの名無しさん:2007/12/14(金) 15:17:13
もうちょっとだけ待って!
189デフォルトの名無しさん:2007/12/14(金) 15:17:41
続けるのかw
190デフォルトの名無しさん:2007/12/14(金) 15:24:11
>>183
Vistaです。

ImageListはSHGetImageList(SHIL_SMALL)で取得したものです。

IImageList::GetItemFlagsを呼ぶとILIF_ALPHAが返ってきますし、
ImageList_GetImageInfoで取得したBitmapにGetObject(BITMAP)をかますと、
Image:32bit
Mask:1bit
で返ってくるためILC_COLOR32が指定されていると思います。

Visual Styleの指定もManifestで行っています。(CommonControl 6)
191デフォルトの名無しさん:2007/12/14(金) 15:34:36
我慢できずに言っちゃいました
192182,190:2007/12/14(金) 15:37:29
だれだよw
193デフォルトの名無しさん:2007/12/14(金) 15:38:48
いや、まだ早い
194デフォルトの名無しさん:2007/12/14(金) 16:49:22
えっ!
195デフォルトの名無しさん:2007/12/14(金) 21:26:12
質問です。

別プロセスの任意のウインドウ内に任意の図を描画したいのですが、どうすればいいでしょうか?
196デフォルトの名無しさん:2007/12/14(金) 21:32:55
ウィンドウハンドルさえ取得できれば、後はGetDCして描画できるんじゃない?
やったことないけど。
197デフォルトの名無しさん:2007/12/14(金) 21:43:57
それだけだとそのプロセスでWM_PAINTが来たら消されちゃうしゲームのように更新が多い場合もある。
198デフォルトの名無しさん:2007/12/14(金) 22:29:21
対象プロセスのWM_PAINTの処理を行った後に追加処理を行うことってできるんだろうか?
フックは対象プロセスの前だから・・・
199デフォルトの名無しさん:2007/12/14(金) 22:37:20
wndproc呼んだらええんやけどね
200デフォルトの名無しさん:2007/12/15(土) 00:07:46
>>198
SetWindowLongPtr辺り使ってゴリゴリ書いたら出来る気がしなくもない。
201デフォルトの名無しさん:2007/12/15(土) 01:24:54
できるけど結局フック使わにゃ
202デフォルトの名無しさん:2007/12/15(土) 04:54:05
>>160
Pipeのバッファ設定を0にすべし。
203デフォルトの名無しさん:2007/12/15(土) 10:04:55
エディットコントロールにSetWindowText();で文章を書いていくと、文章の積み重ねじゃなく上書きになってしまいます。

↓こうすると、最終的に うんこ しか表示されない
SetWindowText(main , "ほげほげ");
SetWindowText(main , "うんこ");

SetWindowText();の数が不特定多数で、ほげほげうんこ のように連結して表示させていくにはどうしたらいいですか。
変数適当に作ってwsprintfで地道に連結させていく方法しか思い浮かばないですが、APIでスマートにやる方法はありますか。
204デフォルトの名無しさん:2007/12/15(土) 10:05:49
SendMessageとEM_REPLACESEL
205デフォルトの名無しさん:2007/12/15(土) 10:11:22
普通に文字列連結した方がスマートじゃねえの?
206デフォルトの名無しさん:2007/12/15(土) 10:28:32
>>201
フックを使うにしても、対象プロセスの描画処理が終わった後に追加の描画処理を行うことに
なると思うのですが、それはどうすればいいのでしょうか?
207デフォルトの名無しさん:2007/12/15(土) 10:31:45
>>206
フックDLLにWM_PAINTをハンドリングするウィンドウプロシージャを入れておいて
SetWindowLongPtrで元のウィンドウプロシージャとおきかえる
208デフォルトの名無しさん:2007/12/15(土) 10:33:16
BeginPaintをフックすれば。
209デフォルトの名無しさん:2007/12/15(土) 10:35:34
いや、描画した後に上書きしたいんだろうから、この場合EndPaintだろ。
210デフォルトの名無しさん:2007/12/15(土) 10:40:43
>>204
おお、できました!ありがとうございます。

>>205
100行くらいになると重くなったりしそうなので。
211デフォルトの名無しさん:2007/12/15(土) 11:51:29
>>205
全然スマートじゃねぇだろ
212デフォルトの名無しさん:2007/12/15(土) 13:09:16
誘導されて来ました。

VC++でOpenCV使ってます。
画像を表示するとき、ウインドウの枠やタイトルバー、タスクバーなど
諸々が表示されないように全画面表示したいんですがどうしたらいいでしょう?
OpenCVのライブラリ見てみたんですが、具体的にどういう設定にするのかがわかんなくて・・・
cvNamedWindowの中に記述できるんでしょうか?
213デフォルトの名無しさん:2007/12/15(土) 13:10:27
グローバルキーボードフック(WH_KEYBOARD)をしているのですが、キーが押されると
nCode = 3, wp=押されたキーコード
nCode = 0, wp=押されたキーコード
と何故か2回フックプロシージャが呼ばれるのですがどうしてなんでしょう?(離されたときもまた2回呼ばれる。)
214デフォルトの名無しさん:2007/12/15(土) 13:14:39
winsockのプログラムにて
自分のPCの指定したポートが開いているかどうかを調べる、といった事をしたいのですが、
どのようにすればいいでしょうか?

bindを試すのはまた違いますよね・・
215デフォルトの名無しさん:2007/12/15(土) 13:36:12
>>212
マルチかよ
CreateWindowの引数でも弄ってろ
216212:2007/12/15(土) 14:10:02
DWORD dwStyle ってやつですか?分かりません><

>>215
誘導されて来た場合もマルチって言うんですか?
217デフォルトの名無しさん:2007/12/15(土) 14:26:41
>>216
氏ね
218212:2007/12/15(土) 14:41:59
OpenCVスレにも投稿したの忘れてました、すみません。
そちらに移動します。
219デフォルトの名無しさん:2007/12/15(土) 15:45:23
>>217
人に氏ね言うな
220デフォルトの名無しさん:2007/12/15(土) 16:46:28
>>219
氏ね
221デフォルトの名無しさん:2007/12/15(土) 16:55:02
>>220
歯ね
222デフォルトの名無しさん:2007/12/15(土) 17:08:47
あきた
223デフォルトの名無しさん:2007/12/15(土) 17:42:12
ここまでテンプレ
224デフォルトの名無しさん:2007/12/15(土) 18:15:20
質問です。
シェルのExplorerをKillProcessの様な強制的な方法以外で、APIを使って、安全に終了させる方法は何かあるでしょうか?
恐らく、シャットダウン時のような時には安全に終了させていると思うのですが...
タスクトレイにWM_CLOSE等を送ってもうまくいきませんでした

よろしくお願いしますm(__)m
225デフォルトの名無しさん:2007/12/15(土) 18:30:42
>>213
フックはキーボードが押されたときに呼ばれるのではなく、
GetMessageやPeekMessageでメッセージが処理されるときに呼ばれる。

PeekMessageでPM_NOREMOVEフラグが指定されたときにも
フックが呼ばれるので、それを使用しているアプリケーションでは
1回のキー入力で複数回フックが呼ばれる。

PM_NOREMOVEが指定されたかはcodeがHC_NOREMOVEかどうかで、
判別できる。
226デフォルトの名無しさん:2007/12/15(土) 20:38:28
>>224
エクスプローラに限らず外部から安全に終了させる一般的な方法は無い。
シャットダウンは個々のアプリを閉じてるわけじゃない。
シャットダウンしていい?と訊いた後、シャットダウンするからセーブするなら今のうちと通告して
ガチャンと電源切るようなもん。
227デフォルトの名無しさん:2007/12/15(土) 20:41:06
>>224
回答じゃないけど、OS再起動ダイアログ上でCtrl+Shift+Alt+ Esc or キャンセルクリックでエクスプローラを安全に終了できるね
セキュリティ上APIじゃ無理なんじゃないかな。
228228:2007/12/16(日) 00:41:03
質問です、現在ネットからHTMLを読み込むプログラムを作成しています。

//HTMLデータを取得する
BOOL GetHTMLData(const char* Agent, const char* URL, char* Buf){
   HINTERNET hInternet;
   HINTERNET hFile;
   DWORD ReadSize;
   BOOL Result;

   //インターネットハンドルの取得
   hInternet = InternetOpen(Agent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);

   //URLのオープン
   hFile = InternetOpenUrl(hInternet, URL, NULL, 0, INTERNET_FLAG_RELOAD, 0);

   //バッファへの読み込み
   Result = InternetReadFile(hFile, Buf, 65536, &ReadSize);

   //各種ハンドルをクローズ
   InternetCloseHandle(hFile);
   InternetCloseHandle(hInternet);

   return(Result);
}

といったプログラムです。
229228:2007/12/16(日) 00:43:05
上記の関数を作成し、http://table.yahoo.co.jp/t?c=2002&a=12&b=16&f=2007&d=12&e=16&g=w&s=1376.q&y=0&z=1376.q
を読み込もうとすると、本来は約37000バイトあるHTMLファイルの読み込みが何故か3928バイトで停止してしまいます(しかもTRUEを返す)
これは何故なのでしょうか、解決法を教授願います。
230デフォルトの名無しさん:2007/12/16(日) 01:15:21
Transfar-Encoding: chunkedなのに一気に読もうとしてるから
ReadSizeを見てループさせるべき

ネットワークプログラミング相談室 Port20
http://pc11.2ch.net/test/read.cgi/tech/1186418855/
231デフォルトの名無しさん:2007/12/16(日) 01:48:12
>>227
はじめて知った 
この機能で誰が喜ぶんだよ
232デフォルトの名無しさん:2007/12/16(日) 02:10:29
>>231
シェル拡張開発してる人
233228:2007/12/16(日) 02:21:55
>230
解決しました、ありがとうございます。
234デフォルトの名無しさん:2007/12/16(日) 02:41:31
>>226
やはりそうですか..
教えて頂きありがとうございます
>>227
初耳ですね
その方法の実行時に何か独自のメッセージがExplorerに届いていないか、Spyと睨めっこしてみます
ありがとうございましたm(__)m
235デフォルトの名無しさん:2007/12/16(日) 03:35:15
>>227
おぉ本当だ、地味に感動。
236デフォルトの名無しさん:2007/12/16(日) 03:35:52
>>224
古い記憶だけで書くのでウソの可能性が高いけど、
PostMessage( FindWindow("progman", NULL), WM_CLOSE, 0, 0 );
こんなかんじじゃだめかな。
237デフォルトの名無しさん:2007/12/16(日) 09:32:02
それで安全だという保証は(ry
238デフォルトの名無しさん:2007/12/16(日) 13:11:39
WM_SONYTIMERを止めるAPIを教えてください。
239デフォルトの名無しさん:2007/12/16(日) 13:11:49
WM_CLOSEで閉じたとしても、将来のバージョーンでも通用する保証は(ry
240デフォルトの名無しさん:2007/12/16(日) 13:16:06
>>238
ICompany::bankrupt
241デフォルトの名無しさん:2007/12/16(日) 13:18:52
しまったAPIスレだったorz
242デフォルトの名無しさん:2007/12/16(日) 16:22:45
タスクトレイに常駐アイコン作ってます。
常駐アイコンにマウスをポイントした時に表示される文字列を
変更するのってどうしたらいいんですか?
マウスポイントされるたびに変更したいのです。
文字列の変更の仕方と
マウスポイントされたイベントを受け取るメッセージを教えて下さい。

常駐アイコンはこうやって作りました。
ntfyIcon.cbSize = sizeof( NOTIFYICONDATA );
ntfyIcon.uID = 0;
ntfyIcon.hWnd = hWnd;
ntfyIcon.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
ntfyIcon.hIcon = LoadIcon(ghInst, (char*)IDI_ICON);
ntfyIcon.uCallbackMessage = WM_USER_ICON;
strcpy( ntfyIcon.szTip, "あああ
Shell_NotifyIcon( NIM_ADD, &ntfyIcon);
243242:2007/12/16(日) 16:30:46
ごめんなさい。
自己解決です。

変更は
Shell_NotifyIcon( NIM_MODIFY, &ntfyIcon);
マウスポイントは
WM_MOUSEMOVE ←とりあえずコレでいけたっす

お騒がせごめんなさい
244デフォルトの名無しさん:2007/12/16(日) 17:24:26
質問です。
SetWindowsHookEx( )を使って、特定のウィンドウにポストされる
メッセージをフックするにはどうすればよいでしょうか。
SetWindowsHookExを呼び出すのはDLLからで、
対象のウィンドウはそのDLLをロードするアプリケーションが生成したものです。
そのアプリケーションのウィンドウハンドルは取得できています。
245デフォルトの名無しさん:2007/12/16(日) 17:32:21
ReadFile()で読み込んだ文字列が文字化けして印字されてしまって困っています。
バグが出る最小単位のプログラムを書いたので、下に記載します。

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){

HANDLE hFile;

hFile = CreateFile(TEXT("test.txt"), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if( hFile != INVALID_HANDLE_VALUE ){
TCHAR buf[256];
DWORD readsize;

// bufに読み込んで、結果をメッセージボックスに表示
ReadFile(hFile, buf, sizeof(buf), &readsize, NULL);
buf[readsize] = TEXT('\0'); // 末尾に'\0'が無いので付加

MessageBox(NULL, buf, TEXT("結果"), MB_OK );

CloseHandle(hFile);
}
return TRUE;
}
246245:2007/12/16(日) 17:33:53
開発環境:Visual C++ 2008 Expression Edition
OS:Windows Vista Business

buf[]にテキストファイル(test.txt)からファイルサイズ(readSize)分だけ文字列を読み込み、格納しているだけです。
borland C++ 5.5.1 for Win32 でコンパイル&実行すると文字化けしないのですが、VC++2008だと文字化けしてしまいます。

実際に作成しているプログラムは既に合計で2k行程になっており、ファイル数もそれなりに多くなっているので、できることならこのままVC++2008で開発を続けたいです。
何かお心当たりある方がいらっしゃいましたら、何卒ご教授くださいませ・・・。
247デフォルトの名無しさん:2007/12/16(日) 17:37:13
>>245
UNICODEでコンパイルしてANSIなファイルを読み込んでるんだろ。
TCHARとかTEXT()も何を意味してるか分かって使ってる?
248デフォルトの名無しさん:2007/12/16(日) 17:37:45
>>246
プロジェクトのプロパティの構成プロパティ-全般の文字セットをマルチバイト文字セット使用にする
249245:2007/12/16(日) 17:39:17
ちなみにfopen()、fseek()、fread()などを使って試してみたのですが、それでも同様に文字化けしてしまいました。
250デフォルトの名無しさん:2007/12/16(日) 17:40:23
って2008のEEなら英語版か。まあ見りゃわかるっしょ。
251245:2007/12/16(日) 17:44:30
>>247
いえ、一度ANSI文字を表示できるようにコードを書き直してやってみたのですが、そちらも文字化けしてしまいました・・。

>>249
試してみます。
252245:2007/12/16(日) 17:49:03
>>249
できました。ありがとうございました!

ちなみに上の
一度ANSI文字を表示できるように〜〜 > 一度ANSI文字だけを表示できるように〜〜
の間違いです。

とりあえず皆さんありがとう!
253デフォルトの名無しさん:2007/12/16(日) 17:56:48
>>252
ANSIビルド、UNICODEビルド、TCHAR、TEXT()あたりをよく調べておくことをお薦めする。
UNICODEビルドのままでやるなら、>>245のReadFileとMessageBoxの間に、
MultiByteToWideCharなどでコード変換が必要。
254デフォルトの名無しさん:2007/12/16(日) 17:59:44
いまどきマルチバイト文字でビルドを薦めるなよ。
後々苦労するぞ。
255デフォルトの名無しさん:2007/12/16(日) 18:25:53
>>254
興味深いので詳しく。
256デフォルトの名無しさん:2007/12/16(日) 18:44:34
というか、普通は_T()とかじゃねーの? いちいち限定する必要あるん
257デフォルトの名無しさん:2007/12/16(日) 19:00:12
マルチバイトに慣れてる奴はTでいいと思うけど
近頃VC始めた漏れは混乱するのでユニコードに統一してまつ
258デフォルトの名無しさん:2007/12/16(日) 19:48:05
マルチバイトのビルドにした途端にCreateProcessWithLogonWみたいなのがキレるから
259デフォルトの名無しさん:2007/12/16(日) 20:32:10
ビジュアルエディタを使って、ダイアログ内に
コンボボックスを作成しているのですが、表示がうまくいきません。

HWND combo = GetDlgItem(hWnd, IDC_COMBO1);
SendMessage(combo, CB_ADDSTRING, 0, (LPARAM)"test01");
SendMessage(combo, CB_ADDSTRING, 0, (LPARAM)"test02");
SendMessage(combo, CB_ADDSTRING, 0, (LPARAM)"test03");
SendMessage(combo, CB_SETCURSEL, 2, 0);
上のようにデフォルトではtest03が表示するようにしているのですが、
右隅のドロップダウンボタンをクリックしても、test01とtest02が表示されません。
プロパティの設定が間違っているのでしょうか?

SendMessage(combo, CB_GETCOUNT, 0, 0);はちゃんと3を返します。
CB_SETCURSELで番号を指定して、デフォルトでtest01、test02の表示はできました。
ドロップダウンだけが表示されません。




260デフォルトの名無しさん:2007/12/16(日) 20:37:30
コンボボックスの高さが足りてないとか。
261デフォルトの名無しさん:2007/12/16(日) 21:06:20
>>260
すみませんどのように変えるか分からないのですが。
262デフォルトの名無しさん:2007/12/16(日) 21:12:00
CreateWindowの引数を変えればおk
263デフォルトの名無しさん:2007/12/16(日) 21:22:28
>>262
Visual Studioのリソースビューから作っているのでrcファイルをいじらないと
だめですかね?CreateWindowをまず試してみます。
264デフォルトの名無しさん:2007/12/16(日) 21:28:47
リソースビューで作ったことないから知らないが、
それならリソースファイルいじらなくてもウィンドウの大きさ変えれるだろ。
普通ににょーんってすれば。
265デフォルトの名無しさん:2007/12/16(日) 21:33:32
>>264
それが、横幅しか変えられないんですよ。
266デフォルトの名無しさん:2007/12/16(日) 21:35:21
リソースエディタで、一回「▽」を押すと、縦幅が変えられた希ガス。
というか、これってコンボボックスのFAQだった希ガス。
267デフォルトの名無しさん:2007/12/16(日) 21:42:14
>>263
rcファイル弄るのが早いだろ
数字かえるだけだ
268デフォルトの名無しさん:2007/12/16(日) 21:42:17
>>266さん
やった!できました!!ありがとうございます。
って何でこんな分かりにくいとこに(泣)
いやあ解決して良かったです。みなさんご協力ありがとうございました。
269デフォルトの名無しさん:2007/12/16(日) 22:12:42
270デフォルトの名無しさん:2007/12/16(日) 22:39:13
有勝 卓
271てるてる坊主:2007/12/16(日) 23:49:53
BCC Developerを使って(APIとC++言語)で、ウィンドウアプリケーションを作っているんですが、
まだ始めたばかりでわからない事がある為 質問させてください。

ファイルを開く際に GetOpenFileName() 関数を使うと思うのですが、マクロを含むエクセルファイル
は開けるのでしょうか??(そもそも、エクセルファイルが開けるかが分かってないのですが・・・)

これまで「猫でも・・・」を読ませて頂いていたのですがこの辺の詳細が載っていなかったので
質問させて戴きました
272デフォルトの名無しさん:2007/12/16(日) 23:51:15
最大化ボタンは有効のままで(他の事に使うので)
押されたときに無視するにはどうすればいいの?
273デフォルトの名無しさん:2007/12/16(日) 23:53:20
>>271
GetOpenFileNameは、「ファイルを開く」ダイアログでファイルを選択するところまで。
実際にファイルを開いてくれるわけではない。
274デフォルトの名無しさん:2007/12/16(日) 23:54:11
>>272
WM_SYSCOMMAND
275デフォルトの名無しさん:2007/12/16(日) 23:57:01
僕ハッカー!!!!
276デフォルトの名無しさん:2007/12/17(月) 00:07:31
case WM_SYSCOMMAND:
if((wParam & 0xFFF0) == SC_MAXIMIZE)
{
 // 最大化ボタンなら無視
 break;
}
277デフォルトの名無しさん:2007/12/17(月) 00:14:24
>>274
どうも
>>276
できますた
278てるてる坊主:2007/12/17(月) 00:15:12
>>273
そうなんですね・・・。

上記に記載してあった参考URL「Win32 API入門」中の”ファイル選択”を
見た限りだと、htmlファイルの開き方のプログラムが載っていたんですが
少しソースを変えればエクセルファイルも見れるようになるんですかね・・・??
279デフォルトの名無しさん:2007/12/17(月) 00:37:50
>>278
htmlだろうと、xlsだろうと選択するところまでしかしてくれないことにかわりはない。
280デフォルトの名無しさん:2007/12/17(月) 01:17:23
>>278
どんだけ……

関連付けで開くのはシェルの仕事
ShellExecute
281デフォルトの名無しさん:2007/12/17(月) 01:23:57
 質問です。ただ単純にリソースから相対パスを取り出してソフトを起動し、自分自身は
終了するというだけのソフトを作っています。Windows xp sp2 Home Editionでは起動
されたソフトが終了されなくても自分自身は先に終了してくれます。これが期待している
動作です。
 しかし、Windows 2000 Professional Editionでは起動された側のソフトが終了しても
自分自身が終了していない場合があります。ちなみに開発環境は前者であり、後者では
デバッグが不可能です。
 ソースは以下が全てです。どなたか良い解決策をお持ちでしたら、ご教示下さい。
 よろしくお願いします。

#include <windows.h>
#include <shellapi.h>
#include <shlwapi.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    char ThisFilePath[MAX_PATH], AppFileName[MAX_PATH], AppRelativePath[MAX_PATH];
    if (!GetModuleFileName(NULL, ThisFilePath, sizeof(ThisFilePath))) return 1;
    PathRemoveFileSpec(ThisFilePath);
    if (!LoadStringA(GetModuleHandle(NULL), 0, AppRelativePath, sizeof(AppRelativePath))) return 1;
    PathCombine(AppFileName, ThisFilePath, AppRelativePath);
    ShellExecuteA(NULL, "open", AppFileName, "", "", SW_SHOW);
    return 0;
}
282244:2007/12/17(月) 01:46:22
>>269
ありがとうございます。

ですが、ドキュメント読んでも未だ理解しきれませんorz
グローバルフックはできたのですが、
特定のウィンドウのみフックすることができません。
SetWindowHookEx( ) の引数のインスタンスハンドルとスレッドIDには
どういう組み合わせを渡せばよいでしょうか。
283デフォルトの名無しさん:2007/12/17(月) 03:16:39
>>282
スレッドが何なのか良く分かってないんじゃないの

GetWindowThreadProcessId
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_getwindowthreadprocessid.asp

GetWindowThreadProcessIdでウィンドウが所属するスレッドIDを取って
SetWinodwsHookExする

SetWinodwsHookExは日本語MSDNだと注意書きが入ってるが
内容は大して変わってないからそっち読んで来い
284244:2007/12/17(月) 04:43:06
>>283
>スレッドが何なのか良く分かってないんじゃないの
すみません、Win32API は勉強し始めたばかりなもので…

教えてくださってありがとうございます。
何とか解決できそうです。
285デフォルトの名無しさん:2007/12/17(月) 11:37:07
コンソールアプリを立ち上げるとコンソールウインドウが開きますが
そのハンドルを自分自身の中で取得する方法を教えてください.
というのは現在簡単なコンソールアプリがあってその結果を
別ウインドウに表示するプログラムを作りたいのです.
main関数の中で別ウインドウを作成することはできたのですが,
制御がそっちに移ってしまってコンソール入出力のほうに帰ってこないので
何とかしたいのです.
286デフォルトの名無しさん:2007/12/17(月) 12:25:28
何故制御が戻らないか考えよう
287デフォルトの名無しさん:2007/12/17(月) 13:41:46
複数のムービーを垂れ流す簡単なアプリを作っているのですが
MCIWndCreateを子として作り MCIWndOpenでファイルを開き
MCIWndPlayですんなり再生まで行くのですが
次のムービーに行く時に MCIWndCloseをかけると親ウィンドウがちらつく
(アクティブが他所へ移る?)ような状態が発生するのですが
これを抑える、もしくはごまかす上手い方法は無いものでしょうか?
288デフォルトの名無しさん:2007/12/17(月) 14:45:36
アプリケーションが3枚のウィンドウを持っていて、そのZオーダーを常に固定するということはできますか?
289デフォルトの名無しさん:2007/12/17(月) 15:35:16
>>286
メッセージループそのものを別スレッドで
立ち上げればいいんですかね?ちょっとやってみようと思います.
290デフォルトの名無しさん:2007/12/17(月) 16:08:05
>>289
一般にそれをやる時はコンソールプログラムをCreateProcessで子プロセスとして起動して
出力ハンドルを見張る

標準入出力 リダイレクト

あたりでググるといいかも

>>287
親ウィンドウの背景を消去しなければいいんだろうけど
そうすると再生中のムービーが背景に残りそうな余寒…

背景消去のキャンセルはウィンドウクラスの背景ブラシを透明ブラシにするか
WM_ERASEBKGNDをスルーする

>>288
ちょっと探したけど簡単な方法は無さそう
WM_ACTIVATEとSetWindowPosを駆使すればできるかもしれないけど
291デフォルトの名無しさん:2007/12/17(月) 16:31:22
領域内に閉じこめられてもいいならSetParentで・・・ちょっと無理か?
292デフォルトの名無しさん:2007/12/17(月) 16:33:20
いけるんじゃない?
モードレスダイアログを2段重ねるようなもんだべ?
293デフォルトの名無しさん:2007/12/17(月) 16:37:04
いや、ダイアログを重ねるのまではいいとして
アクティブになる時に前に出てくるのをどうブロックするか
294デフォルトの名無しさん:2007/12/17(月) 16:47:17
2枚目のモードレスダイアログが親になってモードレスダイアログ開くのさ
SetParentでできるかはやってみてないからわからん。
295デフォルトの名無しさん:2007/12/17(月) 17:43:49
owned, ownerの関係にすれば前後関係は固定できるな
296デフォルトの名無しさん:2007/12/17(月) 18:23:55
>>290
とりあえずメッセージループをbeginthreadで立ち上げたら
コンソールのほうに制御は戻りました。ただ生成したウインドウのほうが
やばくなってきたのでいろいろ考える必要がありそうです。
あと、いわれた単語でググって見たらいろいろ見つかったので
勉強してみようと思います。ありがとうございました。
297デフォルトの名無しさん:2007/12/17(月) 18:35:53
どうしてAPIは素直に文字列を返してこないの?
298デフォルトの名無しさん:2007/12/17(月) 18:37:36
何の話?
299デフォルトの名無しさん:2007/12/17(月) 18:44:42
全部
300デフォルトの名無しさん:2007/12/17(月) 18:45:28
その文字列は誰が確保して誰が開放するんだ
301デフォルトの名無しさん:2007/12/17(月) 18:45:48
ひょっとしてgc世代のゆとり乙ですか?
302デフォルトの名無しさん:2007/12/17(月) 18:46:46
大解放ですよ
303デフォルトの名無しさん:2007/12/17(月) 18:47:20
シェル関連ならCoTaskMem***で確保・解放が統一されてるような
304デフォルトの名無しさん:2007/12/17(月) 18:50:04
文字列クラスも知らないって糞杉ワロタ
305デフォルトの名無しさん:2007/12/17(月) 18:52:04
何の話?
306デフォルトの名無しさん:2007/12/17(月) 18:53:00
全部
307デフォルトの名無しさん:2007/12/17(月) 18:55:31
その文字列クラスは誰が確保して誰が開放するんだ
308デフォルトの名無しさん:2007/12/17(月) 18:58:34
もういいって・・・
309デフォルトの名無しさん:2007/12/17(月) 19:05:08
いいならレスしないでくださいよしつこい人ですね
310デフォルトの名無しさん:2007/12/17(月) 19:50:34
しつこいのはあなたですよ
早く氏んでね^^
311デフォルトの名無しさん:2007/12/17(月) 20:07:47
ケツロン C#最強
312デフォルトの名無しさん:2007/12/17(月) 20:24:10
例えば、
Control側で文字列持ってんだから、わざわざこちらでバッファ確保させずにそのままLPCTSTRで返せよ、
ってことか?



C++/CLIだろ、最強は。
313デフォルトの名無しさん:2007/12/17(月) 20:25:31
文字列なんてのがあるからいけないんだ
314デフォルトの名無しさん:2007/12/17(月) 20:32:16
ステータスバーに文字列を設定する場合
SendMessage(hStat, SB_SETTEXT, (WPARAM)(SB_SIMPLEID | SBT_NOBORDERS), (LPARAM)szText);
という風にしますが、ステータスバーの領域が一つしかない場合は
SendMessage(hStat, WM_SETTEXT, 0, (LPARAM)szText); としても可能です。

ただWM_SETTEXTで文字列を変更する場合、ウィンドウを再描画させても変更した文字列がステータスバーに表示されますが
SB_SETTEXTで変更した場合は、ウィンドウを再描画させると、変更前の文字列(CreateStatusWindowで設定した文字列)が表示されてしまいます。

これはどういう違いから来るものなんでしょうか?
詳しい方ヨロピクビー
315デフォルトの名無しさん:2007/12/17(月) 20:44:58
>>314
氏ね
316デフォルトの名無しさん:2007/12/17(月) 20:48:39
どう考えてもC/C++に文字列型がないからいけないんだ
317デフォルトの名無しさん:2007/12/17(月) 21:28:03
んなモンいらねーよ
318デフォルトの名無しさん:2007/12/17(月) 21:44:07
文字列型に頼ってバイナリ満足に扱えないVBer共はしねwwwwwwwwwwwwwwwwwww
319デフォルトの名無しさん:2007/12/17(月) 21:46:52
ちょっと文脈をカンチガイしてないか?
320デフォルトの名無しさん:2007/12/17(月) 22:19:11
>>315
分からないならレスすんな
321デフォルトの名無しさん:2007/12/17(月) 22:21:29
>>315
人に氏ね言うな
322デフォルトの名無しさん:2007/12/17(月) 22:22:05
>>320
分からない
323デフォルトの名無しさん:2007/12/17(月) 22:56:36
        ____
       /      \
      /  ─    ─\     今年もあと一ヶ月だお・・・
    /    (●)  (●) \
    |       (__人__)    | ________
     \        ̄    ./ .| |          |
    ノ           \ | |          |
  /´                 | |          |
 |    l                | |          |
 ヽ    -一ー_~、⌒)^),-、   | |_________|
  ヽ ____,ノγ⌒ヽ)ニニ- ̄   | |  |




      / ̄ ̄ ̄\
    / ─    ─ \
   /  (●)  (●)  \.  俺はこの一年間何をしていたんだろう
   |    (__人__)    | 2chで浪費した莫大な時間を何か有意義なことに使っていたら・・・
   \    ` ⌒´    /
   /           \
324デフォルトの名無しさん:2007/12/17(月) 23:08:27
無駄上等ッ
325デフォルトの名無しさん:2007/12/17(月) 23:12:52
今PSDKのステータスバーコントロールの箇所読んでて間違いを見つけたんだけど、
さらしても問題ない?
あまりにもアホな間違いで、exampleのコードなんだがな

それよりも誰か>>314に答えてくれませんかね
言っておきますが、このスレを建てたのはこのボクですよ。
早くしてね(ハート
326デフォルトの名無しさん:2007/12/17(月) 23:17:01
string hoge = wsprintf(_T("%d 回氏ね。", n);
327デフォルトの名無しさん:2007/12/17(月) 23:18:22
>>325
exampleはインターンが書いてたりするのでわりといいかげんなのは普通。
328デフォルトの名無しさん:2007/12/17(月) 23:26:59
>>326
そこまでやるなら
string hoge = string::format(_T("%d 回氏ね。", n);
のほうがいいだろ。
329デフォルトの名無しさん:2007/12/17(月) 23:33:27
固定長配列で実行するまで長さ不明の文字列受け取るのは馬鹿げてるよね
330デフォルトの名無しさん:2007/12/17(月) 23:37:12
ならもっと高級なクラスライブラリでも使えば?
331デフォルトの名無しさん:2007/12/17(月) 23:38:02
>>326
>>328
言語は何ですか?
332デフォルトの名無しさん:2007/12/17(月) 23:39:29
APIの理想像じゃねw
333デフォルトの名無しさん:2007/12/17(月) 23:41:52
>>328のはC++CLIに似てる。
334デフォルトの名無しさん:2007/12/18(火) 00:53:41
32bppのビットマップにGDIで描画しても、alphaの値が変わらないのは仕様ですか
335デフォルトの名無しさん:2007/12/18(火) 01:35:32
>>333

C#だろ
336デフォルトの名無しさん:2007/12/18(火) 01:36:09
じゃなかったw
337デフォルトの名無しさん:2007/12/18(火) 06:22:43
APIスレなんだからいつまでもHeapAllocとVirtualAlloc使ってろw
338デフォルトの名無しさん:2007/12/18(火) 06:23:01
>>334
うん
339デフォルトの名無しさん:2007/12/18(火) 06:49:59
いい加減ドトネト厨うざい
340デフォルトの名無しさん:2007/12/18(火) 06:55:11
アンチドトネト厨うざい
341デフォルトの名無しさん:2007/12/18(火) 07:17:01
>>334
GDI+やDirectX使うか、自分でブレンディングするべし。
342デフォルトの名無しさん:2007/12/18(火) 09:05:57
>>340
win32スレでドトネトの話題を繰り返すな低脳
343デフォルトの名無しさん:2007/12/18(火) 10:53:00
それじゃ歌おうじゃないか
344デフォルトの名無しさん:2007/12/18(火) 11:37:41
死にたい人にお薦めの危険な街ヨハネスブルグ

・軍人上がりの8人なら大丈夫だろうと思っていたら同じような体格の20人に襲われた
・ユースから徒歩1分の路上で白人が頭から血を流して倒れていた
・足元がぐにゃりとしたのでござをめくってみると死体が転がっていた
・腕時計をした旅行者が襲撃され、目が覚めたら手首が切り落とされていた
・車で旅行者に突っ込んで倒れた、というか轢いた後から荷物とかを強奪する
・宿が強盗に襲撃され、女も「男も」全員レイプされた
・タクシーからショッピングセンターまでの10mの間に強盗に襲われた。
・バスに乗れば安全だろうと思ったら、バスの乗客が全員強盗だった
・女性の1/3がレイプ経験者。しかも処女交配がHIVを治すという都市伝説から「赤子ほど危ない」
・「そんな危険なわけがない」といって出て行った旅行者が5分後血まみれで戻ってきた
・「何も持たなければ襲われるわけがない」と手ぶらで出て行った旅行者が靴と服を盗まれ下着で戻ってきた
・最近流行っている犯罪は「石強盗」 石を手に持って旅行者に殴りかかるから
・中心駅から半径200mは強盗にあう確率が150%。一度襲われてまた教われる確率が50%の意味
・ヨハネスブルグにおける殺人事件による死亡者は1日平均120人、うち約20人が外国人旅行者。
345デフォルトの名無しさん:2007/12/18(火) 11:38:41
       冫─'  ~  ̄´^-、
     /          丶
    /             ノ、
   /  /ヽ丿彡彡彡彡彡ヽヽ
   |  丿           ミ
   | 彡 ____  ____  ミ/
   ゝ_//|    |⌒|    |ヽゞ
   |tゝ  \__/_  \__/ | |
   ヽノ    /\_/\   |ノ  _________
    ゝ   /ヽ───‐ヽ /  /
     /|ヽ   ヽ──'   / <  ♪も〜〜い〜くつ寝〜る〜と〜〜
    / |  \      ̄ ,/|   \_________
   / ヽ    ‐――‐
346デフォルトの名無しさん:2007/12/18(火) 12:41:48
まて、正月の前にはアレがある
まだ油断できぬ
347デフォルトの名無しさん:2007/12/18(火) 12:52:12
アレってなんだ?
、、、、天皇誕生日か。
348デフォルトの名無しさん:2007/12/18(火) 12:53:39
スキー旅行だろ常考・・・
349デフォルトの名無しさん:2007/12/18(火) 13:13:11
冬だなぁ
350デフォルトの名無しさん:2007/12/18(火) 13:32:33
日本人なら冬至には柚湯。これ。
351デフォルトの名無しさん:2007/12/18(火) 13:34:05
冬は葛湯ですよ。
352デフォルトの名無しさん:2007/12/18(火) 13:40:13
葛根湯との違いは何かね
353デフォルトの名無しさん:2007/12/18(火) 13:43:24
そりゃ冬ですよばか
354デフォルトの名無しさん:2007/12/18(火) 14:36:39
CreateDialogについて質問です
CreateDialog上に配置してある複数のエディットボックス。
それらをTabキーでフォーカスが移動するようにしたいのですが、うまくいきません。
タブストップ設定はしてあるのでDialogBoxで呼び出した時にはきちんと意図した動作をしました

調べてみたところCreateDialogで作ったダイアログ上のTab移動については、ウィンドウメッセージループ(GetMessageなど)のところでIsDialogMessageで判定を行い適切な処理が必要とのことでした。
ですが今のアプリケーションはDialogBoxでメインダイアログを表示し、その上に(場面に応じたダイアログを)CreateDialogではりつける形になっています。
DialogBoxの場合ウィンドウメッセージループは隠蔽されてしまいますよね?
どのようにしたら意図した動作にできますでしょうか
355デフォルトの名無しさん:2007/12/18(火) 15:04:11
すいません。自己解決しました。
ttp://www5a.biglobe.ne.jp/~wired/life2002.htm
の9/7の記事が参考になりました。
356デフォルトの名無しさん:2007/12/18(火) 16:02:34
ボタンのキャプションを左揃えにしたいのですが、
どうしたらいいでしょうか。
CreateWindowExでWS_EX_LEFTを指定してもうまくいきませんでした。
357デフォルトの名無しさん:2007/12/18(火) 16:06:51
BS_LEFTとか無かったっけ
358デフォルトの名無しさん:2007/12/18(火) 16:08:53
>>357
ありがとうございます。
その通りやったらできました!
359デフォルトの名無しさん:2007/12/18(火) 16:29:24
どういたしました
360デフォルトの名無しさん:2007/12/18(火) 17:56:49
明らかな弱点挙げて批判したら〜と比べるなって
分かり安すぎだなお前らw
361デフォルトの名無しさん:2007/12/18(火) 17:59:01
Vistaのスレあたりの誤爆かw
362デフォルトの名無しさん:2007/12/18(火) 18:00:50
ちがうよばか
363デフォルトの名無しさん:2007/12/18(火) 18:17:09
何の話?
364デフォルトの名無しさん:2007/12/18(火) 18:30:21
なにこのディスコミュニケーションスレw
365デフォルトの名無しさん:2007/12/18(火) 18:30:23
葛根湯の話だろ。
366デフォルトの名無しさん:2007/12/18(火) 18:35:23
葛湯に使われる葛粉は、今は葛を使わずにじゃが芋の澱粉を使うって話か?
367デフォルトの名無しさん:2007/12/18(火) 18:54:36
かぶとむしのはなし
368デフォルトの名無しさん:2007/12/18(火) 20:25:16
冬だなぁ
369デフォルトの名無しさん:2007/12/18(火) 20:45:43
日本人なら冬至には柚湯。これ。
370デフォルトの名無しさん:2007/12/18(火) 20:55:46
冬だなぁ
371デフォルトの名無しさん:2007/12/18(火) 23:27:54
APIの勉強したくてAdvanced Windows第四版ポチってしまったんだけど
APIのリファレンスみたいのは付いてますか?
372デフォルトの名無しさん:2007/12/18(火) 23:28:59
>>371
ついてない。
普通はAPIリファレンス=MSDN。
373デフォルトの名無しさん:2007/12/18(火) 23:44:02
>>372
即レス感謝。

ディスプレイ上の情報よりも本で読んだほうが
文字が頭に入るんだよね。だから付いてればいいな、と思っていたけど
無いのは残念だな。勝手に期待しただけだけどw
374デフォルトの名無しさん:2007/12/18(火) 23:46:52
>>373
本に収めたらいったいどんなことになるやら。
更新も頻繁すぎるし、検索性を考慮に入れてもリファレンスマニュアルを本にするのは非現実的なレベル。
375デフォルトの名無しさん:2007/12/18(火) 23:48:24
リファレンスなんて必要な時に引くもんであって頭に入れるもんじゃない
376デフォルトの名無しさん:2007/12/18(火) 23:54:55
英単語と一緒だな
377デフォルトの名無しさん:2007/12/18(火) 23:56:34
いい加減インサイドWindowsのv6カーネル対応版だせ
上中下巻で3万でも買うからだせ
378デフォルトの名無しさん:2007/12/19(水) 01:14:46
>>371
Advanced WindowsはAPIの勉強するような本じゃねぇぞw

APIのリファレンスが欲しいなら、翔泳社のWindows95APIバイブルだな。
掲載されている全てのAPIに対してサンプルコードが載っている。
古本なら1500円程度で買えるから、全部揃えてもいいんじゃないか?
1と2だけでもいいな。3はデータベースやAVIを使わなければ必要ない。

Windows98APIバイブルもあれば、普通に使うAPIはほとんど網羅できる。

かなり厚い本だけど、持ってると便利だよ。
379デフォルトの名無しさん:2007/12/19(水) 01:30:40
いや、Advanced WindowsこそAPIの勉強をする本だろ。
特に、詳しく知らないと使う気にすらならないという人間にとっては。

>>377
たしかにWindows InternalsのVista版はほしいよな。
380デフォルトの名無しさん:2007/12/19(水) 02:26:11
ステータスバーの文字の色を変更するにはどうしたらいいですか?
背後の色はSB_SETBKCOLORで変更できるようなんですが、ググってもリンクが切れてるものばかりで
381デフォルトの名無しさん:2007/12/19(水) 11:12:26
382デフォルトの名無しさん:2007/12/19(水) 11:20:42
読むのめんどくせーから教えてくれって言ってるんだよばか
383デフォルトの名無しさん:2007/12/19(水) 11:27:18
読むのめんどくせーから教えてくれって言ってるんだよばか
384976:2007/12/19(水) 11:31:16
>>377
>>379

ttp://www.microsoft.com/technet/technetmag/issues/2007/04/VistaKernel/default.aspx?loc=jp/#S12
>こうした機能やその他の機能の詳細については、2007 年末に発行を予定している
>『Windows Internals』の次回のエディションを参照してください。

順調に遅れているぽいな。
385デフォルトの名無しさん:2007/12/19(水) 13:05:30
386デフォルトの名無しさん:2007/12/19(水) 13:26:23
wparam、lparamに、どういったタイプのデータがどっちに入る、みたいな法則はあるんでしょうか?
メッセージごとによく使うデータがwpだったりlpだったりして覚えにくくて困ってます。
387デフォルトの名無しさん:2007/12/19(水) 13:33:53
コールバック関数の引数に意味は求めても、結局は実装次第じゃなかろうか
入力と出力の2個あるほうが便利、それ以上は構造体ポインタ
戻り値で関数実行の成功失敗を返す。とか、そんなレベルかとおもわれ
感性的に前から埋めていくだろうから、wp にin/out、 lp は NULL 固定とかでも
仕様変更やバージョン進むにつれて、互換維持のために
wp に NULL、lp に新しい引数を〜ってのもあるだろうし。
388デフォルトの名無しさん:2007/12/19(水) 13:36:17
>>386
みじかいのがWPARAM、ながいのがLPARAM
389デフォルトの名無しさん:2007/12/19(水) 13:37:09
一応ポインタ型は大概LPARAMの方に入ってる

16bitの名残で
390デフォルトの名無しさん:2007/12/19(水) 13:54:23
>>386
The Old New Thingsの訳本に答えが書いてあった気がするが忘れた。
391デフォルトの名無しさん:2007/12/19(水) 14:00:52
wparamのサイズが昔は小さかったって記述を見つけたんですが、
その頃の名残で多少の法則性があったりするけど、
あまりそういうことは意識せず一個一個覚えてる、って感じでしょうか。
ポインタは確かに今まで勉強したのは全部lpに入ってました。
少し覚えやすくなった気がします。
どうもありがとうございました。
392デフォルトの名無しさん:2007/12/19(水) 14:03:02
393デフォルトの名無しさん:2007/12/19(水) 14:03:50
wparamのwはwordのw?

つーか覚えないでしょ
毎日使うようなものじゃなきゃそのつどMSDN見る
394デフォルトの名無しさん:2007/12/19(水) 14:08:44
395デフォルトの名無しさん:2007/12/19(水) 14:19:38
.NETは美しいんだよ。
APIのドキュメントと長時間睨めっこしなくて済む
396デフォルトの名無しさん:2007/12/19(水) 14:29:33
Javaの方が美しいよ。
397デフォルトの名無しさん:2007/12/19(水) 14:51:40
質問です
なぜドトネト厨がwin32スレでドトネトマンセーレスを繰り返すのでしょうか、誰か教えてください
398デフォルトの名無しさん:2007/12/19(水) 14:56:23
それはwin32厨の嫉妬心から来る錯覚です
399デフォルトの名無しさん:2007/12/19(水) 15:06:12
でもwin32スレでドトネトの話題はスレ違いですよね?
それともスレ違いではないのでしょうか?
詳しく教えてください、お願いします
400デフォルトの名無しさん:2007/12/19(水) 15:18:21
Win32APIとの比較の話題なのでスレ違いではありませんよ
401デフォルトの名無しさん:2007/12/19(水) 15:26:16
つまりドトネトの方がwin32より優れていると、スレの住人に教えてくれているのですね
ありがとうございました
402デフォルトの名無しさん:2007/12/19(水) 15:46:30
WinFX (わらい
403デフォルトの名無しさん:2007/12/19(水) 16:03:13
>>400
技術的なマジネタなら歓迎するよ。
文字列が(笑)ドキュメントが(笑)みたいなレス乞食ネタは勘弁な。
404デフォルトの名無しさん:2007/12/19(水) 16:05:52
ドトネトなんてWin32APIラッパーの塊
Win32APIが無きゃ何もできない
405デフォルトの名無しさん:2007/12/19(水) 16:33:08
レイヤーの違いすら分からずにズレた発言を連発する新参.NET厨、
というベタな痛キャラを演出した暇人による迷惑行為、
だと思ってたんだが、ひょっとしてマジだったのか?
406デフォルトの名無しさん:2007/12/19(水) 16:34:55
たかが文字列受け取るのに何行も書くのまじうけるw
バッファ足りなくてバグの温床だったり
407デフォルトの名無しさん:2007/12/19(水) 16:39:13
なんかいやなことでもあって、この板で発散してるんだろw
408デフォルトの名無しさん:2007/12/19(水) 16:47:12
明らかな弱点挙げて批判したら〜と比べるなって
分かり安すぎだなお前らw
409デフォルトの名無しさん:2007/12/19(水) 16:50:43
僕は文字列ではありません
410デフォルトの名無しさん:2007/12/19(水) 17:01:36
入門書だとどれも、リソースはエディタを使って追加しろとあるのですが、
メモ帳に手書きでこの作業をすることはできないのでしょうか?
本についてたサンプルプログラムをコピーして試してもうまくいきません。
411デフォルトの名無しさん:2007/12/19(水) 17:04:51
>>410
いや、どううまくいかないのか。
メモ帳でもできるはずだよ、何を使ってどうやったの?
412デフォルトの名無しさん:2007/12/19(水) 17:10:08
素人お断りだからな。>Win32API

まぁ、.NETがNativeAPIになる日も遠くなかろう。
413デフォルトの名無しさん:2007/12/19(水) 17:12:15
>>410
リソースコンパイラに.rc喰わしてる?
414デフォルトの名無しさん:2007/12/19(水) 17:38:55
>>412
近くもないだろう

C#.net勉強しまくってVistaが出るのを心待ちにしてたが
実際はあの体たらくだ

Win32APIプログラムは死なぬ
何度でも蘇るさ と言ってみる
415410:2007/12/19(水) 17:40:37
本に載ってるソース、ヘッダ、リソースファイルをコピーして同じフォルダに放り込んで、
Borland C++でリソース無しの時と同じようにコンパイル(bcc32 -tW test.cpp)してみたら、
外部シンボル'TransparentBlt'が未解決(C:\(中略)\TEST.OBJが参照)
というエラーが出ました。
リソース入りだとコンパイルの手順が変わったりするんでしょうか?
416デフォルトの名無しさん:2007/12/19(水) 17:43:39
それはmsimg32.libが必要だ
417デフォルトの名無しさん:2007/12/19(水) 17:45:00
ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpgdi/html/_win32_transparentblt.asp
ここ見ると
インポート ライブラリ : msimg32.dll にリソースとして入っています。
ってなってるけど、msimg32.lib はリンクした?
無けりゃimplibかなんかで作るしかないが
418410:2007/12/19(水) 17:49:16
あああああそれが原因でしたか。
読んでもよく理解できずに後回しにしたところでしたorz
調べてみます、ありがとうございました。
419デフォルトの名無しさん:2007/12/19(水) 17:58:15
コンボボックスのタイプをドロップダウンリストにしているのですが、
ドロップダウンリストの横幅が表示されている文字列より短い場合、
全体が表示できなくて困っています。
ドロップダウンリストに水平スクロールバーを追加することはできないでしょうか、
試しにWS_HSCROLLを追加したのですがうまくいきません。
420デフォルトの名無しさん:2007/12/19(水) 18:16:05
>>419
失礼しました。
CB_SETHORIZONTALEXTENT
でできました。

421デフォルトの名無しさん:2007/12/19(水) 18:48:43
なるほどね
おれにふかのうはない
なめてんじゃねーよ
422デフォルトの名無しさん:2007/12/19(水) 18:56:56
じゃあしゃぶれ
423デフォルトの名無しさん:2007/12/19(水) 19:01:32
しゃぶしゃぶ食いたくなってきた
424デフォルトの名無しさん:2007/12/19(水) 19:46:47
C++のnamespace内の関数を.defでエクスポートする方法って無いんでしょうか。

namespace test
{
  void api_func()
  {
  }
}

となってるとき、

EXPORTS
  api_func

EXPORTS
  test::api_func

どちらも失敗します。
425デフォルトの名無しさん:2007/12/19(水) 19:49:36
SetWindowPosを使い、既に最前面化されている場合は解除、そうでない場合は最前面化という動作を
させたいのですが可能でしょうか?

内部で自分が最前面化したウィンドウを覚えておくのではなく、
最前面化されているかどうかを取得できればいいのですが。
426デフォルトの名無しさん:2007/12/19(水) 20:06:05
WS_EX_TOPMOST
427デフォルトの名無しさん:2007/12/19(水) 20:48:03
>>424
がんばってマングル済みの名前を探し当てれば、それを書けばいいはず。
あるいは関数にextern "C"を付けろw
428デフォルトの名無しさん:2007/12/19(水) 21:07:35
さてBeOSでもいれるか
429425:2007/12/19(水) 21:48:49
解決しました、ありがとうございます!
430デフォルトの名無しさん:2007/12/19(水) 22:58:33
>>385
おおう! 出版予定ちゃんとあったのか すこし嬉しい
431デフォルトの名無しさん:2007/12/19(水) 23:39:11
メイン窓のDestroyWindowは自分で呼ぶの?
432デフォルトの名無しさん:2007/12/19(水) 23:42:23
イミフメー
433デフォルトの名無しさん:2007/12/19(水) 23:45:59
ウィンドウプロシージャでWM_CLOSEをDefWindowProcに投げれば、
向こうでDestroyWindowしてくれるはずだぞ。
434デフォルトの名無しさん:2007/12/19(水) 23:46:12
DefWindowProc
435デフォルトの名無しさん:2007/12/19(水) 23:52:24
投げるって言い方悪かったな。
素通しとかにするんだった。
436デフォルトの名無しさん:2007/12/20(木) 00:08:46
>>433-435

すっきりました。
437デフォルトの名無しさん:2007/12/20(木) 00:34:05
WS_EX_TRANSPARENTを持たせると
WM_ERASEBKGNDのデフォルト処理はスキップされるの?
438は@c44.010.c3-net.ne.jp ◆cplnFO9T0I :2007/12/20(木) 01:29:28 BE:90784692-2BP(1001)
モーダレスダイアログボックスを使うのと標準ウィンドウにコントロールを貼っていくのではどちらがおすすめでしょうか?
439デフォルトの名無しさん:2007/12/20(木) 01:53:57
ケースバイケース
440は@c44.010.c3-net.ne.jp ◆cplnFO9T0I :2007/12/20(木) 02:43:48 BE:272355269-2BP(1001)
どういった場合では前者が、またどういった場合では後者がおすすめでしょうか?

個人的にはDPIを変更すると崩れてもそのDPIに追従する方を選びたいのですが。
(最初からこう聞けば良かったですね。反省。)
441デフォルトの名無しさん:2007/12/20(木) 02:48:39
モーダレスダイアログボックス
 =モーダルダイアログボックス+モードレスダイアログボックス?
442デフォルトの名無しさん:2007/12/20(木) 05:33:54
モーダレス(笑)
443デフォルトの名無しさん:2007/12/20(木) 07:49:58
>>438
モードレスの方は、余り経験はないけど、Window Procedure を入れ子みたい
に使えて、コードを考えるのに小回りが利く感じがする。

通常ウインドウにコントロールを付けると、WindProc にその処理を入れない
といけなくなる。
ウインドウの種類が増えると、どのウインドウかを判別して、入ってくる
コントロールの処理を振り分けないといけない。面倒。
いい方法が他にあるのかも知れないが。
444デフォルトの名無しさん:2007/12/20(木) 08:39:54
モードレス = モーダレス = modeless
445デフォルトの名無しさん:2007/12/20(木) 08:48:21
モーダレス(笑)
446デフォルトの名無しさん:2007/12/20(木) 08:53:07
少なくとも>>438が日本人でないのは確かだな
447デフォルトの名無しさん:2007/12/20(木) 09:15:14
>>437
うん
448デフォルトの名無しさん:2007/12/20(木) 09:24:51
>モーダレス
ぐぐると同じ間違いをしてるアホが結構見つかる
449デフォルトの名無しさん:2007/12/20(木) 09:43:46
かなり昔から聞くよ
モーダルという言葉を先に覚えるからなんだろうか
そもそもモードという言葉を知らないのか・・・
450デフォルトの名無しさん:2007/12/20(木) 09:56:34
ダイアログボックスのように、同じプロセスの他のウィンドウをアクティブにできないようにするにはどうしたらいいですか。
451デフォルトの名無しさん:2007/12/20(木) 09:56:35
リストビューのヘッダにクリックすると変化する2種類のビットマップを表示しようと
イメージリストを使用して登録してみました。

hIml = ImageList_Create(width, height, ILC_COLOR32, 2, 0);
hBitmap = CreateTestBitmap(width, height);
ImageList_Add(hIml, hBitmap, 0);
Header_SetImageList(hHeader, hIml);

HBITMAP CreateTestBitmap(int width, int height) {
 DWORD color = 0x505050;
 int totalWidth = width * 2;
 DWORD *test = HeapAlloc(GetProcessHeap(), 0, totalWidth * height * sizeof(DWORD));

 for(int i = 0; i < totalWidth * height; ++i) {
  test[i] = color;
 }

 BITMAPINFO bi = {sizeof(BITMAPINFOHEADER)};
 bi.bmiHeader.biWidth = totalWidth;
 bi.bmiHeader.biHeight = height;
 bi.bmiHeader.biPlanes = 1;
 bi.bmiHeader.biBitCount = 32;
 bi.bmiHeader.biCompression = BI_RGB;
 return CreateDIBSection(NULL, &bi, DIB_RGB_COLORS, &test, NULL, 0);
}

指定サイズのビットマップが表示されはしたのですが
どういう訳か、どのような色を指定しても黒一色になってしまいます。

CreateTestBitmapの代わりにImageList_LoadImageを使用してみたことろ正常に表示されたので
CreateTestBitmapに問題があると思うのですが、自分では原因が解りません。
どこが間違っているのでしょうか?
452451:2007/12/20(木) 11:02:33
すみません、自己解決しました。
CreateDIBSectionって空のビットマップを作る関数だったんですね…
作ってから色を入れたら変化しました。
どうもお騒がせしました。
453デフォルトの名無しさん:2007/12/20(木) 15:05:17
>>381
トンクス
オーナードローはめんどくさそうだけど、やってみるわ

あとhtmlとかxmlのタグの中身を取り出したり、属性をとりだしたりする便利な関数ってないですか?
getElementsByTagNameのc言語版
454デフォルトの名無しさん:2007/12/20(木) 15:47:13
ウィンドをクラスにするとスタテE
455デフォルトの名無しさん:2007/12/20(木) 16:00:56
>>453
C++のほうが楽だと思うだけど、MSHTMLとMSXML。
456デフォルトの名無しさん:2007/12/20(木) 17:16:38
>>455
c++は使えないんだす

457デフォルトの名無しさん:2007/12/20(木) 17:20:24
文字列 LPCTSTR szString[20]; にTEXT("HELLOこんにちは") が格納されているとする
この場合
szString[0] == TEXT('H'); だよね?
以下同じ様に
szString[1] == TEXT('E');
szString[2] == TEXT('L');
szString[3] == TEXT('L');
szString[4] == TEXT('O');
となってると思うんですが、

szString[5] == TEXT('こ'); なんですか?
どうやって1バイト文字と2バイト文字の区別を付けてるので?
458デフォルトの名無しさん:2007/12/20(木) 17:25:58
>>457
>LPCTSTR szString[20];
ここはタイプミスということにして・・・

'H' は文字コード 0x0048 の2バイトだぞ。
459デフォルトの名無しさん:2007/12/20(木) 17:26:43
ってunicodeビルドの話だよな?
460デフォルトの名無しさん:2007/12/20(木) 17:27:25
>>457
http://ja.wikipedia.org/wiki/Shift_JIS

↑読んで来い

簡単に言うと
1バイト文字を表すのに必要ない領域を2バイト文字の1文字目にすることで
次の文字が2バイト文字かそうでないか判断できるようにしている

>>459
最後の行からしてANSIだと思う
461デフォルトの名無しさん:2007/12/20(木) 17:31:34
#define UNICODE
462デフォルトの名無しさん:2007/12/20(木) 17:33:07
#include <(゚д゚)ウマー>
463デフォルトの名無しさん:2007/12/20(木) 17:55:23
464デフォルトの名無しさん:2007/12/20(木) 18:04:55
えらそうに言うな豚が
465デフォルトの名無しさん:2007/12/20(木) 18:05:35
だめだこりゃ
466デフォルトの名無しさん:2007/12/20(木) 18:29:48
>>456
WindowsでC++が使えない環境っていったい‥‥
467デフォルトの名無しさん:2007/12/20(木) 18:42:37
>>466
456自身が使ったことないってだけだろ。
468457:2007/12/20(木) 18:42:41
ANSIビルドの話っす。もち
すみませんです。


>>458
TCHAR szString[20];
でござった。
質問しておきながら、タイプミスとは・・

なんつーか、俺が質問したかったのは
ポインタを一つ進めるというのは、そのポインタが表わす型によって、進めるアドレスの大きさが違うってことです。(そうですよね?あってますよね?)
つまり
short *ps;(short は 16ビットとする)
ps++ とやると、16ビット分アドレスを進めてるわけですよね
int *pi;(int は32ビットとする)
pi++ とやると、32ビット分アドレスを進める指示をしてると思うんですが

文字列に2バイト文字が混じってる場合、どうして>>457のようになるのかなぁと
1バイト文字の部分は、8ビット分(1バイト分)アドレスが進む、すなわち次の文字を参照することになる
わけですけど
2バイト文字の部分は?どうなるのぉ??というのが疑問
469デフォルトの名無しさん:2007/12/20(木) 18:46:48
何も起こらない。
1バイト分進み、2バイト文字の2バイト目を指すので、
気を付けないとアウアウってことになるだけ。
470デフォルトの名無しさん:2007/12/20(木) 18:52:38
>>466
自分が使える環境だからって全員そうだと思ってる馬鹿はレスしないで下さい
471デフォルトの名無しさん:2007/12/20(木) 19:02:58
ANSIなら
>szString[5] == TEXT('こ'); なんですか?
こうはならない
szString[5] == 'こ'の1バイト目
szString[6] == 'こ'の2バイト目
472デフォルトの名無しさん:2007/12/20(木) 19:10:54
姫宮ANSI
473デフォルトの名無しさん:2007/12/20(木) 19:22:00
>>468
2バイト文字の部分も型はchar

あと、CharNext, CharNextA

よく知らんけど
474デフォルトの名無しさん:2007/12/20(木) 19:49:30
         ,. -‐'''''""¨¨¨ヽ
         (.___,,,... -ァァフ|          あ…ありのまま 今 起こった事を話すぜ!
          |i i|    }! }} //|
         |l、{   j} /,,ィ//|       『おれは諸世紀という詩集を書いたと思ったら
        i|:!ヾ、_ノ/ u {:}//ヘ        いつのまにかペテン師扱いされていた』
        |リ u' }  ,ノ _,!V,ハ |
       /´fト、_{ル{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが
     /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも 何をされたのか わからなかった…
    ,゙  / )ヽ iLレ  u' | | ヾlトハ〉
     |/_/  ハ !ニ⊇ '/:}  V:::::ヽ        頭がどうにかなりそうだった…
    // 二二二7'T'' /u' __ /:::::::/`ヽ
   /'´r -―一ァ‐゙T´ '"´ /::::/-‐  \   意訳だとか超解釈だとか
   / //   广¨´  /'   /:::::/´ ̄`ヽ ⌒ヽ    そんなチャチなもんじゃあ 断じてねえ
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::...       イ  もっと恐ろしいものの 片鱗を味わったぜ…
475デフォルトの名無しさん:2007/12/20(木) 19:50:32
>>468
TCHAR は UNICODE ビルドなら char (CHAR) の別名
ANSI ビルドなら wchar_t (WCHAR) の別名。tchar.h 参照

TEXT マクロは UNICODE ビルドなら L を文字や文字列の頭にくっつけたのと一緒
ANSI ビルドなら何もくっつけないのと一緒。winnt.h 参照

なので ANSI ビルドの TCHAR szString[20] = TEXT("Helloこんにちは"); は
char szString[20] = "Helloこんにちは"; と一緒
"Helloこんにちは" は単なるバイト列
476デフォルトの名無しさん:2007/12/20(木) 19:53:37
>>475
>TCHAR は UNICODE ビルドなら char (CHAR) の別名
>ANSI ビルドなら wchar_t (WCHAR) の別名。tchar.h 参照

しむら〜、逆!逆!
477475:2007/12/20(木) 19:57:41
豪快な間違えっぷりに自分でもワロタ
吊ってくる
478457:2007/12/20(木) 20:44:02
>>471
マジっすか?
オラますます混乱してきたぞorz
479デフォルトの名無しさん:2007/12/20(木) 21:04:19
またWin32APIに関係ない話かよorz
480デフォルトの名無しさん:2007/12/20(木) 22:50:07
名前付きパイプのことで質問です。
データをバイトではなくメッセージとして読み取りたいです。
SetNamedPipeHandleStateでモードを変更するのかと思うのですが
エラーが返ってきます。
そもそも書き方が違うのでしょうか…。
ちなみにVB6です。

DIM lngRes AS Long
lngRes=SetNamedPipeHandleState(lngHandle,PIPE_READMODE_MESSAGE or PIPE_WAIT,vbNullString ,vbNullString )
481デフォルトの名無しさん:2007/12/20(木) 23:07:27
その昔、Managed DirectXと言うのがあってだな…
482デフォルトの名無しさん:2007/12/20(木) 23:10:55
Win32は不滅です。
483デフォルトの名無しさん:2007/12/20(木) 23:28:29
>>480
2番目の引数は値ではなく値へのポインタを渡せとリファレンスに書いてあるが。
484デフォルトの名無しさん:2007/12/20(木) 23:42:00
>>483
本当ですね…orz
ご指摘ありがとうございました。
とても助かりました。
485457:2007/12/21(金) 04:23:34
うざいと思われるの承知で、

ANSIビルドで、
wsprintf(szBuffer, TEXT("%c"), szSrc[0]);
とするとき、szSrcに例えば「Hello\0」という文字列が格納されていた場合は、szBufferは「H\0」となりますよね

szSrcに「こんにちは\0」という文字列が入っていても、sprintf系の関数で「こ」一文字を上の「H」の場合みたいに取り出すことはできない?ですか?
日本語の文字を取り出したい場合は、UNICODEビルドしかないの?
486デフォルトの名無しさん:2007/12/21(金) 04:40:21
>>485
>>463とかで判定して2バイト読む。終了。
487は@c44.010.c3-net.ne.jp ◆cplnFO9T0I :2007/12/21(金) 04:50:53 BE:181570649-2BP(1001)
>>441-442>>444-449
ナンテコッタイ/(^。^)\
>>443
ありがとうございます。

もう一つ聞きたいのですが、アイコンを変えたい場合はどうすればいいでしょうか
・関連付け等で決められているアイコン
・exeファイル、icoファイルから(これはLoadIconで大丈夫でしょうか)
の2つの場合について教えてください。
488デフォルトの名無しさん:2007/12/21(金) 06:27:33
最近はホスト晒すのが流行っているのかい?
489デフォルトの名無しさん:2007/12/21(金) 06:45:04
>>487
>・関連付け等で決められているアイコン

レジストリの
HKEY_CLASSES_ROOT\.拡張子
を開いて「規定」に書いてある「ファイルの種類」を取り出す

レジストリの
HKEY_CLASSES_ROOT\ファイルの種類\DefaultIcon
キーを開いてアイコンを指定する

指定の仕方は
アイコンが入ってるモジュールのパス,アイコンの序数

>・exeファイル、icoファイルから(これはLoadIconで大丈夫でしょうか)

EXEはLoadLibrary→LoadIconで良いだろうけどicoはLoadImage
490デフォルトの名無しさん:2007/12/21(金) 16:37:07
             |     /|   / ̄ヽ  | ̄ヽ    /|   / ̄ヽ
             |    / |   ヽ_    |_ノ   / |   |
             |   /_ | .     \   |\    /____|  |
          ヽ_ノ  /   |   ヽ_/  |  し ,/   |   \_ノ
   ∩∩                                                             ,V∩
   (7ヌ)        オ マ エ の 権 利 は オ レ の モ ノ             (/ /
  / /                    ∧_∧               ∧_∧            ||
 / /  ∧_∧     ∧_∧  __( ´∀` )  ∧_∧  _ (´∀` )   ∧_∧  ||
 \ \( ´∀`)ー‐--( ´∀` ) ̄  総   ⌒(´∀` ) ̄        ⌒`(´∀` ) //
   \    財  ,./⌒ 天  ⌒~ヽ 務   /~⌒ 随 ⌒ ̄ヽ.、 族   /~⌒ 広  ⌒ /
.   |  団  |ー、  下   /\i 省   //`i  意   /\|  議  //`i  告   /
.     |  法  | |  り   / (ミ 官  ミ) | 契   | (ミ  員 ミ) | 代   |
     | 人  | |  役  | /  僚   \ | 約  | /      \ .| 理   |
    |    |  ) 人 /   /\    \|  業 /   /\   \|  店  ヽ
    /.     | /    ヽ、__/)  (\   ) 者 ヽ、__/)  (\   )     |
    |   i   |/   /|   / レ    \`ー ' |  i  / レ  .   \`ー ' |   i    /
491288:2007/12/21(金) 18:12:54
>>290-295
できました。ありがとうございます。

CreateDialogParamのhWndParentに呼び出し側のハンドルをセットすることを2回繰り返すことでできました
492は@c44.010.c3-net.ne.jp ◆cplnFO9T0I :2007/12/21(金) 20:27:11 BE:282442087-2BP(1001)
>>489
ありがとうございます。こちらの表現が悪くて話がかみ合わなくなりましたが、理解できました。
関連づけされているファイルのアイコンの取得はそこまで面倒だとは....
ちなみにアイコンを変えるというのはウィンドウに表示されているアイコンという意味でした。
(MSDNライブラリを読んでいたらわかったのですがWM_SETICONで出来るんですね)
493デフォルトの名無しさん:2007/12/21(金) 20:59:37
SHGetFileInfoに拡張子つっこめばとれるっしょ
494デフォルトの名無しさん:2007/12/21(金) 21:28:29
今別アプリのキャプションを取得するような物を作っています
EnumChildWindowsでウィンドハンドラを取得し
GetWindowTextでキャプションを取得しています

spy++でキャプションを見たときと
GetWindowTextで取得した値が違いました

spy++と同等の結果を取得したいのですがどうすればいいのでしょう?
495494:2007/12/21(金) 21:55:09
なんとなく自己解決しました
WM_GETTEXT送ってきます。。。
496デフォルトの名無しさん:2007/12/22(土) 00:08:00
「"放射能割り込み"のあるコンピュータが存在する」

 旧ソ連の軍用組み込みコンピュータ、Argon-17は放射線計数管からの
パルスがしきい値以上にあると、自動でレジスタの中の値をコアメモリ
に退避してシャットダウンした。それで放射線環境がマシになったら
自動で復帰するという塩梅。
497デフォルトの名無しさん:2007/12/22(土) 01:32:07
いっぽうアメリカは鉛で囲んだ
498デフォルトの名無しさん:2007/12/22(土) 03:19:20
日本はそろばんを使った
499デフォルトの名無しさん:2007/12/22(土) 03:32:05
そして日本はオペレータが死亡
500デフォルトの名無しさん:2007/12/22(土) 04:10:34
かくして1985年の労働者派遣法成立まで待たねばならなくなるわけだが
これが後の時代に失われた300年と呼ばれる暗黒時代の始まりである
501デフォルトの名無しさん:2007/12/22(土) 04:12:13
つまんね
502デフォルトの名無しさん:2007/12/22(土) 05:39:08
こういうのってコピペにしても書いた本人は面白いとでも思ってるのかね?
503デフォルトの名無しさん:2007/12/22(土) 05:45:22
それは分からんけど496には普通に「へ〜」と思ったわ
すれ違いだけど

497からは滑ってるかな
504デフォルトの名無しさん:2007/12/22(土) 14:21:20
おもしれー
505デフォルトの名無しさん:2007/12/22(土) 14:25:45
スレ違い
gdgd続けんなよカスども
506デフォルトの名無しさん:2007/12/22(土) 16:24:03
timeGetTimeをたくさん呼ぶと遅くなりますか?
507デフォルトの名無しさん:2007/12/22(土) 18:30:27
どれだけ沢山なのかどれだけ遅くなっちゃダメなのか、
自分で測って自分で決めて下さい。
508デフォルトの名無しさん:2007/12/22(土) 20:31:57
timeSetEventで1ms毎に取り込めばいいよ。
と書こうとして調べてたら、こんなの発見。

Windows XP: Included in Windows XP only.

なんのギャグだ、これは?
509デフォルトの名無しさん:2007/12/22(土) 21:51:12
>>508
書いてあるじゃん

>This function is obsolete. New applications should use CreateTimerQueueTimer to create a timer-queue timer.
510508:2007/12/23(日) 00:06:16
>>509
SDK6.0(Update for Windows Vista)付属のドキュメントには
そんなこと書いてなかったんだよ!ヽ(`Д´)ノ
timeKillEventの方にはNT3.1/95以降って普通に書いてるし。

CreateTimerQueueTimerの解像度はGetTickCountと似たようなもんなのかなあ。
TimerQueue+ThreadPoolは割と面白そう。
511デフォルトの名無しさん:2007/12/23(日) 00:27:26
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpmltimd/html/_win32_timesetevent.asp
>対応情報
> Windows NT/2000:Windows NT 3.1 以降
> Windows 95/98:Windows 95 以降

WindowSDKに何があったんだw
512508:2007/12/23(日) 00:54:46
Timer-queue Timerというか、大元のWaitable-timer自体
10ms単位で10秒寝ても、930カウント程度しか取れない。
timeSetEvent+タイムテーブルの疑似60fpsのような実装には、明らかに力不足だな。

それなりに便利だったのに、今になって廃止しようとする意図が判らん。
よ〜し、こうなったらパパQueryPerformanceCounterでポーリングしちゃうぞ〜
513デフォルトの名無しさん:2007/12/23(日) 01:25:06
W95以降、obsoleteと書かれて本当に廃止されたAPIなんかあったのかね?
Reymondがあれだけ互換性の維持に腐心しているんだから大丈夫でねーのかな。
514デフォルトの名無しさん:2007/12/23(日) 02:22:16
そんなこというと、レイモンドに怒られるぞ
515デフォルトの名無しさん:2007/12/23(日) 02:27:31
ルフェーブルか。
516デフォルトの名無しさん:2007/12/23(日) 02:29:44
http://www.radiumsoftware.com/0406.html#040624

Windows 3.x 版の SimCity を書いた Jon Ross 氏が私に語ったところによれば,
氏は件のゲームにおいて,解放されたばかりのメモリをリードするというバグを誤って残してしまったそうだ。
これは Windows 3.x ならば問題無い。メモリはどこにも移動しないからだ。さて,ここからが素晴らしいところだ。
ベータバージョンの Windows 95 を試してみたところ,案の定 SimCity は動かなかった。
そこで Microsoft はバグの追跡を行い, SimCity の監視を行う特殊コードを Windows 95 に組み込んでしまった。
そのコードは SimCity が動いていることを検出すると,メモリアロケータを特殊なモードへ移行させ,
メモリをすぐには解放しないような設定にしてしまう。これは,後方互換性に対する執念の一例であり,
これこそが人々を Windows 95 へアップグレードさせようとする要素であったわけだ。
517デフォルトの名無しさん:2007/12/23(日) 09:51:41
すごいけど、プログラマを甘やかしてる気もする。
518デフォルトの名無しさん:2007/12/23(日) 10:23:52
少なくとも、エ○ゲ関係のプログラマは甘え過ぎてたな。
2000
519デフォルトの名無しさん:2007/12/23(日) 10:45:28
ごめん、切れた。

2000が発売されて7年近く経っているのに、
未だにAdminでインスト&Usersでプレイすら作れない奴は、いい加減氏ね。
互換性を考えて、安易に管理者権限を持つユーザを作れるようにした結果がこれ。
520デフォルトの名無しさん:2007/12/23(日) 11:07:17
さすがに非コンシューマ用だった2kから数えるのはどうか
それ以外は同意するが
521デフォルトの名無しさん:2007/12/23(日) 11:41:09
しかしマイドキュメント内に雨後の竹の子のごとくディレクトリ掘られるのもちょっと‥‥
522デフォルトの名無しさん:2007/12/23(日) 12:07:18
ルートにディレクトリつくる某プリンタドライバとかは?
523デフォルトの名無しさん:2007/12/23(日) 12:56:59
キヤノンか。あれもいい加減にして欲しいよな。
524デフォルトの名無しさん:2007/12/23(日) 13:49:27
Vista特有の作法についてはここで話をする、でいいのかな?
525デフォルトの名無しさん:2007/12/23(日) 13:56:13
Win32APIに関する限りは問題ないんじゃない?
526デフォルトの名無しさん:2007/12/23(日) 14:04:38
Vista以降GetUserObjectInformationでデスクトップヒープが取れるらしいので
↓のようなソースを書いたのだけれども
ttp://www.hsjp.net/upload/src/up7994.txt

なぜか↓しか出力されない。
WindowStation: WinSta0
Desktop: Default
Desktop Heap:12288
Press any key to continue . . .

DesktopHeapも常に12288が返るし、
複数アカウントでログオンしてAdminやUACの昇格実行してもWinSta0しか列挙されない
環境は32bit VistaSP1(v668)とVC9。
なにがまちがっているのか、あるいはこうなるものなのか教えてください
527デフォルトの名無しさん:2007/12/23(日) 14:14:38
レジストリ使いませんとか自慢して。.\にini書き込む阿保とかな。
528デフォルトの名無しさん:2007/12/23(日) 14:31:37
正しくはマイドキュメントにMy xxxだよな
529デフォルトの名無しさん:2007/12/23(日) 14:32:49
>>527
しかも制限ユーザで使うと"INIに書き込めません"とかエラー出て終了できなくなるソフトもあるぞ
530デフォルトの名無しさん:2007/12/23(日) 15:05:23
あほ仕様でもそれをマンセーするユーザがいるのも事実なわけで。
531デフォルトの名無しさん:2007/12/23(日) 15:24:38
Adminでインスト&Usersでプレイなんて
ごくまれなユーザーは無視でいいよ
532デフォルトの名無しさん:2007/12/23(日) 15:25:58
Usersでインストールできるならそれでもいいんだが
533デフォルトの名無しさん:2007/12/23(日) 15:27:02
Win9x時代から全く進歩していない自称パワーユーザって沢山いるよね。
534デフォルトの名無しさん:2007/12/23(日) 16:08:36
>>531みたいな馬鹿はプログラム書くなよ
535526:2007/12/23(日) 16:21:07
adminの場合はWinSta0 のWinlogonまでは取れてました ごめんなさい

でもサービス関係のデスクトップとれないし(これはそういうものかも知れないけど)
12288とかなによ orz  教えてエロイひと
536デフォルトの名無しさん:2007/12/23(日) 19:53:20
>>521
Visual Studioのことかぁーーーーーーーーーーーーーー!
537デフォルトの名無しさん:2007/12/23(日) 22:05:44
http://ir9.jp/prog/ayu/strsafe.htm
ここの↓ってTCHARにANSIが選択された場合
nBuffSize = 文字数でなくなるのではないの?

CUINT nBuffSize = 20;
tchar szDest[nBuffSize];

hr = ::StringCchPrintf(szDest, nBuffSize, _T("Num = %d"), 169);
check(hr);
puts(szDest);
538デフォルトの名無しさん:2007/12/23(日) 22:14:20
ANSIでもUNICODEでもnBuffSizeは文字数として正しい。
539デフォルトの名無しさん:2007/12/23(日) 22:46:38
( ・∀・)つ〃∩ ヘェーヘェーヘェーヘェーヘェー
540デフォルトの名無しさん:2007/12/23(日) 22:56:04
リファレンスに書いてあるじゃねーか
541デフォルトの名無しさん:2007/12/24(月) 00:04:10
メモリエディタ作ろうとしているのだが。

GetWindowThreadProcessId()でそのウィンドウのプロセスIDを取得

OpenProcess()

ReadProcessMemorデータ読み込み

ReadProcessMemoryの二番目の引数である”読み取り開始アドレス”の取得の仕方がわからない。
教えてくれ。
542デフォルトの名無しさん:2007/12/24(月) 00:07:36
そりゃユーザが表示させたいところを読み取るんだろうに。
543デフォルトの名無しさん:2007/12/24(月) 02:12:01
>>527
ポータブルなソフトならそうすべきじゃないのか
User権限でProgramFilesでやられると厄介だが
544デフォルトの名無しさん:2007/12/24(月) 02:13:22
選べるならそれでいい
545デフォルトの名無しさん:2007/12/24(月) 02:44:36
>>543
いっそのことexeん中に設定書いてしまえば超ポータブル
546デフォルトの名無しさん:2007/12/24(月) 02:48:30
実行中は書き換え不能なんじゃないかなと思ったけどまあどうでもいい
547デフォルトの名無しさん:2007/12/24(月) 02:48:37
これからはネットワークストレージに設定保存ですよ
548デフォルトの名無しさん:2007/12/24(月) 02:52:52
保存しなくて済むようにしようぜ
549デフォルトの名無しさん:2007/12/24(月) 03:10:36
済んだ話題を蒸し返すなよ糞共
550デフォルトの名無しさん:2007/12/24(月) 09:05:19
>>546
サブ ストリームすら知りませんか?
551デフォルトの名無しさん:2007/12/24(月) 09:09:39
別個のファイルでいいじゃん&
NTFSにしかインストールできません、で通すのか?
552デフォルトの名無しさん:2007/12/24(月) 09:21:08
DCさくらは初回起動時に何処に設定置くか選べる
553デフォルトの名無しさん:2007/12/24(月) 11:04:03
ジャンクション削除したら中身までまとめて削除してくれる%windir%\explorer.exeは氏ね
554デフォルトの名無しさん:2007/12/24(月) 14:07:09
 ,、,、,||
;'`,゙、.||'、
'; 、' /´;`'.,
 ´' .; ' ; '、'.
   '; 、 ' ,'
    '.,´; '
     l !j
    /ルゝ
555デフォルトの名無しさん:2007/12/24(月) 14:18:51
>>553
explorer.exeを削除で、殺せる

一度、やってみたらすっきりするかも
556526:2007/12/24(月) 14:36:34
チラ裏だがだいたい自己解決したんだぜ
UOI_HEAPSIZEはSharedSectionの2番目の値を返す。そんだけ。動的な使用量とか見えるわけじゃない模様

チラ裏だがついでに
UOI_HEAPSIZE 5 Returns a ULONG value containing the size of the desktop heap, in bytes. 
とか書いてあるがCreateDesktopEx 読むと
The second SharedSection value is the size of the desktop heap needed for each desktop
that is created in the interactive window station, WinSta0, in kilobytes.
となってる。なにがbytesだ。クリスマスとか死ねばいいのに。チラ裏だが
557デフォルトの名無しさん:2007/12/24(月) 16:27:13
Windowを2個出して、変数は共有したいのですが、
子ウィンドウだと、親の外に出られないので困りました。
CreateWindowを使って親を2個つくろうとしてみたのですが、
Windowsプログラミングをよく理解できていないので、上手くいきませんでした。
方法は合ってるのでしょうか?
558デフォルトの名無しさん:2007/12/24(月) 16:27:14
SHGetFileInfoに、
 "C:\foo\bar.sln" (存在するファイル)
を渡したときと
 "*.sln"
を渡したときとで違うアイコンが返ってくるんだけど、なんで?
559デフォルトの名無しさん:2007/12/24(月) 17:44:01
>>558
ソリューションファイル(*.sln)は、
アイコンハンドラの中で、中身を見て別のアイコンを割り当てているから。
VS2005だとアイコンに8という数字が見えるけど、
VS2003とかのファイルだと、たしか7とか付いたはず。
試しに、空ファイルの拡張子をslnに変えて見れば良く判る。
560デフォルトの名無しさん:2007/12/24(月) 17:49:17
typedefされてる構造体名で、↓みたいな感じに、

typedef struct tag_test{
...
} TEST, *LPTEST;

構造体へのポインタが LP(構造体名)ってなってるのをよく見ますが、
このLPって何の略なんでしょうか。
Pはポインタだろうと思うのですが。
561デフォルトの名無しさん:2007/12/24(月) 17:52:42
Long Pointer
562デフォルトの名無しさん:2007/12/24(月) 18:28:39
Win16の名残だな
563デフォルトの名無しさん:2007/12/24(月) 18:54:14
Pをつけるだけだと別の単語になってしまう場合があるから
俺は今でもLPを使っている。
564デフォルトの名無しさん:2007/12/24(月) 21:26:08
>>559
ありがとう
565デフォルトの名無しさん:2007/12/24(月) 21:46:30
       ., -、,. -─- 、⌒〉
         {  }      ヽ_    r'⌒)
         ヽ、  ,,-‐‐  ‐‐-、  iヽ、 J
         {   、_(o)_,: _(o)_ヽ/ ヽ/∪
           !       >::  }  /     丶
          l    /( [三] )ヽノ‐''>  < つわぁぁぁああああ!
        i⊂}__   `二´‐'´__/__      はちみつだと思ったら味噌だった〜
        ヽ   ‐- 、二`ヽ/〉⊂ニニ⊃)
         |    // ̄ ̄)j~U^∪ヽ
         ノ ` ‐-L!--‐''(´      )
        `i''ー----‐ ''"´ ヽ、__/
         !           }  ` }
          !.  , -‐- 、.    ノ--─ '
          ヽ、_{.     `ヽi'⌒i
           `''‐- 、.. __,!
【ラッキーレス】
このレスを見た人はコピペでもいいので
10分以内に3つのスレへ貼り付けてください。
そうすれば14日後好きな人から告白されないわ宝くじは当たらないわ
出世しまくらないわ体の悪い所全部治らないわでえらい事です
566デフォルトの名無しさん:2007/12/25(火) 00:15:00
ウインドウクラスってのがよくわからないんですが
・表示領域+メッセージプロシージャに名前を付けたもの
・OSがそこにメッセージを送る
って感じであってるんでしょうか?

あと、どうもウインドウとかメッセージとかの断片的な知識しかないっぽいので
その辺まとまってる本ご存知でしょうか?
ペゾルトの5版には載ってるのかな?
567デフォルトの名無しさん:2007/12/25(火) 01:01:56
RichEditのマージンを変えるにはどうしたら良いんですか?
教えてください
568デフォルトの名無しさん:2007/12/25(火) 02:16:55

  / ̄ ̄\
  O⌒>  丶
   ⊂二二二⊃
  _/ノ   丶 メリーセモーニャ!!!
 / / ●  ●|
`/ |  (_●_) ミ
f  彡、 |∪| 、\
| / __ 丶ノ/ > )
| (___)  / (_/
丶_|    /
  | /\ \
  | /  ) )
  ∪  ( \
      \_)
569デフォルトの名無しさん:2007/12/25(火) 06:37:24
What was the role of MS-DOS in Windows 95?
ttp://blogs.msdn.com/oldnewthing/archive/2007/12/24/6849530.aspx

Win95は単なるDOSシェルに毛が生えたようなもんだっていう噂があったなぁ。
570デフォルトの名無しさん:2007/12/25(火) 10:07:09
>>566
RegisterClassの引数がすべてだよ。
自分で登録しなくたって、"EDIT"の名前でCreateWindowすると
エディットコントロールが使えるべ?
571デフォルトの名無しさん:2007/12/25(火) 10:12:44
ボタンの絵を持ったものがボタンウィンドウのクラス
572デフォルトの名無しさん:2007/12/25(火) 10:20:14
573デフォルトの名無しさん:2007/12/25(火) 10:25:59
誘導されたのでこちらで失礼します。

現在、MSNメッセンジャーで受信したメッセージから特定のコマンドを抜き出して
別のアプリケーションへ送るというソフトを作ろうとしています。


そこで、まず、あらかじめアクティブにしておいたメッセンジャーで受信した文字列を
1秒間隔でCTRL+A CTRL+Cを利用して取り込む・・・という方法を調べているのですが分かりません。

どなたか答えていただける方がいればよろしくお願いいたします。
574デフォルトの名無しさん:2007/12/25(火) 10:32:15
先ず確認しよう。
あんたはCでAPIを使っているのかC++でAPIを使っているのかどっちだ。
つーか、誘導されたら元の方では移動する旨書くのが当然だろ。
575デフォルトの名無しさん:2007/12/25(火) 10:42:02
>>574
以前やたらとたらい回しにされて移動移動と書いたせいでウザがられてたもので、
ここ暫くはスレの趣旨に合ってるか確認してから移動の旨を書くようにしていたもので・・・すいません。

私の場合はCです。
576デフォルトの名無しさん:2007/12/25(火) 11:02:01
アドインAPIとか使わないでやりたいのか?
577デフォルトの名無しさん:2007/12/25(火) 12:08:55
なるべくややこしくならないように作ろうとは思ってるんですが・・・。

アドインAPI? ・・・こんなのあったんですか。
ちょっと説明読んで見ます。
578デフォルトの名無しさん:2007/12/25(火) 13:16:02
僕はAPIではありません
579デフォルトの名無しさん:2007/12/25(火) 16:33:36
PCTSTRとかのTって何のT?
580デフォルトの名無しさん:2007/12/25(火) 16:37:34
TCHARのT
581デフォルトの名無しさん:2007/12/25(火) 16:38:33
いやTの意味を教えてくださいよこの役立たず
582デフォルトの名無しさん:2007/12/25(火) 16:39:00
583デフォルトの名無しさん:2007/12/25(火) 16:40:44
Transformableかと思ってた
584デフォルトの名無しさん:2007/12/25(火) 16:47:38
Type of CHAR
585デフォルトの名無しさん:2007/12/25(火) 16:50:11
_TEXT()マクロの省略形に思える_T()マクロがあるから、もともとTextのつもりだったんじゃなかろうか。
586デフォルトの名無しさん:2007/12/25(火) 16:50:25
>>582
サンクス

どのサイトや参考書を見てもLPとかCは載っててもTだけ解説されてないから気になってたんだ
587デフォルトの名無しさん:2007/12/25(火) 16:59:42
Template
588デフォルトの名無しさん:2007/12/25(火) 17:01:39
HRESULTのHは・・・
589デフォルトの名無しさん:2007/12/25(火) 17:08:17
むしろ可変なんだからテンプレートは逆なんじゃ・・・?
590デフォルトの名無しさん:2007/12/25(火) 17:21:29
ハンドルのH?
591デフォルトの名無しさん:2007/12/25(火) 17:34:25
性会!!
592デフォルトの名無しさん:2007/12/25(火) 17:34:26
HRESULT=妊娠
593デフォルトの名無しさん:2007/12/25(火) 19:32:38
質問させてください。
現在、WindowsAPIにてファイルを保存するプログラムを作成しています。
ダイアログボックスを開き、ファイルを保存することは出来たのですが、
ダイアログボックスを開かずかつ相対パスの指定でファイルを保存させ
たいと考えています。(キャッシュファイルのように自動的にファイルを保存
するというような感じです)
色々調べたのですが、情報が少なく困ってます。
ご存知の方いましたらご教示ください。お願いします。
594デフォルトの名無しさん:2007/12/25(火) 19:43:15
>>593
GetTempPath
595デフォルトの名無しさん:2007/12/25(火) 19:59:11
>>594
早速のご回答ありがとうございます。
調べてみたところ、TEMPファイルのディレクトリを取得して、
そこに書き込むよう事が出来るみたいですね。
できれば私が指定した場所にファイルを書き込めるようにしたい
と考えています。
現在実行してるexeファイルの場所を取得しておなじ階層に
ファイルを保存したいと考えています。
立て続けに申し訳ありませんが、もしご存知でしたらご教示お願いします。
596デフォルトの名無しさん:2007/12/25(火) 20:02:47
GetModuleFileName
PathRemoveFileSpec
PathAppend
597デフォルトの名無しさん:2007/12/25(火) 20:09:10
>>596
ありがとうございます。
私のやりたかった事ができそうです。
しかし、3つも関数を使わなければいけないのは意外でした。。。
本当にありがとうございました。
598デフォルトの名無しさん:2007/12/25(火) 20:58:09
こうしてまたひとつprogram filesにファイルを書き込もうとする残念なアプリが
599デフォルトの名無しさん:2007/12/25(火) 21:08:05
>>596
馬鹿は氏ねよ
600デフォルトの名無しさん:2007/12/25(火) 21:21:21
レジストリは使いませんと書いておけば
自称上級ユーザが有難がって使うからね
601デフォルトの名無しさん:2007/12/25(火) 21:29:01
まずインストーラがうざい
602デフォルトの名無しさん:2007/12/25(火) 22:00:25
Program Filesにデータ置くと何が問題なの?
ユーザー?
603デフォルトの名無しさん:2007/12/25(火) 22:11:28
vistaのUACが怒る
604デフォルトの名無しさん:2007/12/25(火) 22:11:52
データを置いても別に問題は無いな
605デフォルトの名無しさん:2007/12/25(火) 22:14:53
usersで書けない
→Administrator常用する

マルチユーザ無視
606デフォルトの名無しさん:2007/12/25(火) 22:34:17
>>598
593ですが、特にプログラム上で
program filesにファイルは書きませんが、
なにか問題があるんでしょうか。
607デフォルトの名無しさん:2007/12/25(火) 22:53:54
良い子は"%APPDATA%\ユニークなフォルダ"か(ユーザの)レジストリに書こうね!
608デフォルトの名無しさん:2007/12/25(火) 23:04:01
%WINDIR%\WIN.INIにユニークなセクション作って書いていいですか?
609デフォルトの名無しさん:2007/12/25(火) 23:19:32
〜⊂´⌒∠;゚Д゚)ゝつ
610デフォルトの名無しさん:2007/12/25(火) 23:23:55
>>606
exeと同じ場所に書くんだろ。exeをProgram Filesにインストールしたら、Program Filesに書くことになる。
611デフォルトの名無しさん:2007/12/25(火) 23:53:43
でそれのナニがいけないの?
612デフォルトの名無しさん:2007/12/25(火) 23:56:55
足が臭い
613デフォルトの名無しさん:2007/12/26(水) 00:00:06
Program Files下には、プログラムを置くものだ。
このディレクトリ下が、一般ユーザの権限でも、書き換えできたら、
セキュリティ上問題になるだろ?

だからVistaはProgram Filesに適切にパーミッションを設定した上で、
UACを使っているんだよ。

Program Filesに、一般ユーザ権限で書き込めるってのは、
バッファオーバーフローで任意のコードが実行されるようなセキュリティホールより、
よほど危ない。
614デフォルトの名無しさん:2007/12/26(水) 00:07:00
でも何も起きた事無いだろ
615デフォルトの名無しさん:2007/12/26(水) 00:10:20
ユーザーAがアプリAをカスタマイズして使用する

ユーザーBが同じアプリをカスタマイズ

ユーザーAが再度使用する。(;:. @u@)?設定が違うお

ほかにもAが立ち上げたままBが一時ログオンしたりすると整合性が取れなくなったり。
616デフォルトの名無しさん:2007/12/26(水) 00:11:12
あれだな、
「XPを複数ユーザで使ってはいけませぬ」
だな。
617デフォルトの名無しさん:2007/12/26(水) 00:17:16
>>613
とはいえ、EXEと同じ階層にINIとか作るソフトが多いと思うんだが
Vistaは使ったことないんだがそういうソフトでも警告でまくるの?
618デフォルトの名無しさん:2007/12/26(水) 00:18:47
>>600 だな。
619デフォルトの名無しさん:2007/12/26(水) 00:22:27
>>617
互換性のために、
ファイルとレジストリの仮想化というものがあって、
32bitコードが一般ユーザの権限で実行されている場合、
システムのレジストリに書き込もうとすると、自動的にユーザのレジストリにリダイレクトされ、
Program Filesに書き込もうとすると、別のディレクトリにリダイレクトされる。

620デフォルトの名無しさん:2007/12/26(水) 00:23:06
>>617
一般ユーザが Program Files 以下に書き込もうとしたら
実際には別のフォルダにアクセスする機能があった気がする
621デフォルトの名無しさん:2007/12/26(水) 00:25:36
exeのディレクトリにファイル保存するって言うとすぐに反応があっておもしろいな。
インストールしないソフトだったら関係ないじゃん。
622デフォルトの名無しさん:2007/12/26(水) 00:28:01
615の問題を考慮していればね。
623デフォルトの名無しさん:2007/12/26(水) 00:40:22
>>621
私のプログラムはProgram Filesへのインストールは必要ないので
>>613のような心配は無いですが、確かにそう言う危険性も
あるんですね。。。無知でした。今回は大丈夫ですが、
こういう事も念頭に置いて設計するべきでした。
当たり前のことなのかもしれないですが、ありがとうございます。
624デフォルトの名無しさん:2007/12/26(水) 00:44:24
取り敢えずUNIX勉強しとけ
625デフォルトの名無しさん:2007/12/26(水) 00:45:21
>>623
でもさ今時一つのマシンみんなで使うとか有り得なくね?
626デフォルトの名無しさん:2007/12/26(水) 01:15:46
しかしないこともないから
もしフリーで配布とかするなら
考慮するのがばふぁりん
627デフォルトの名無しさん:2007/12/26(水) 01:30:11
この話題って絶対荒れるよなw
628デフォルトの名無しさん:2007/12/26(水) 01:41:52
インストールするとかしないとか関係ない。
マシンをみんなで使うとか使わないとか関係ない。
ACLとかグループポリシーの実行可能パスとか何のためにあると思ってんだ?
システムの安全策の基本中の基本だろ。泥酔時に備えた。
629デフォルトの名無しさん:2007/12/26(水) 03:37:53
あれだ。呼気中のアルコールを検出するセンサー内臓のPCがほしいぞ。
630デフォルトの名無しさん:2007/12/26(水) 06:16:08
そんな内臓要らない。
631デフォルトの名無しさん:2007/12/26(水) 07:15:29
しかしHDDの容量が500GBにもなろうかという時代に
ドライブ分割もせず全てのアプリをProgramフォルダにインストールするものかね?
632デフォルトの名無しさん:2007/12/26(水) 07:17:54
うん
633デフォルトの名無しさん:2007/12/26(水) 07:18:24
>>627
変なトラウマを持っているのが居着いているだけかと…
634デフォルトの名無しさん:2007/12/26(水) 08:49:20
>>631
だからunix勉強しろって
635デフォルトの名無しさん:2007/12/26(水) 09:15:07
2000の頃からMSのガイドラインには設定ファイルはユーザーディレクトリに保存しろとは書いてあるけどね
636デフォルトの名無しさん:2007/12/26(水) 09:54:12
VistaはProgram Filesに書こうとすると、Usersの下のログインユーザーのディレクトリに書き込まれる。
これは互換性のためにやっていることで、積極的にこの機能を利用するなとは言ってる。

オレも設定ファイルどこ行ったか探し回って気が付いたのだが・・・
637デフォルトの名無しさん:2007/12/26(水) 10:12:45
OSが対応してくれてるなら何の問題もないじゃん
馬鹿?
638デフォルトの名無しさん:2007/12/26(水) 10:23:30
>>637
誰に言ってるんだ、このまぬけw
639デフォルトの名無しさん:2007/12/26(水) 10:29:41
32bitポインタの最上位ビットをフラグとして使っても問題ないよね。
HWNDは上位16bitと下位1bitを削っても使えるけど問題ないよね。
つーかシフトJISで問題ないよね。
640デフォルトの名無しさん:2007/12/26(水) 10:47:51
>>639
それで実際問題が出ていないなら何ら問題ないよ
はい次
641デフォルトの名無しさん:2007/12/26(水) 12:52:28
>>639
Windows 2000 からアプリケーションのアドレス空間が3GBになるモード
があるので、ポインタの最上位ビットを他の用途に使うことはできない。

HWNDが0x10000以上になることはあった気がする。
642デフォルトの名無しさん:2007/12/26(水) 12:58:52
VistaでSpy++起動してみたら0x10000超えのHWNDなんていくらでもあるぞ
0x0111001Cなんてのも
643デフォルトの名無しさん:2007/12/26(水) 13:00:35
どっちもWin9xの話じゃないのか
95のAPIセットはWin32cと呼ばれてた時代が懐かしい
644デフォルトの名無しさん:2007/12/26(水) 13:41:38
Win32Sも懐かしい
645デフォルトの名無しさん:2007/12/26(水) 13:51:03
WinGも懐かしい
646デフォルトの名無しさん:2007/12/26(水) 14:20:51
Win32ってなにげに登録商標なんだよな
647デフォルトの名無しさん:2007/12/26(水) 15:35:38
×対応してくれる
○馬鹿の尻拭い
648デフォルトの名無しさん:2007/12/26(水) 15:56:04
「管理者常用は池沼」的な啓蒙を怠ってきたのが悪い。
649デフォルトの名無しさん:2007/12/26(水) 15:59:44
いいやおまえがわるい
650デフォルトの名無しさん:2007/12/26(水) 16:14:46
まだ「exeと同じフォルダ」にini作るソフトはマシな方
カレントフォルダ=exeのフォルダと決めつけてコーディングしてる馬鹿ソフトが未だに多い
651デフォルトの名無しさん:2007/12/26(水) 16:15:14
皆さんは大きさを変えられないウィンドウを作るときってどうしてますか?
WM_SIZINGに処理を書いているのか、ウィンドウスタイルの変更だけで対応しているのか
それぞれのメリットデメリットってどんなのがあるんでしょうか?
652デフォルトの名無しさん:2007/12/26(水) 16:26:27
ウィンドウスタイルでそれ周り削れば
653デフォルトの名無しさん:2007/12/26(水) 16:31:25
そんなになんとしてでもサイズ変えて欲しくないって状況じゃないし、スタイルだけだな
654デフォルトの名無しさん:2007/12/26(水) 16:35:29
WS_SIZEBOX持ってるのにサイズ変えられない窓ってどうよみたいな感じ。
655デフォルトの名無しさん:2007/12/26(水) 17:50:46
質問です

起動しているプロセスがどういうAPIを使用しているか検出するツールってありますか?
656デフォルトの名無しさん:2007/12/26(水) 17:57:38
>>655
起動じゃないけど、EXEやDLLのファイルから調べるやつがあるよ。
depends.exe マイクロソフト製
657デフォルトの名無しさん:2007/12/26(水) 17:57:41
起動しているプロセスを列挙
目的のをチョイスさせる
実行ファイルを探す
インポートテーブルを漁る
658デフォルトの名無しさん:2007/12/26(水) 17:58:09
ってどういうDLLだけか、わかるのは
659デフォルトの名無しさん:2007/12/26(水) 18:03:16
VS2008になってDepends.exe付属しなくなってない?
見つからないんで2005の使ってる
660651:2007/12/26(水) 18:04:12
>>653
スタイルだけで普通に使う分には大丈夫ですよね。

ところでSetWindowPosで起動後にウィンドウサイズを最小化限度より
小さく設定するとウィンドウを移動したりしたときに大きさが限度サイズに
勝手になってしまうんですが、これってスタイルだけじゃ済まないですかね?
661デフォルトの名無しさん:2007/12/26(水) 18:14:48
はい
662デフォルトの名無しさん:2007/12/26(水) 18:28:21
>>659
Dependency Walkerは単独でも入手できる
663デフォルトの名無しさん:2007/12/26(水) 19:47:12
GetTickCountとtimeGetTimeの違いは何ですか
664デフォルトの名無しさん:2007/12/26(水) 20:44:46
>>663
解像度の違い。
GetTickCountは、NT系で10ms、9x系だと55ms位か?
timeGetTimeはtimeBeginPeriodさえきちんと呼んでいれば、
1msまで確保できる場合が殆ど。(一応PCに依存するという事にはなっているが)

100ms単位程度の適当な間隔でいいならGetTickCount、
もっとまともに計測したい場合はtimeGetTime、
極めたいならQueryPerformanceCounterってところか。
665デフォルトの名無しさん:2007/12/26(水) 21:10:44
分解能の間違いです。ごめんなしあ><
666デフォルトの名無しさん:2007/12/26(水) 21:49:23
気にしなくていいですよ♪
667デフォルトの名無しさん:2007/12/26(水) 21:58:04
いいや、貴様は気にするべきだ
668デフォルトの名無しさん:2007/12/26(水) 22:26:04
>9x系だと55ms位か?

懐かしいな、この間隔はDOSのときのタイマー割り込みだな。
8253のカウンター割り込みで、すべてがこれを基準にしてたなあ
669デフォルトの名無しさん:2007/12/27(木) 00:19:03
ウィンドウの上にカーソルが乗っかってるか判断したい場合
どのようにすればいいいですか?
670デフォルトの名無しさん:2007/12/27(木) 00:40:47
>>669
WindowFromPointを使うとか。
671デフォルトの名無しさん:2007/12/27(木) 00:44:11
それかGetWindowRect → PtInRect
672デフォルトの名無しさん:2007/12/27(木) 12:47:08
SetRectEmptyとかPtInRectってAPIにするほどのものだったんだろうか・・・
673デフォルトの名無しさん:2007/12/27(木) 12:56:15
それを言い出すとCのabsとかも関数にするほどじゃないと思うけど、まぁ別にいいんじゃね。
すべてのAPIがカーネルモードに入るわけでもないし、ただの便利関数だと思えば。
674デフォルトの名無しさん:2007/12/27(木) 13:21:03
僕はポインターではありません
675デフォルトの名無しさん:2007/12/27(木) 13:21:28
#define ABS(x) ((x)^1<<sizeof(x)-1)
676デフォルトの名無しさん:2007/12/27(木) 13:23:10
#define ABS(x) ((x)&(1<<sizeof(x)-1)-1)
677デフォルトの名無しさん:2007/12/27(木) 14:17:22
なんという1の補数向け
678デフォルトの名無しさん:2007/12/27(木) 14:20:06
つーかVCだとabsなんてstrcpyみたいにインライン展開されるが
679デフォルトの名無しさん:2007/12/27(木) 15:38:09
インクルードであれじゃない?
それマクロのとか
680デフォルトの名無しさん:2007/12/27(木) 16:04:56
>>679
日本語でOK。
681デフォルトの名無しさん:2007/12/27(木) 16:12:17
>>680
初心者用の本買って勉強したほうがいいよ。
682デフォルトの名無しさん:2007/12/27(木) 16:17:14
ahosugi
683デフォルトの名無しさん:2007/12/27(木) 16:42:39
組込関数も知らんのか
684デフォルトの名無しさん:2007/12/27(木) 16:47:13
>>683
マサチューセッツであれじゃない?
それマクロスのとか
685デフォルトの名無しさん:2007/12/27(木) 16:56:15
マクロの空を貫いて
地球を撃ったいかづちは
我ら幼い人類に
目覚めてくれと鼻垂れた
マクロスマクロス
雄々しく起った若者は
愛する人を庇いつつ
旅立つ日々を戦い開く
うるらあヴみいともーろう
闇を切り裂き飛び行く先は
遠く輝く青い星
マクロスマクロスああマクロス
686デフォルトの名無しさん:2007/12/27(木) 16:58:31
祝25周年!あのマクロスが帰ってくるぞSP!!
687デフォルトの名無しさん:2007/12/27(木) 19:25:36
>>672
Win16の頃はそれなりの価値があったと思う。
少しでもコードサイズが小さくなる事が重要だったし。
688デフォルトの名無しさん:2007/12/27(木) 23:38:11
あたしの歌を聴け
689デフォルトの名無しさん:2007/12/28(金) 00:48:06
>>641
それを使うには、リンカオプション /LEARGEADDRESSAWAREなどで、
ポインタに32ビット全て使っていいよってフラグを立てないといけない。

そのフラグが立っていない場合は、従来通りユーザアドレス空間2GiB。
もちろん>>639のようなことをする輩のため。

ちなみにDLLはそういう選択ができないので、
ポインタの最上位ビットを使うことは、問答無用で禁止。
690639:2007/12/28(金) 01:18:43
もちろんおいらのギャグは分かってくれてると思うけど、ひとつだけ

>HWNDは上位16bitと下位1bitを削っても使えるけど問題ないよね。
コレは正しい。将来は保障できないけど

HWNDの値は16bitコードと互換性を保つため、下位16bitしか使っていない。
また、当時HWNDの値は常に偶数であると信じていたプログラムがあったために、下位1bitも使われていない。

で、なんでNTで上位16bitが立っているHWNDがあるかって言うと、
再利用に対処するため。
16bitで割り当てていくと、かなりの確立でかぶる。
あるプロセスが別のプロセスのHWNDを取得して、そこにメッセージを送っていたとする。
そのプロセスのウインドウがなくなって、HWNDが再利用された場合、絶対いいことは起こらない。

だから、NTでは上位16bitを、下位16bitに同じ値が使われるたびにインクリメントしていって、
値がかぶらないようにしている。
だから、上位16bitをゼロクリアしても、動いてしまう。
悪用するとレイモンドが怒るので要注意。

ttp://blogs.msdn.com/oldnewthing/archive/2007/07/16/3885472.aspx
ttp://blogs.msdn.com/oldnewthing/archive/2007/07/17/3903614.aspx
ttp://blogs.msdn.com/oldnewthing/archive/2007/07/18/3926581.aspx
691デフォルトの名無しさん:2007/12/28(金) 02:20:07
(´・∀・`)ホニャァー
692デフォルトの名無しさん:2007/12/28(金) 03:14:59
へぇー
693デフォルトの名無しさん:2007/12/28(金) 07:36:12
>>690
Win64だとどうなの?
694デフォルトの名無しさん:2007/12/28(金) 11:13:24
そんなものねー
695デフォルトの名無しさん:2007/12/28(金) 11:28:32
Win64はわしが作った AA略
696デフォルトの名無しさん:2007/12/28(金) 11:58:10
w
697デフォルトの名無しさん:2007/12/28(金) 12:50:26
シェルエクステンションもここでいいのかな?

IExtractImageを実装したんだけど、2000で動かすと時々フォルダ内の全ファイルに同じ
サムネイルが出るようになる不具合はどう対処したらいいんでしょう。
MSDNのサンプル実装で起きるし、フラグ類いろいろ変えたりマルチスレッド対応にしたり
しても改善せず・・・
698デフォルトの名無しさん:2007/12/28(金) 12:54:24
699デフォルトの名無しさん:2007/12/28(金) 13:56:34
700デフォルトの名無しさん:2007/12/28(金) 15:05:14
それはオーバーレイアイコンじゃないか。
701デフォルトの名無しさん:2007/12/28(金) 17:59:42
StackWalk() で現在のスレッドのスタックトレースを得るにはどうすればよいのでしょうか?
他のプロセスや他のスレッドのスタックトレースは取れたのですが、自分自身のスタックトレースは
GetCurrentProcess() or OpenProcess(PROCESS_ALL_ACCESS, true, GetCurrentProcessId())
GetCurrentThread() or OpenThread(THREAD_ALL_ACCESS, true, GetCurrentThreadId())
の何れの組み合わせでもダメでした。
よろしくお願いします。
702デフォルトの名無しさん:2007/12/28(金) 18:21:34
http://www.codeguru.com/cpp/w-p/system/threading/article.php/c10317__2/
によるとだな、
>Walking the callstack of the current thread
>On x86 systems (prior to XP), there is no direct supported function (略)
>The recommended way is to throw an exception and catch it.(略)
>If you want to use the documented way, you need to define
>CURRENT_THREAD_VIA_EXCEPTION for the project. (略)

>Starting with XP, and on x64 and IA64 systems, there is a
>documented function to retrieve the context of the current thread:
>RtlCaptureContext.
703デフォルトの名無しさん:2007/12/28(金) 21:17:56
UIのコードと処理のコードを別々にすることによって得られるメリットを教えて欲しいです。
704デフォルトの名無しさん:2007/12/28(金) 21:34:35
UI変えても動く
705デフォルトの名無しさん:2007/12/28(金) 23:32:15
>>701
これでどうかな?

// StackWalk用にCONTEXT構造体の値をセット
CONTEXT currentThreadContext = { CONTEXT_FULL, 0 };
GetThreadContext(GetCurrentThread(), ¤tThreadContext);
currentThreadContext.Esp = currentThreadContext.Ebp;
currentThreadContext.Ebp = *(DWORD*)(ULONG_PTR)(currentThreadContext.Ebp + 0);
currentThreadContext.Eip = *(DWORD*)(ULONG_PTR)(currentThreadContext.Ebp + 4);
currentThreadContext.Ebp = *(DWORD*)(ULONG_PTR)(currentThreadContext.Ebp + 0);

STACKFRAME64    stackFrame = { 0 };
stackFrame.AddrPC.Offset    = currentThreadContext.Eip;
stackFrame.AddrPC.Mode      = AddrModeFlat;
stackFrame.AddrFrame.Offset = currentThreadContext.Ebp;
stackFrame.AddrFrame.Mode   = AddrModeFlat;
stackFrame.AddrStack.Offset = currentThreadContext.Esp;
stackFrame.AddrStack.Mode   = AddrModeFlat;

StackWalk64(
    IMAGE_FILE_MACHINE_I386,
    GetCurrentProcess(),
    GetCurrentThread(),
    &stackFrame,
    ¤tThreadContext,
    NULL,
    SymFunctionTableAccess64,
    SymGetModuleBase64,
    NULL
);
706デフォルトの名無しさん:2007/12/28(金) 23:33:59
ありゃ、& が化けちまった。

?tThreadContext を &currentThreadContext に読み替えて頂戴。
707デフォルトの名無しさん:2007/12/29(土) 00:09:10
他のアプリケーションでクリックされたツールバーボタンに設定されているツールチップを取得するにはどうすればいいですか?
フックして色々取得しようとしたのですがうまくいきませんでした
708デフォルトの名無しさん:2007/12/29(土) 00:15:12
他のアプリケーションの実装によるだろ・・
709デフォルトの名無しさん:2007/12/29(土) 00:17:37
インターネットへの接続にプロクシが設定してある環境で、
手っ取り早くインターネット上のHTTPサーバと通信するAPIとかってありますか?

プロクシのアドレスを取得してwinsockするしかないのかな
710707:2007/12/29(土) 00:19:01
>>708
ワードパッドとかみたいな、普通のツールバーでいいのですが...
711デフォルトの名無しさん:2007/12/29(土) 00:23:52
>>709
wininetでも使ってろ
712デフォルトの名無しさん:2007/12/29(土) 00:25:38
>>710
TBN_GETINFOTIPでも見てろハゲ
713710:2007/12/29(土) 00:29:59
>>712
ハゲではありません
嘘を書かないでください
714デフォルトの名無しさん:2007/12/29(土) 00:34:01
>>713
ならば貴様の頭を晒してみろ
本当はハゲかも知れない
715デフォルトの名無しさん:2007/12/29(土) 00:38:09
>>713
ごめんごめん、確かズラだったよな。
ハゲとズラは区別するべきなのを忘れてた。
716デフォルトの名無しさん:2007/12/29(土) 00:55:39
nif規制解除記念カキコ
717デフォルトの名無しさん:2007/12/29(土) 00:55:42
>>709
これ使えそうじゃない? 自分は使ったことないけど
WinHTTP AutoProxy Support
ttp://msdn2.microsoft.com/en-us/library/aa384240.aspx
718デフォルトの名無しさん:2007/12/29(土) 00:59:34
どうして列挙体とかネームスペース使ってちゃんと整理しないの?
719デフォルトの名無しさん:2007/12/29(土) 01:06:39
Cにいつからネームスペースが導入されたのかと。
720デフォルトの名無しさん:2007/12/29(土) 01:12:21
つくるしかない
721デフォルトの名無しさん:2007/12/29(土) 01:47:19
>>711
サンクス。
INTERNET_OPEN_TYPE_PRECONFIGフラグ付けたらいけた。
proxyのアドレス取得もproxyの経由もHTTP通信も全部やってくれてすげえ楽。
こんなに楽に実装できてしまうなんてAPI様々ですね。
722デフォルトの名無しさん:2007/12/29(土) 02:01:18
>>709
InternetOpen
InternetOpenUrl
InternetReadFileでおk

確か、これで、IEの設定に自動的に合わせて通信してくれたと思う

Sockを使う場合はレジストリのCurrentVersion\InternetSettings\ProxyServerからIEのプロキシ設定を読み込んで、それを使えばいいと思う
723デフォルトの名無しさん:2007/12/29(土) 02:02:35
ってもう解決済みだったのか...orz
724デフォルトの名無しさん:2007/12/29(土) 06:32:33
指定のURLのファイルを保存するような便利な関数ありませんか?
725デフォルトの名無しさん:2007/12/29(土) 07:06:16
ごめん調べてたら分かりそう
726デフォルトの名無しさん:2007/12/29(土) 10:52:29
URL Monikorsの出番?
何か便利そうだなあと思いつつ、一度も使った事無いけど。
727デフォルトの名無しさん:2007/12/29(土) 12:01:31
http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-30667.htm
リンク先の話題、一番スマートな解決法は?
Windows Media Playerがいい感じで実装されてるけど、
どうやってんだろ。
728デフォルトの名無しさん:2007/12/29(土) 12:19:12
見ないでもわかる

窓からPCを捨てる
729デフォルトの名無しさん:2007/12/29(土) 12:25:44
・マージしているインスタンスがなければ、ウインドウ起動して、n秒間マージ処理を受け付ける
・どっかのインスタンスがマージ中なら、そいつに追加して終了。
 マージ期間をさらにn秒のばす

みたいなヒューリスティックな動作はどうよ。
730デフォルトの名無しさん:2007/12/29(土) 13:16:43
>>724
URLDownloadTo(Cache)File
731デフォルトの名無しさん:2007/12/29(土) 13:32:46
>>727
メディアプレーヤーは多重起動防止してるから違うだろう。
リンク先の人は、多重起動を防止せずに、そういう動作をさせたいと言っている。
732デフォルトの名無しさん:2007/12/29(土) 13:42:37
メディアプレイヤーの多重起動部分をクラックして多重起動できるようにすればいい
733デフォルトの名無しさん:2007/12/29(土) 14:18:53
SDKのリストビューで、ヘッダコントロールをリストビューのクライアントの外に移動させたいのですが、
MoveWindowやSetWindowPosで移動させようとしても本来の位置から動きません。
移動させるにはどうしたらいいですか
734デフォルトの名無しさん:2007/12/29(土) 14:36:00
>>727
前回のexe呼び出しからの経過時間で判断すればいいんじゃないか
ファイル複数開いたときはごく短時間のうちに次々とexeが呼ばれる
ファイルを単独で開いたときは前回のexe呼び出しからの経過時間が長い
735デフォルトの名無しさん:2007/12/29(土) 15:41:36
cmdのtitleコマンドに相当するAPIってなんですか?
コンソールアプリのウィンドウキャプションを設定したいです。
736デフォルトの名無しさん:2007/12/29(土) 16:02:57
CreateFileMappingとMapViewOfFileを使うことによりプロセス間で固定長のメモリを
共有することはできますが、あとからサイズを増やすことのできるメモリ共有はありますか?

GlobalAllocというAPIで、できそうな気もしなくもないのですが
MSDNにこのAPIの使用はお勧めしないと書かれてました
737デフォルトの名無しさん:2007/12/29(土) 16:51:32
いったん全部開放すれ
738デフォルトの名無しさん:2007/12/29(土) 17:36:48
つか、可変長のメモリなんざ共有するなんて、どんな用途だ?
739736:2007/12/29(土) 17:45:50
>>737 美しくない。。。
>>738 ちょwwwおまおま級プロセス間通信

正直手段が目的化してることは否めない
740デフォルトの名無しさん:2007/12/29(土) 17:51:31
プロセス間通信ならWM_COPYDATAでも使え
あとは必要に応じて受け渡せ
741デフォルトの名無しさん:2007/12/29(土) 18:07:44
>>736 ぐぐったらこんなの見つけた うまく動くかはしらん

Example of Creating and Using a Shared-Memory User Heap
ttp://www.uni-kassel.de/hrz/server/UNIX+SW-Infos/languages/ibmcxx/libref/tasks/tumemex2.htm
742デフォルトの名無しさん:2007/12/29(土) 18:08:36
Windows3.1ならポインタ渡すだけで共用できて楽しかったな。
743デフォルトの名無しさん:2007/12/29(土) 18:13:45
>>741
CreateFileMappingで多めに確保してるだけじゃね? どこでメモリサイズ増やしてるん?
744デフォルトの名無しさん:2007/12/29(土) 18:25:55
>>739
なんつーか、設計やり直した方がいいんじゃねーか?
745デフォルトの名無しさん:2007/12/29(土) 18:29:36
9xの頃は共有ヒープって隠し機能があったな
746デフォルトの名無しさん:2007/12/29(土) 18:35:32
出来ない・知らないならそう答えればすむ事を長々と・・・
747デフォルトの名無しさん:2007/12/29(土) 18:55:37
人にはプライドというものが・・・
748デフォルトの名無しさん:2007/12/29(土) 18:56:22
それが2chクオリティー
749デフォルトの名無しさん:2007/12/29(土) 19:00:56
>>724じゃないがURLDownloadToFileなんて便利な関数があったのかと使ってみたら
下記のようなエラーがでて使えない…
だれかタスケテ

URLDownloadToFile(NULL,"http://www.google.co.jp/","index.html", 0, NULL);
↑こう書いたら ↓こんなエラーが
1>WinAPI.obj : error LNK2019: 未解決の外部シンボル
_URLDownloadToFileA@20 が関数 "long __stdcall WndProc(struct HWND__ *,unsigned int,
unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。
750デフォルトの名無しさん:2007/12/29(土) 19:05:11
>>749
tp://msdn2.microsoft.com/en-us/library/ms775123.aspx
Import library Urlmon.lib

と、書いてあるが、Urlmon.lib はインポートしてるの?
751デフォルトの名無しさん:2007/12/29(土) 19:47:47
>>750
ありがとう。インポートしてなかった
リンクしたらいけました。これは恥ずかしい
752デフォルトの名無しさん:2007/12/29(土) 19:52:32
>>731
すでに自分のプロセスが起動していた場合、
そっちに引数を渡して即座に終了って設計で、
多重起動していたらどっちに渡せばいいんだって思ったが。

MSのVisual StudioのIDEだって同じことをしているんだよな。

ランダムで決めるとか、もっとも最近、ウインドウがアクティブだったプロセスを選ぶとか、
いろいろと決め方はあるだろうけど。
753デフォルトの名無しさん:2007/12/29(土) 21:28:58
>>727
シェルエクステンションでメニューを追加するのが一番いいと思う。エクスプローラの挙動を変えようとしているんだもん。
754デフォルトの名無しさん:2007/12/29(土) 21:41:36
ここってWindowsプログラムの設計上のアドバイスもおkなの?
それとも設計上アレなのはさておき、技術的な質問に対する実装の回答を行うべき(求めるべき)場所なの?

>>753の言ってることは解るけど、なんか回答としては釈然としない
まあ>>727自体はこのスレに向かって投げられた質問で無いけどさ

755デフォルトの名無しさん:2007/12/29(土) 21:45:06
別に設計上だろうが思想上だろうがオKだろ。
ただ抽象度が上がると質問も回答も難しくなるというだけの話で。
756デフォルトの名無しさん:2007/12/29(土) 22:17:27
そりゃあそうか。別にそれで「スレの趣旨と違いますっ!」って荒れるのも見てないし
そーいうもんかもね。
757デフォルトの名無しさん:2007/12/29(土) 22:36:17
関連付けのDDEかDroptargetか、adobe readerみたいにexeで受けてからddeか
なにかでやるか
758デフォルトの名無しさん:2007/12/30(日) 00:06:02
ROTに登録という手も
759デフォルトの名無しさん:2007/12/30(日) 00:27:36
いまさらddeというのもなんだからrotがいいね
760デフォルトの名無しさん:2007/12/30(日) 01:04:37
よく考えたら、「送る」のメニューにその対象プログラム登録するだけでいいよね・・・。
761デフォルトの名無しさん:2007/12/30(日) 01:42:40
よく考えなくても、それに、リンク先にも書いてあった
762デフォルトの名無しさん:2007/12/30(日) 13:06:24
度々出てくるCurSelって何の略?
763デフォルトの名無しさん:2007/12/30(日) 13:13:37
current selection
764デフォルトの名無しさん:2007/12/30(日) 15:06:38
HDC hdc;
PAINTSTRUCT ps;

hdc = BeginPaint(hwnd, &ps);

(hdcを使って描画処理)

EndPaint(hwnd, &ps);

入門書で描画のところがこんな風になっていたのですが、
BeginPaintの戻り値はpsに格納されたhdcと同じだ、とありました。
ということは、

PAINTSTRUCT ps;

BeginPaint(hwnd, &ps);

(ps.hdcを使って描画処理)

EndPaint(hwnd, &ps);

でいいんじゃないかな、と思ってやってみたところできてしまいました。
これは、一度別の変数に代入したのは初心者にわかりやすく、ってことなのでしょうか。
それとも後々、下のやり方だと困る(ps.hdcが変更されて元のhdcが必要になるような?)事があるんでしょうか?
765デフォルトの名無しさん:2007/12/30(日) 15:18:19
>>764
この話題って前スレにも出てたよな
766デフォルトの名無しさん:2007/12/30(日) 15:24:06
Win16の頃からある関数だし、
戻り値はレジスタ渡しだからコードをちっちゃくできるとかそういうところじゃないか?
767デフォルトの名無しさん:2007/12/30(日) 15:26:01
if( BeginPaint(hwnd, &ps) ){
...
EndPaint(...);
}
みたいにできるからじゃね?
768デフォルトの名無しさん:2007/12/30(日) 16:08:23
>>767
それだとBOOL返せばいいし、
そうなっているものも多いから、主張としては弱いよ。
769デフォルトの名無しさん:2007/12/30(日) 17:57:18
int a;
(a = 5) == 5
770デフォルトの名無しさん:2007/12/30(日) 18:35:05
単に ps.hdc より hdc の方がタイプ数が少なくてすむからじゃね?
771デフォルトの名無しさん:2007/12/30(日) 19:20:40
前スレで既出で解決済の話題をいつまでも続けてんじゃねーよ糞共
772デフォルトの名無しさん:2007/12/30(日) 20:22:05
よくituneのアートワークを自動登録するアプリとかあるけど
ituneのAPIって公開されてるの?
773デフォルトの名無しさん:2007/12/30(日) 20:29:32
>>772
WIN32APIには該当するものがありません。
774デフォルトの名無しさん:2007/12/30(日) 20:30:17
>>772
されてるよ
ドキュメントつきのSDKあるし。
Winの場合COMインターフェースなだけだが
775デフォルトの名無しさん:2007/12/30(日) 21:22:36
だから前スレ見れよ糞共
776デフォルトの名無しさん:2007/12/30(日) 21:30:39
ボタンがいくつか並んでおり、
そのひとつが押された状態になっています。
ほかは普通の状態なのですが、
押されたボタンかどうかを判断するための
APIはあるのでしょうか?

IsWindowEnabledだと思ったのですが、
どれもtrueを返します。

テスト上押されたボタンの子ウィンドウハンドルは
Winspectorで得てます。
777デフォルトの名無しさん:2007/12/30(日) 21:39:38
>>776
せめてMSDNぐらい検索してから質問したらどうなんだ?
778デフォルトの名無しさん:2007/12/30(日) 21:53:49
わからないなら黙っててください><
779デフォルトの名無しさん:2007/12/30(日) 21:54:45
ボタンが押された状態のことを
なんというのでしょうか?
それがわかればなんとか
しらべられそうなのですが。

そのボタンはほかのソフトです。
780デフォルトの名無しさん:2007/12/30(日) 21:58:35
>>779
せめてMSDNぐらい検索してから質問したらどうなんだ?
781デフォルトの名無しさん:2007/12/30(日) 21:59:34
わからないなら黙ってろってんだろ><
782デフォルトの名無しさん:2007/12/30(日) 22:01:41
IsWindowEnabledだと2z4f6m0ueq@\
783デフォルトの名無しさん:2007/12/30(日) 22:08:05
IsDlgButtonChecked
でもないですよね
0が帰ってきます。
784デフォルトの名無しさん:2007/12/30(日) 22:09:04
BM_GETSTATE、と神の啓示がありました( -人-)
785デフォルトの名無しさん:2007/12/30(日) 22:17:31
0と4が返ってきました。
いけそうかも。お世話様です。
786デフォルトの名無しさん:2007/12/30(日) 23:08:07
& 0100
787デフォルトの名無しさん:2007/12/31(月) 01:32:06
ttp://msdn2.microsoft.com/en-us/library/bb775943(VS.85).aspx
ボタンのとこ眺めればこんなとこで質問しなくて済むのに
788デフォルトの名無しさん:2007/12/31(月) 01:40:04
>>778
わからないなら黙っててください><
789デフォルトの名無しさん:2007/12/31(月) 01:55:47
>>787
英語なんて知るか馬鹿
790デフォルトの名無しさん:2007/12/31(月) 02:30:45
>>789
知れ
791デフォルトの名無しさん:2007/12/31(月) 03:13:59
起動中の他のアプリが終了された事を検知する方法ってありますか?
待機関数とか使わないで、フックみたいに終了した時に呼んでほしいのですが。
WM_DESTROYをフックで拾ったら終了前から6,7個拾ってきて使い物になりませんでした。
792デフォルトの名無しさん:2007/12/31(月) 06:01:28
プロセスを見張る
793デフォルトの名無しさん:2007/12/31(月) 12:51:44
OpenProcessして、 RegisterWaitForSingleObjectでコールバックもらったら。
794デフォルトの名無しさん:2007/12/31(月) 17:03:07
>>792さん>>793さんありがとうございます。
結局、WM_DESTROYを受け取った時に、GetWindowThreadProcessIdが失敗するかどうかで判断できました。
795デフォルトの名無しさん:2008/01/01(火) 02:23:38
for文内の変数iをfor文内のSendDlgItemMessageを使いエディットコントロールに送信したのですが、
文字化けを起こしてしまいます。
なぜ文字化けが起こるんですかね?
796デフォルトの名無しさん:2008/01/01(火) 02:47:53
知るかボケ
iに聞け
797デフォルトの名無しさん:2008/01/01(火) 02:52:59
iは文字列なのか?
798デフォルトの名無しさん:2008/01/01(火) 03:29:17
引数か?
799デフォルトの名無しさん:2008/01/01(火) 03:30:13
数値と文字の違いもわからないでダイアログ出してコントロール弄ってるのか・・・
800デフォルトの名無しさん:2008/01/01(火) 03:34:55
はて? またはObjectなのか…
801デフォルトの名無しさん:2008/01/01(火) 04:54:07
引数です。
802デフォルトの名無しさん:2008/01/01(火) 11:33:50
引導
がいいんじゃね
803 【豚】 【1170円】 :2008/01/01(火) 11:36:54
> iに聞け
私に聞け・・・?
804デフォルトの名無しさん:2008/01/01(火) 13:53:55
ウィンドウが非アクティブな状態でも、キーボードショートカットが効くアプリを作りたい。
で、キーフック用のDLLからウィンドウにPostMessageでWM_SYSKEYDOWN、WM_KEYDOWNを
投げてるんだが、キーボードアクセラレータが反応しない。
自前でWM_COMMANDに変換して投げるしかないのかな。
将来的にキーカスタマイズ機能をつける予定だから、自前で変換するとなると若干めんどい。
805デフォルトの名無しさん:2008/01/01(火) 13:54:57
もうホットキーでいいんじゃね
806デフォルトの名無しさん:2008/01/01(火) 15:29:58
これなんですが、
for(int i = 0; i<9999; i++)
{
SendDlgItemMessage(hwnd,IDC_EDIT1,EM_REPLACESEL,0,(LPARAM)((LPSTR)&i));
}
807デフォルトの名無しさん:2008/01/01(火) 15:45:06
i + '0'
808デフォルトの名無しさん:2008/01/01(火) 15:46:34
こりゃひどいなwwwww
809デフォルトの名無しさん:2008/01/01(火) 16:07:21
初wwww
810デフォルトの名無しさん:2008/01/01(火) 16:10:32
新春初笑い会場はここですかwww
811デフォルトの名無しさん:2008/01/01(火) 16:40:07
>>806
>(LPSTR)&i
100%分かってないだろうが、この意味を説明できるか?
これはどんな文字列になると思う? ってか、これが文字列になると思うか?

そこを答えてみ。
812デフォルトの名無しさん:2008/01/01(火) 16:43:40
>>806
スレ違いです。
下記のスレにどうぞ。
ttp://pc11.2ch.net/test/read.cgi/tech/1179394713/

それにしても新年早々笑わしてくれる。
813デフォルトの名無しさん:2008/01/01(火) 16:46:15
そろそろ釣り宣言の予感
814デフォルトの名無しさん:2008/01/01(火) 17:05:55
文字列になるか は愚問だな
815デフォルトの名無しさん:2008/01/01(火) 17:07:26
文字列にはなるな。
リトルエンディアンなら。
意図した通りの文字列にはならんが。
816デフォルトの名無しさん:2008/01/01(火) 18:17:01
ここの質問に集ってる
上からものを言うやし
をみてるのおもしろいな音符
817デフォルトの名無しさん:2008/01/01(火) 18:24:07
日本語でお(略
818デフォルトの名無しさん:2008/01/01(火) 18:31:25
よければヒント下さい。
819デフォルトの名無しさん:2008/01/01(火) 18:33:01
>>818
sprintf使え
820デフォルトの名無しさん:2008/01/01(火) 18:34:24
APIスレなので、wsprintfということで。
821デフォルトの名無しさん:2008/01/01(火) 18:38:14
>>818
何のヒントだ? 自宅警備員が親からお年玉をせびる方法のヒントか?
822デフォルトの名無しさん:2008/01/01(火) 18:52:52
>>821
そうだよ。
是非聞いておきたい。
823デフォルトの名無しさん:2008/01/01(火) 19:13:30
新年早々本当にありがとうございます。
…ありがとうございます!!
824デフォルトの名無しさん:2008/01/01(火) 19:17:09
単に数字を1つ表示させたいだけなら、API的にはSetDlgItemIntだな。
825デフォルトの名無しさん:2008/01/01(火) 19:21:51
i.toStringでいいじゃん
826デフォルトの名無しさん:2008/01/01(火) 19:53:47
VC#からAPIを叩く話ですか?
827デフォルトの名無しさん:2008/01/01(火) 20:49:10
VCはtoString使えないの?
だっせー
828デフォルトの名無しさん:2008/01/01(火) 20:51:58
というか、プリミティブとして文字列が無い言語だからなー
toStringというメンバ関数があったとして、いったい何を
返せば良いものか・・・。
829デフォルトの名無しさん:2008/01/01(火) 20:54:04
std::string でええやん。
言語的に std::bad_alloc とか std::bad_cast とか投げられたりすることもあるわけで。
830デフォルトの名無しさん:2008/01/01(火) 21:26:16
                  /\ 
                /  ⌒ \ 
              /  <◎>  \ 
            /            \             フリーメーソン日本支部
             ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄             ttp://www.japan-freemasons.org/
            ___________ 
          //TTTTTTTTTTTTTTTTTT\         イルミナティ
        /:::::/TTTTTTTTTTTTTTTTTTTTT\       ttp://www.ordeniluminati.com/
      /:::::::::/TTTTTTTTTTTTTTTTTTTTTTTT\

【石工組合】湯駄屋の陰謀【啓蒙協会】16
http://society6.2ch.net/test/read.cgi/kokusai/1198119629/l50
831デフォルトの名無しさん:2008/01/01(火) 22:11:38
というか、C++が、プリミティブ型に対して
パーシャルクラスを定義可能にすれば解決する話かもね
832 【1248円】 :2008/01/01(火) 23:27:57
てすと
833デフォルトの名無しさん:2008/01/02(水) 01:42:24
もうboost::lexical_castでいいよ
834デフォルトの名無しさん:2008/01/02(水) 02:03:11
またboost厨か
835デフォルトの名無しさん:2008/01/02(水) 02:41:46
ここに同じ症状に悩んだ奴がいるかどうかわからんのだけど
開発関連アプリの話ってことでここに書いてみる

VMware入れてる環境上でWH_CALLWNDPROCRETのグローバルフック使うと、VMware上で動いてる
仮想OSのマウスの動作がおかしくならない?クリックが妙に遅延するとか。
これ回避する方法ないんだろうか・・・
836デフォルトの名無しさん:2008/01/02(水) 02:58:10
VMware使わなけりゃいいんじゃね
837デフォルトの名無しさん:2008/01/02(水) 09:52:20
んだなや
838デフォルトの名無しさん:2008/01/02(水) 13:52:00
質問です、お願いします。
(1)クリックを押すとメッセージがキューにポストされる
(2)連打したのでもう一個メッセージがキューにポストされる
(3)(1)でポストされたメッセージがメッセージループで取り込まれて
 処理開始。
(4)(1)のメッセージの処理終了
(5)(2)でポストされたメッセージの処理開始…

(2)のようにクリックしてもメッセージキューには入らず、
(4)の後は待機して、クリック待ちにしたいのですが
どのようにすればよいですか?
ご教授のほどお願いしますm(__)m
839デフォルトの名無しさん:2008/01/02(水) 13:53:58
>>838
(4) の処理終了直後に全てのメッセージを破棄じゃ駄目か?
840デフォルトの名無しさん:2008/01/02(水) 14:54:48
その破棄の方法、関数を教えてください、素人ですいません
841デフォルトの名無しさん:2008/01/02(水) 15:29:20
>>840
while(PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE))
;
842デフォルトの名無しさん:2008/01/02(水) 15:31:58
せめて、マウス・キーボード関係のメッセージに限定しれ・・・
843デフォルトの名無しさん:2008/01/02(水) 15:35:17
>>838
処理時間がかかるのかな?
処理中もメッセージループが滞らないようにして、メッセージが処理されるようにする。処理中のメッセージは無視する。

ボタンだったら、disableにしておくとか?
844デフォルトの名無しさん:2008/01/02(水) 15:36:07
最近、職場で「出戻り寄生派遣」という言葉が囁かれています。
派遣契約を切られたにもかかわらず「次の派遣先でも切られてしまって生活できません」
などと 言って泣き落としで現場マネージャーにすら一切話がないまま再派遣契約した人のことです。
今月初め、半年前に切った派遣が出社してきてマネージャーも含めみんなびっくりしました。
影でコソコソ偉い人に泣きついて再契約したそうです。同じ部署の人には黙って・・・
そんなことまでして自宅の近くの派遣先にこだわって人間として恥ずかしくないのですか。

仕事に必要な技術がなく勉強する気もないのを逆手にとって
「私のような人の視点で仕事をすることも大切だと思います」と挨拶された時には
みんな凍りついていました。派遣でスキルアップとか言ってる癖に以前と同じように
技術を勉強する気はなく「それは私の仕事ではありません」の一点張り、
派遣で収入アップとか言ってる癖に時給は前回と同じで喜んで再契約。
結局、なんの努力もせずに派遣で安直に収入を得たいだけじゃないですか。

身分不相応な商品のローンを払うために派遣だと当然足りない収入は親にも寄生して、
いつ切られるんじゃないかとビクビクしながら人事権のある人間とだけ仲良くし、
契約終了を通知されれば泣き落とし。悲惨な人生ですね。
氏んだほうがいいんじゃないですか。
845841:2008/01/02(水) 15:37:20
メッセージ範囲は自分で調べて
フィルタの範囲指定はしておいてね♥
846デフォルトの名無しさん:2008/01/02(水) 15:38:22
処理が終わった後で自分に特定のメッセージをポストすれば、
そのメッセージが来るまでのは無駄なクリックと判断できね?
847838:2008/01/02(水) 16:32:05
while(PeekMessage(&msg, hWnd, 0, 0, PM_REMOVE)) を処理後に書き込み
ましたが、エラーがでます;;
848デフォルトの名無しさん:2008/01/02(水) 16:35:10
msgが宣言されていません、というエラーだとエスパーしてみる。
MSG msg;もつけとけ。
849838:2008/01/02(水) 17:22:29
848>>
コンパイルは成功しています、
プログラム実行中に
ハンドルされていない例外が発生しましたと表示されてしまいます。
詳しく書かずすいませんでしたm(__)m
850デフォルトの名無しさん:2008/01/02(水) 17:55:10
いや、まだ全然詳しく書いてないし
851デフォルトの名無しさん:2008/01/02(水) 18:00:35
>>849
メッセージを吸い込みすぎではないかと。
852デフォルトの名無しさん:2008/01/02(水) 18:15:25
最後にセミコロンが無いのが気になるけど。
というかホントにそこの文で例外発生してるわけ?
853デフォルトの名無しさん:2008/01/02(水) 18:17:34
デバッガ使おうぜ〜
854デフォルトの名無しさん:2008/01/02(水) 19:08:43
855デフォルトの名無しさん:2008/01/02(水) 19:10:54
どっかの研究所の真紅といい
よく作るなこういうの
856デフォルトの名無しさん:2008/01/02(水) 19:26:52
>>852
セミコロン無いせいで次の行が何度も実行されてたりして
857838:2008/01/02(水) 21:41:34
ちょっと長いですけど、ここにプログラム書き込んでいいですか??
858デフォルトの名無しさん:2008/01/02(水) 21:42:16
長いならアップローダー使うべし
859デフォルトの名無しさん:2008/01/02(水) 21:44:18
XPで
多量の文字を読み込もうとするとウィンドウ全体がおかしくなるのですが
ダイアログのエディットコントロールには文字数制限などがあるのでしょうか?
860デフォルトの名無しさん:2008/01/02(水) 21:48:23
9xは32767の制限があってMFCもそれに引きずられてたこともあった気がするな
861838:2008/01/02(水) 21:53:28
http://updas.net/up/
のご教授お願いしますです。
PASS 0000 ですお願いしますm(__)m
862デフォルトの名無しさん:2008/01/02(水) 21:54:01
XPでもEM_SETLIMITTEXTで設定しないと初期状態では32767だったと思う。
863デフォルトの名無しさん:2008/01/02(水) 22:25:00
コンパイラをだますためだけにキャストをしてはいけないという見本。
msgの型はMSGである必要があるわけで、ウインドウプロシージャの
引数、UINT msgとは関係ない。
よって結論は>848
864デフォルトの名無しさん:2008/01/02(水) 22:40:15
昨日も別の奴が頭悪いキャストしてたよな
865デフォルトの名無しさん:2008/01/02(水) 22:41:47
そもそもUINT msgなんて名前付けるからこういう事になるんだよ
866838:2008/01/02(水) 23:35:54
ありがとうございました☆MSG msgをちゃんと宣言して、コンパイルしたら
ちゃんととおりました!(^^)!本当にありがとうございます。
みなさんホントにありがとうございますm(__)m
867デフォルトの名無しさん:2008/01/02(水) 23:37:17
書きたいけど荒れるから書きません
868デフォルトの名無しさん:2008/01/02(水) 23:38:30
ああこいつ理解してないな
と思った。
869デフォルトの名無しさん:2008/01/02(水) 23:40:50
SendMessage(GetDlgItem(hWndDlg,IDC_EDIT1),EM_LIMITTEXT,0xFFFFFFE,0);
これで出来なかったのですが、
何か違いますか?
870デフォルトの名無しさん:2008/01/02(水) 23:43:31
>>869
特に変だとは思わん
という訳でバッファの方でも疑え
871デフォルトの名無しさん:2008/01/02(水) 23:51:56
出来ました。
ありがとうございます!
872デフォルトの名無しさん:2008/01/03(木) 06:43:01
文字を拡大してみると、白と黒のドットで出来ている事がわかりますよね。
ある文字列があって、その左からxピクセル目、上からyピクセル目の色を取得する方法ってないでしょうか?
873872:2008/01/03(木) 06:46:41
わかりにくいかもしれないので、やりたいことを具体的に言うと、
例えば"し"という文字列を対象に各ピクセルの色を調べて、白なら□、黒なら■を表示するようにします。
そして出力を

□□□□□□□□
□■□□□□□□
□■□□□□□□
□■□□□□□□
□■□□□□□□
□■□□□□■□
□□■□□■□□
□□□■■□□□
□□□□□□□□

のようにしたいです。開発環境は
WinXP、C言語、Win32API使用、Visual Studio(borlandもあります)です。
874デフォルトの名無しさん:2008/01/03(木) 07:13:20
白でも黒でもない時はどうするんだ?
アンチエイリアスとか
875872:2008/01/03(木) 07:20:37
>>874
自分で作成したエディットコントロールに入力した文字を入力の対象とするので
大丈夫だと思いますが、環境によってはアンチエイリアスされたりするんですかね?
その場合は、RGB(0x88, 0x88, 0x88)あたりを閾値として白黒化したいと思います。
876デフォルトの名無しさん:2008/01/03(木) 07:23:28
GetTextExtentPoint32で描画文字列の幅と高さを取って実際に描画して走査すれば
877デフォルトの名無しさん:2008/01/03(木) 07:24:23
エディット?
普通は(メモリ)DCに描いてGetPixelで拾っていくだけ
で、どの辺がわからんの?
878デフォルトの名無しさん:2008/01/03(木) 07:27:28
>>875
メイリオなんて白黒化したら見れた物じゃないぞ?
879872:2008/01/03(木) 07:36:16
あぁなるほど。実際にTextOutなりDrawTextなりでウィンドウに文字を描画して、
GetTextExtentPoint32で描画文字列の幅と高さを取得(長方形の領域)。
で、取得した領域内の背景の色を各ピクセル毎に取得していけば実装できるって事ですね。

てことは、一度描画しないと出来ないんですかね?てか普通にエディットコントロール内の文字で
↑と同様の事を行えば可能・・・そうですね。

>>878
SelectObjectでフォントを指定して設定してやろうと思うので、多分大丈夫です・・・。
880デフォルトの名無しさん:2008/01/03(木) 08:54:54
コントロール上でやると上にウィンドウが乗っかったらアウトだけど、いいのか?
881デフォルトの名無しさん:2008/01/03(木) 09:11:09
エディットから直接読むのは、画面から読み込むのと同じ意味なるよ。
画面に描画されてないと読めない。
882872:2008/01/03(木) 09:14:44
>>880
ん?それはTextOutでウィンドウに直接描画しても同じくアウトなのでは?
どっちにしても、対処方法考えないと・・・。
読み取り時だけ、SetWindowLongでTOPMOSTスタイルにするとか・・・かな。
どっちにしろ今すぐには作れないので、設計だけは頭の中で今しっかり考えておこう・・・
883デフォルトの名無しさん:2008/01/03(木) 09:25:15
オフスクリーンに描けばええやん
884872:2008/01/03(木) 09:47:19
オフスクリーン、ググってみましたが、どうなんでしょうかね。
環境によっては未使用のメモリ領域がなかったりする可能性ないですかね?
ここら辺まで来るとスレ違いかな?スレ違いだったら華麗にスルーして下さい。
885デフォルトの名無しさん:2008/01/03(木) 10:00:44
2GBもメモリが載っているPCで、たかだか数百バイトのメモリを気にするのか?
886872:2008/01/03(木) 10:54:48
スクリーンに割り当てられるメモリは上限が決められてるのかと・・・。
最大の解像度とビット数にしたら、オフスクリーンのメモリは0になると勘違いしてました・・・///
887デフォルトの名無しさん:2008/01/03(木) 10:58:52
自分で作成したエディットコントロールに入力した文字を入力の対象とするので
大丈夫だと思いますが、根拠はありません。
888デフォルトの名無しさん:2008/01/03(木) 18:10:07
プログレスバーの色を変更することって出来ませんか?
889デフォルトの名無しさん:2008/01/03(木) 18:28:03
>>888
なぜMSDNを見ないのですか
890デフォルトの名無しさん:2008/01/03(木) 20:20:01
ここは質問箱だから。
891デフォルトの名無しさん:2008/01/03(木) 20:35:34
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
892デフォルトの名無しさん:2008/01/03(木) 20:37:31
APIの使い方は、MFCとかのソースをたどっていくといいかも。
893デフォルトの名無しさん:2008/01/03(木) 20:40:09
プログレスバーのバーにビットマップを使う事等は出来ますか?
894デフォルトの名無しさん:2008/01/03(木) 20:58:30
自分で描くしかないと思われ
895デフォルトの名無しさん:2008/01/03(木) 21:51:26
最初からbitmap貼り付けといて
プログレスバーの色でmask解除
896デフォルトの名無しさん:2008/01/04(金) 01:12:35
>>395
プログレスバーの背景色はどうすれば透過出来るんですか?
897デフォルトの名無しさん:2008/01/04(金) 01:19:26
>>896
.netならbackcolorにtransparent設定すればいいじゃん
出来るか知らんけど
898デフォルトの名無しさん
URLDownloadToFile(NULL,"http://www.google.co.jp/","google.html",0,NULL);
だとちゃんと保存できないのは何で?
Google以外のサイトだとちゃんと保存できるのにGoogleさんだとS_OKが返ってこない…