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

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

Win32API質問箱 Build24

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

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

Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
WIN32 Programming
http://www7.plala.or.jp/keny01/win32/
Win32 SDK Programming
http://www7.plala.or.jp/keny01/windows/win32/

3 :デフォルトの名無しさん:04/10/28 21:43:04
ぐぁっ、前スレの人と同じミスを…スマソ
あれだけ確認したのにな

4 :デフォルトの名無しさん:04/10/28 21:46:17
いや違うな、前々スレで抜けたのか
次スレ立てる人はこれでお願い

- MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com/

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

5 :デフォルトの名無しさん:04/10/28 22:55:20
前スレの終わり方はあれでよかったのか?

6 :デフォルトの名無しさん:04/10/28 23:19:17
アバウトな質問ですみませんが、
XP pro でイベントビューアを見ると

エラー発生アプリケーション 私のアプリケーション.exe、バージョン 1.0.1.4、
エラー発生モジュール ntdll.dll、バージョン 5.1.2600.1217、エラー発生アドレス 0x00008e22

というログを残すエラーが発生しました。
RtlFreeHeap のエントリポイントが近いので、RtlFreeHeap が怪しいと思います。

8月から10月の間で2台のパソコンで各1回ずつ発生しました。
私のアプリケーションは1〜2週間は連続稼動しています。
同じような現象で悩んだ方がいましたら、何かヒントを教えて頂けませんか?


7 :デフォルトの名無しさん:04/10/28 23:42:58
> 989 名前:デフォルトの名無しさん 投稿日:04/10/28 21:32:33
> >>987
> デザインの話じゃねぇの?

> もし一部のメニューが非表示になる機能だったら
> 絶対に止めとけ。使いにくくてしょうがない

個人の意見を押しつけるのはやめて下さい


8 :デフォルトの名無しさん:04/10/28 23:46:52
絶対に止めとけ。使いにくくてしょうがない

9 :デフォルトの名無しさん:04/10/28 23:50:52
絶対に便利。実装してチョ。

10 :デフォルトの名無しさん:04/10/28 23:51:01
グレー表示ってさ、ユーザにとっては極め付けの冷たいインターフェイスなんだよな・・・
2000でやってたアレも同系

11 :デフォルトの名無しさん:04/10/28 23:57:46
>>5
ワラタ

12 :デフォルトの名無しさん:04/10/29 00:03:06
>>10
なんのことかサッパリ解らん。

13 :デフォルトの名無しさん:04/10/29 00:35:18
モードレスダイアログでEnterを押して実行されるように
標準のボタンを作りたいのですが、やっぱり出来ません。
モードレスダイアログではリソースエディタで”標準のボタン”を
指定するだけで出来ました。


CreateWindowで親ウインドウを作成

CreateDialogで親ウインドウにダイアログを貼り付ける

親ウインドウのプロシージャ
switch(msg)
{
//hWndDlgはダイアログのハンドル
case WM_SETFOCUS:
SetFocus (hWndDlg);
break;

メッセージループ
while (GetMessage (&msg,NULL,0,0))
{
if (hWndDlg && IsDialogMessage (hWndDlg,&msg))
{
continue;
}
TranslateMessage (&msg);
DispatchMessage (&msg);
}


14 :デフォルトの名無しさん:04/10/29 01:09:04
LoadImageのLR_LOADMAP3DCOLORSって、確かリソースが
インデックスカラー値じゃないと使えないよね?

最近のウィンドウズのデフォルト色は、まず間違いなくインデックスカラー値から
外れてくるから、LR_LOADMAP3DCOLORSは使えない気がするんだけどどうだろう。

15 :デフォルトの名無しさん:04/10/29 02:30:13
>>14
何か勘違いしている。

16 :デフォルトの名無しさん:04/10/29 09:19:23
>>15
俺の勘違いかな。色を変えるというかパレットを変えるイメージだったのだが。
と思って今軽く試してみたけど、やはり出来ない気がする。時間が無くて適当でごめん。

17 :デフォルトの名無しさん:04/10/29 17:01:14
>モードレスダイアログではリソースエディタで”標準のボタン”を
>指定するだけで出来ました。

じゃ、問題なしだな

18 :デフォルトの名無しさん:04/10/29 17:05:57
すみません。
SHChangeNotifyRegisterのことで質問があるのですが、どなたかお答え
いただけますか?

19 :デフォルトの名無しさん:04/10/29 17:27:11
質問を言ってくれないと答えられない。

20 :18:04/10/29 18:18:31
環境はWinXP SP1,VC++ SP5で、最新のMS SDKへのパスを通してます。

SHChangeNotifyRegisterの起動時に、以下のパラメータを指定します。
第2引数:0x0001 | 0x0002(ファイル及びシェルからの通知を指定)
第3引数:SHCNE_ALLEVENTS(全てのイベントを受信)
この状態で、イベントの一つであるSHCNE_CREATE(アイテムの作成)を
受信したいとき、アプリケーションを起動して「ファイルを保存」から
ファイルを作成したときには受信しません。
右クリックで、「新規作成」から新規ファイルを作成したときには、受信します。

質問は、アプリケーションを起動して「ファイルを保存」からファイルを
作成したときに、どうやったらSHCNE_CREATEを受信できるかです。

21 :デフォルトの名無しさん:04/10/29 23:38:56
DIBとDDBの違いがよう分からんのですけど。

22 :デフォルトの名無しさん:04/10/30 00:04:05
質問です。
下のようなダブルバッファリングするようなプログラムを作ったのですが、どうもうまくいきません
いろいろやってみたのですがよくわかりません。
どうすれば、うまく動くようになるでしょうか?

症状 : うまく転送されていない、とおもう。(色を指定してもメッシュがかかったような白黒になる、白、黒はうまくいった)
プログラム :
//省略
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hDc = BeginPaint( hWnd , &ps );
HDC hbDc = CreateCompatibleDC( hDc );
HBITMAP hBitmap = CreateCompatibleBitmap( hbDc , 640 , 480 );
HBITMAP hOldBitmap = SelectObject( hbDc , hBitmap );
{
HBRUSH hBrush = CreateSolidBrush( RGB( 100 , 0 , 100 ) );
SelectObject( hbDc , hBrush );
PatBlt( hbDc , 0 , 0 , 640 , 480 , PATCOPY );
DeleteObject( SelectObject( hbDc , GetStockObject( WHITE_BRUSH ) ) );
}
SelectObject( hbDc , GetStockObject( BLACK_BRUSH ) );
Rectangle( hbDc , x , y , x + 100 , y + 100 );
BitBlt( hDc , 0 , 0 , 640 , 480 , hbDc , 0 , 0 , SRCCOPY );
DeleteObject( SelectObject( hbDc , hOldBitmap ) );
DeleteDC( hbDc );
EndPaint( hWnd , &ps );
break;
}
//省略
きゃらの座標(x,y)更新後、InvalidateRect( hWnd , NULL , FALSE)としてWM_PAINTメッセージを発生させています。

23 :デフォルトの名無しさん:04/10/30 00:21:06
createcompatiblebm( hDc

24 :デフォルトの名無しさん:04/10/30 00:53:34
ありがとうございました、おかげで解決できました。
よく見るとAPIのヘルプに書いてありましたね。
見逃していました。

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

25 :デフォルトの名無しさん:04/10/30 01:19:45
>>22
よくコード見て無いけど、SetMapMode(hDC,MM_TEXT);とかモード設定してみ
あと、コードの途中の{}は何だ?

26 :デフォルトの名無しさん:04/10/30 01:44:26
>>20
以前SHChangeNotifyRegister()を使ったところ、あまり当てにならなかった記憶がある。
ReadDirectoryChangesW()の方がお奨め。

27 :デフォルトの名無しさん:04/10/30 10:39:51
NT系専用だけどな
まあそろそろ9xは切り捨ててもいいか

28 :18:04/10/30 10:42:25
>>26
ReadDirectoryChangesWについて質問していいですか?
ファイル数やディレクトリ数のエントリ数が多数で、ディレクトリの階層が深い
場所(例:OSの入っているドライブ)をルートから監視するとき、
ReadDirectoryChangesWを起動している間のパソコンのパフォーマンスは
悪くなりますか?

29 :デフォルトの名無しさん:04/10/30 10:55:06
>>28
自分で試せよ

30 :デフォルトの名無しさん:04/10/30 10:57:52
Winn2000以降とかでいいんだけど、現在のプロセスだけじゃなくて、
システムのプロパティから見れる環境変数を変える事って出来ない?
インストーラーとかが時々やってるけど…。


31 :デフォルトの名無しさん:04/10/30 11:16:33
http://www.kt.rim.or.jp/~yuta/prog/win32/Registry/renv/index.html

32 :13:04/10/30 12:00:42
>>17
すいません。
モーダルダイアログの間違いです。
モードレスダイアログでは出来ないのです。

どうすればいいのでしょうか?

33 :デフォルトの名無しさん:04/10/30 12:58:43
CreateThreadに引数を渡そうと思ってます。各スレッドに0,1,2という引数をそれぞれ渡したいのですがなぜかすべてのスレッドに3が渡されています。
ポインタがらみだと思うのですがどう書けばうまくいくのかわかりません。アドバイスお願いします。



34 :デフォルトの名無しさん:04/10/30 12:59:32
書いたプログラムです。

#include <stdio.h>
#include <windows.h>

DWORD WINAPI Testthread(LPVOID);

int main() {
  int i;
  HANDLE hTh[3];
  DWORD tid[3];

  for (i=0; i<3; i++) {
     /* スレッドを作成 */
     hTh[i] = CreateThread(NULL,0,Testthread,(LPVOID)&i,0,&tid[i]);
}

  WaitForMultipleObjects(3, hTh, TRUE, INFINITE);

  for (i=0; i<3; i++) {
  CloseHandle(hTh[i]);
  }

  return 0;
}

DWORD WINAPI Testthread(LPVOID lpx) {
  int num = *((int *)lpx);
  printf("%d\n", num);
  return 0;
}

35 :デフォルトの名無しさん:04/10/30 13:03:29
>>33
hTh[i] = CreateThread(NULL,0,Testthread,(LPVOID)i,0,&tid[i]);

int num = (int)lpx;

36 :デフォルトの名無しさん:04/10/30 13:09:04
>>35
アドバイスありがとうございます。その方法でできました。
なぜそれでできるのかまだわからないですが・・・void*型調べてみます。

37 :デフォルトの名無しさん:04/10/30 13:37:47
>>36
CreateThread() した瞬間に作ったスレッドが走り出すとは限らない。
CreateThread() が3回呼ばれた後にそれぞれのスレッドが動き始めるん
だろう。


38 :デフォルトの名無しさん:04/10/30 16:24:51
画面上にある全てのウィンドウを半透明化した後、
透明度を255にして元に戻したのですが、
前よりかなり重くなりました。
何かマズいことをしたのでしょうか?

39 :デフォルトの名無しさん:04/10/30 16:34:47
>>38
WS_EX_LAYEREDを外せ

40 :38:04/10/30 17:02:48
>>39
ありがとうございます。

41 :38:04/10/30 17:25:07
すいません。
ここに書かれているやり方でWS_EX_STYLEを外そうとしたのですが、
適用したウィンドウの全ての内容が左右反転してしまいました。
ttp://hitokuso.kicks-ass.org/progtips.html
しかもとてつもなく重いです。

LONG my_style;
my_style=GetWindowLong(hWnd,GWL_EXSTYLE);
my_style&=~WS_EX_LAYERED;
SetWindowLong(hWnd,GWL_EXSTYLE,my_style);

42 :38:04/10/30 17:32:46
すいません、なおりました。
一部 GWL_STYLE と書き間違えていたのが問題だったようです。
焦って混乱してましたが、解決しました。
お騒がせしました。

43 :デフォルトの名無しさん:04/10/30 18:11:58
>>34 >>36
#include <stdio.h>
#include <windows.h>

DWORD WINAPI Testthread(LPVOID);

int main() {
  int i, d[3];
  HANDLE hTh[3];
  DWORD tid[3];

  for (i=0; i<3; i++) {
     /* スレッドを作成 */
     d[i] = i;
     hTh[i] = CreateThread(NULL,0,Testthread,(LPVOID)&d[i],0,&tid[i]);
}
  WaitForMultipleObjects(3, hTh, TRUE, INFINITE);
  for (i=0; i<3; i++) {
  CloseHandle(hTh[i]);
  }
  return 0;
}

DWORD WINAPI Testthread(LPVOID lpx) {
  int num = *((int *)lpx);
  printf("%d\n", num);
  return 0;
}

>>35 は場当たり的な回答だから真似するな

44 :デフォルトの名無しさん:04/10/30 18:29:30
>>43
32bit環境ならintもポインタも4byteだから
単一の値を渡すだけなら>>35は常套手段だと思うけど。

45 :デフォルトの名無しさん:04/10/30 23:32:26
他アプリのステータスバーの文字列を取得したいのですが、
SB_GETTEXTでは他アプリのステータスバーには無効らしくうまくいきません。
ググっていると共有メモリを使うとよい、という話も有るようなのですがさっぱりわかりません。
何か簡単な方法はないものでしょうか?

46 :デフォルトの名無しさん:04/10/31 00:41:30
>>45
他アプリというのは自分でつくったアプリ?

47 :デフォルトの名無しさん:04/10/31 00:53:15
>>46
違います。

48 :デフォルトの名無しさん:04/10/31 01:21:58
なら共有メモリを使うだけじゃ無理じゃないかな。

俺が思いつくのは、
1. 自作のDLLをそのアプリに注入する (SetWindowsHookEx)
2. そのDLLはSB_GETEXTでステータスバーの文字列を取得する
3. 共有メモリを使って (WM_COPYDATAとかでもいいけど)
  DLLから自作アプリに文字列を渡す

もっといい方法があるかもしれないので参考までに。

49 :デフォルトの名無しさん:04/10/31 04:47:31
WriteConsole()で出力しようと思ってGetStdHandle(STD_OUTPUT_HANDLE)で
標準出力のハンドルを取得して、使い終わってもCloseHandle()などで閉じる必要は
無いんでしょうか?

というか何度もその都度GetStdHandle(STD_OUTPUT_HANDLE)で取得しても良いんでしょうか?

void hoge() {
HANDLE out;
DWORD num;
out = GetStdHandle(STD_OUTPUT_HANDLE);
WriteConsole(out, "aaa", 3, &num, NULL);
//CloseHandle(out); //<=これをすると2回目以降出力されなくなる
}

int main() {
hoge(); hoge();
}


50 :デフォルトの名無しさん:04/10/31 05:01:35
>>49

51 :デフォルトの名無しさん:04/10/31 07:10:33
>>50

52 :デフォルトの名無しさん:04/10/31 07:16:09
>>49
GetStdHandleはCloseHandleするな。
何度もGetStdHandleするのが気になるなら、静的変数なんかにしろ。

53 :デフォルトの名無しさん:04/10/31 19:25:47
任意のプログラムのファイル入出力を
監視するツールを作りたいのですが、上手く行きません。

他プロセスの入出力を監視するには、
CreateFileやRead/WriteFileをフックすれば良いと思い、
Kernel32.dllのラッパーを作成しようとしているのですが、
明示的リンクを行うためのGetProcAddress関数等が
Kernel32.dllに含まれるためか、コンパイルが通りません。

他の方法を試そうにも、これ以外思い浮かばず困っています。


Kernel32.dllのラッパーを作る方法、
又は、他プロセスのファイル入出力を監視する方法を
知っている方居ましたらお願いします。

54 :デフォルトの名無しさん:04/10/31 19:32:13
>>53
デバイスドライバ

55 :デフォルトの名無しさん:04/10/31 19:38:11
ローカルフックを使いたいのですが、
どこか詳しい解説をしてあるサイトはありませんでしょうか?
システムフックは今回使わないつもりです。

自分なりに調べてやったら、
どこかが間違っていたらしく、
タスクバーから何から消えた上に終了までできなくて困りましたので。

56 :デフォルトの名無しさん:04/10/31 19:39:11
>>53
APIフック
参考
・ttp://www.codeproject.com/system/hooksys.asp
・Advanced Windows日本語版

57 :デフォルトの名無しさん:04/10/31 19:48:11
>>53
作らなくていいよ。
http://www.sysinternals.com/ntw2k/source/filemon.shtml

58 :デフォルトの名無しさん:04/10/31 20:17:03
acmを利用してWAVEファイルのフォーマットの変換に挑戦しているのですが
うまくいかないところがあるので質問させてください。

データが小さい時はacmStreamConvertを一回呼び出して終わりでこのときはきちんと変換されます。
一方、大きいWAVEファイルを変換する場合に、ループ処理で少しずつ変換させていったところ
関数自体は成功するんですが、いざ再生するとノイズの嵐になります。

以下ソース(StreamHeaderはACMSTREAMHEADERです。)
for(dwOffset=0,dwRest=dwSrcSize;dwRest>0;){
  //ソースから読み取り
  dwRead = min(dwDefRead,dwRest);
  src.FillWaveStream(dwOffset,StreamHeader.pbSrc,dwRead);//dwOffsetからdwReadだけpbSrcにWAVEストリームコピー
  dwRest -= dwRead;
  dwOffset += dwRead;
  //変換
  ::acmStreamConvert(hAcmStream,&StreamHeader,ACM_STREAMCONVERTF_BLOCKALIGN);
  //バッファに書き込み
  dst.insert(dst.end(),StreamHeader.pbDst,StreamHeader.pbDst + StreamHeader.cbDstLengthUsed);
}

デバッガで追っていてもエラーコードは返ってきていないので原因が分かりません。
ネットで調べてもacm関連のページはあまり見つからなくて解決できませんでした。
どなたかどこが間違っているか分かる方がいましたら教えてください。よろしくお願いします。


59 :デフォルトの名無しさん:04/10/31 20:17:24
>>45
VirtualAllocExでそのプロセス内にメモリを確保してSB_GETTEXTしてReadProcessMemoryとかで読み込んであげる。
プロセスごとにアドレスが違ってるから普通にポインタは渡せないってだけ。
OSによっては共有メモリでプロセスが違ってても同じアドレスになる。

60 :デフォルトの名無しさん:04/10/31 20:37:11
プロセスの作成を監視する手軽な方法ってないでしょうか?
FindFirstChangeNotificationみたいな感じにプロセスが作成されたのを通知してくれるAPIとかあるといいなと思うのですが。

61 :デフォルトの名無しさん:04/10/31 20:50:05
>>58
acmStreamConvert に送ったデータを変換関数が全て使い切ってない。
dwOffset を読み込んだバイト数でなく変換関数が使った分(cbSrcLengthUsed)だけ進める。



62 :53:04/10/31 20:50:43
速レス、ありがとうございました。

>>54
ドライバに関する知識がないので、難しそうですが、
ドライバってハードウェア制御する以外にも色々出来るんですね。
勉強してみたいと思います。

>>56
リンク先斜め読みしただけですが、参考になりそうです。
APIのジャンプテーブルを上書きとか、とても思いつきませんでした。
Advanced Windowsはちょっと高すぎるので、
とりあえず立ち読みをしてみます・・・。

>>57
良いソフトの紹介ありがとうございます。
使ってみます。

63 :デフォルトの名無しさん:04/10/31 20:55:48
OSのデフォルトコードページを、自プロセスだけ、少しの間変更するようなAPIって無いんですか?

64 :58:04/10/31 21:15:11
>>61
速レスありがとうございます。

> dwOffset を読み込んだバイト数でなく変換関数が使った分(cbSrcLengthUsed)だけ進める。
とありますが、この場合、StreamHeader.pbSrcには前回使われていなかった部分の先頭からでいいのでしょうか?
こんな感じに・・・
  dwRead = min(dwDefRead,dwRest);
  src.FillWaveStream(dwOffset,StreamHeader.pbSrc,dwRead);//dwOffsetからdwReadだけpbSrcにWAVEストリームコピー
  //変換
  ::acmStreamConvert(hAcmStream,&StreamHeader,ACM_STREAMCONVERTF_BLOCKALIGN);
  //オフセットとかの計算
  dwRest -= StreamHeader.cbSrcLengthUsed;
  dwOffset += StreamHeader.cbSrcLengthUsed;
  //バッファに書き込み
  dst.insert(dst.end(),StreamHeader.pbDst,StreamHeader.pbDst + StreamHeader.cbDstLengthUsed);


65 :58:04/10/31 21:41:06
上のソースでうまくいってるっぽいです。
どうもありがとうございました。


66 :48:04/10/31 22:04:41
>>59
なるほど。それはシンプルだね。
俺の方法は無駄に複雑にしている気がしてたんだよ。orz

今試せる環境がないので質問させてほしいんだけど、
VirtualAllocExの前に相手プロセスをOpenProcessするわけでしょ。
ログオンユーザーが一般ユーザーやゲストのときでも成功するの?

67 :59:04/10/31 22:24:55
>>66
そういえば、一般ユーザーとかで試したことなかった。
取り合えず試してみたが、一般ユーザーでも問題なく動いたよ。

68 :デフォルトの名無しさん:04/10/31 22:37:12
サンクス
おもしろそうだし、明日にでもやってみよう。

69 :45:04/10/31 23:09:24
>>67
当方Win9x系なのですが、ググっているとVirtualAllocExを使う方法は
Win9x系では使えない(?)というような話が出ていたのですが
Win9x系でも出来るのでしょうか?

70 :59:04/10/31 23:28:24
9x系ではFileMappingとかで確保したメモリを使えばいける。

まとまってるのがあった。
http://www.interq.or.jp/jupiter/susumu/shrmem.html

71 :デフォルトの名無しさん:04/11/01 01:40:24
>>69
俺は、
 http://yebisuya.dip.jp/WinTips/tips7.html
を参考に作った事がある。

この場合、kernel32.dllに
VirtualAllocEx()
VirtualFreeEx()
があれば使えるはず。少なくとも、WinMEにはあるよ

72 :デフォルトの名無しさん:04/11/01 05:31:15
>>60
フックタイプをWH_CBTにしてSetWindowsHookEx()をコールする。
DllMain()のPROCESS_ATTACHでプロセスが作成されたと判断する。

ってのはどう?

73 :デフォルトの名無しさん:04/11/01 11:00:10
エクスプローラからファイルがドロップされた時に
ファイル名を受け取るにはどうすればいいですか?

74 :45:04/11/01 11:04:41
>>70-71
thx.
さっそく挑戦してみます。


75 :デフォルトの名無しさん:04/11/01 11:06:34
>>73
WS_EX_ACCEPTFILES
WM_DROPFILES


76 :デフォルトの名無しさん:04/11/01 11:23:45
OLE Drag and Dropを使ったアプリを書いているのですが、他のアプリケーションで
ドラッグが始まったことを知りたい場合はどうやったらいいのでしょうか?

77 :デフォルトの名無しさん:04/11/01 11:48:45
>>76
ただのドラッグなら不可能。何を持ってドラッグ化はアプリ側で定義可能だから。

他のアプリのOLEドのラッグなら、知る方法があるが、
自分のアプリにドロップされようとしていないのに、
知ろうとするのはアプリとして間違っている。

78 :デフォルトの名無しさん:04/11/01 12:17:08
ツールバーをサブクラス化したのですが、
そのサブクラスがWM_COMMANDだけを受け取ってくれません。
メッセージボックスでチェックしたところ他のは受け取っているようなんですが・・・

ツールバーはCreateWindowExで作成し、
サブクラス化した後、ボタンを追加しています。

どこか問題があるのでしょうか?

79 :デフォルトの名無しさん:04/11/01 12:24:52
>>78
WM_COMMANDを受け取るのは親ウインドウだろ。
ツールバーのクラスが親に投げているので、サブクラスで取れるわけないじゃん。

80 :デフォルトの名無しさん:04/11/01 12:27:53
>>78
親ウィンドウにWM_COMMANDが送信されてると思う。

81 :デフォルトの名無しさん:04/11/01 12:32:59
>>79-80
なるほど。
すいません、知りませんでした。
ツールバーのどのボタンが押されたかをサブクラスで知るにはどうしたらいいのでしょうか。
ウィンドウプロシージャを弄れないので、サブクラスで受け取らなきゃいけないんです。

82 :デフォルトの名無しさん:04/11/01 12:56:18
>>81
ボタンなんかとれません。ツールバーのは、実はボタンじゃないから。
SPYで見てみると、このことはわかります。
なので、ツールバーを持つウィンドウクラスを一個作ってラップするか、
ツールバーを自作してください。

83 :デフォルトの名無しさん:04/11/01 13:00:46
>>81
親ウィンドウをサブクラス化する手もあるね

84 :78:04/11/01 13:17:07
>>82-83
分かりました。
ありがとうございました。

85 :18:04/11/01 16:41:08
早速ReadDirectoryChangesWのサンプルソースを使って見ましたが、
重くなるような感じはしませんでした。

それで、ReadDirectoryChangesW()を使う上で一つ疑問が生まれました。
ファイルやディレクトリの変更があった瞬間で、行ったユーザ名の情報を
どうやって取得するかです。
ネットワークでの共有ディレクトリを監視したいときに、誰がその行為を
したのかという情報を得たいためです。
ファイルやディレクトリに関するAPIを探してみましたが、ありませんでした。

どなたか何らかの方法をご存知でしたら、教えてください。

86 :デフォルトの名無しさん:04/11/01 16:53:51
あるウィンドウ上にBUTTONを三つほど乗せているんですが、そのボタンの上でマウスホイールが
クリックされたことを知るためにサブクラス化を用いようと思っています。この場合、そのメッセージを
受け取るためのコールバック関数はそれぞれ別にする必要はありますか?

87 :86:04/11/01 17:06:46
できるみたいなのでやってみます。すれ汚しすいませんでした。

88 :18:04/11/01 17:53:44
>>85
補足です。
ユーザ名を得る関数は、GetComputerNameやGetUserNameの2つがあることは
知っています。
85での取得イメージとして、ReadDirectoryChangesWで得られるFILE_NOTIFY_INFORMATION
構造体にあるファイルやディレクトリ情報を使って、ユーザ名を得たいです。

89 :デフォルトの名無しさん:04/11/01 17:58:56
windows2000で、
ネットワークアダプタにケーブルが接続されているかどうかを
取得できるAPIはないでしょうか?

XPだと、Win32_NetworkAdapterクラスの
NetConnectionStatusプロパティを参照で行けたのですが・・・

90 :デフォルトの名無しさん:04/11/01 19:42:13
BCCをウェブ講座参考にしていますが、DIBの仕組みの辺りで躓いてます。
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win120.html

bmpInfo = (BITMAPINFO *) malloc (bmpFileHeader.bfOffBits - dwBytes);
bmpFileHeader.bfOffBits - dwBytesの計算が分かりません。

dwBytesはそれ以前に代入された
ReadFile(hFile , &bmpFileHeader , sizeof (BITMAPFILEHEADER) , &dwBytes , NULL);
で代入されたBITMAPFILEHEADERのバイト数だと思うので、
ピクセルビットの開始点までの範囲からファイルヘッダの範囲を引いたら、
情報ヘッダ(BITMAPINFO)のメモリのサイズが求められるって事ですか?

91 :デフォルトの名無しさん:04/11/01 20:59:48
>>89
試してないけど、ここで似たようなことやってる。
ttp://www.experts-exchange.com/Programming/Q_20696554.html

INetConnectionManager

IEnumNetConnection

INetConnection ... のプロパティ
という流れらっしー。

92 :デフォルトの名無しさん:04/11/01 21:04:45
>>90
算数できる?
図かいて整理してみ。

93 :60:04/11/01 21:05:37
>>72
うまくいきました。ありがとうです。

94 :89:04/11/01 23:28:55
>>91
ソースをコピペして試してみたところ、
Windows2000でも目的の動作を実現できました。

これから、ゆっくりソースを読んで理解したいと思います。

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

95 :76:04/11/01 23:33:39
>>77
回答ありがとうございます。

>アプリとして間違っている。
ユーザーに有効無効を設定できるようにするので問題ないようにも思います。

目的はOLEのドラッグの検出のみです。なにか、ぐぐるのキーワード等教えていただけないでしょうか?

96 :90:04/11/02 00:24:20
>92
ああ。何となく確信もてた。スマソ。
ビット苦手だOTZ

97 :デフォルトの名無しさん:04/11/02 14:04:52
起動ドライブのProgram Filesフォルダを取得するAPIを教えてください

98 :デフォルトの名無しさん:04/11/02 14:26:09
>>97
SHGetSpecialFolderLocationで、CSIDL_PROGRAM_FILES指定

99 :デフォルトの名無しさん:04/11/02 14:41:15
>>98
SHGetSpecialFolderLocationでぐぐったけどその定数定義してるとこみつからなかった〜
でもできますた、ありがとうエロい人

100 :デフォルトの名無しさん:04/11/02 16:42:43
>>71
98/Meにはエントリはあるがダミーだよ
(常にERROR_CALL_NOT_IMPLEMENTEDを返すだけ)

101 :デフォルトの名無しさん:04/11/02 17:22:33
レジストリに書いてなかったっけ

102 :デフォルトの名無しさん:04/11/02 19:09:11
>>97
ナウなヤングはSHGetSpecialFolderPath()を使うよ。

103 :デフォルトの名無しさん:04/11/02 22:31:27
同じプリンタに対して同じ印刷データを
通常のアプリケーションからは印刷できるけど
サービスプログラムからは印刷できないっす。

サービスはシステムローカルアカウントが動作するのが
原因と思われるんですけど、
印刷できるようにすることってできますかね?


104 :デフォルトの名無しさん:04/11/02 23:01:30
>>103
俺も、サービスからネットワークプリンタに印刷できなかったことがある。
ネットワークにアクセスする権限がないんだと納得してたんだけど
ローカルプリンタでもダメなのか。

それはともかく、俺の場合はLogonUser APIを使って
ネットワークにアクセスできるユーザーに偽装することで回避した。

105 :デフォルトの名無しさん:04/11/03 00:11:21
デスクトップにアクセス?

106 :104:04/11/03 00:18:18
プリンタドライバをどうやってインストールしたか、
が関係する可能性もある。
コントロールパネルの「プリンタの追加」?

107 :デフォルトの名無しさん:04/11/03 02:05:34
>>102
本当にナウなヤングはSHGetFolderPathだろ

108 :デフォルトの名無しさん:04/11/03 02:26:29
ナウなぺヤングソースやきそば

109 :デフォルトの名無しさん:04/11/03 11:50:02
CDDBに接続して曲名を取得する方法をぐぐってるのですが、CDDBの使い方とかばっかりで技術的なのが出てきません。
そういう資料があるサイト知ってる方、教えて下さい。

多分、WinSock絡みの処理になるのかなーWinSock使った事ないなーとか考えつつ(;;´Д`)ハァハァしてます。

110 :デフォルトの名無しさん:04/11/03 12:30:38
>>109
libcdaudio を使えば出来るらしい。
http://cdcd.undergrid.net/libcdaudio/

111 :デフォルトの名無しさん:04/11/03 12:30:38
http://www.google.co.jp/search?hl=ja&q=CDDB+%E6%9B%B2%E5%90%8D+%E5%8F%96%E5%BE%97&lr=lang_ja

112 :デフォルトの名無しさん:04/11/03 16:55:08
>>109
通信内容見てみればやってることは簡単にわかるけど、たしかライセンスいるよ
CDDB ライセンス でぐぐってみ

113 :デフォルトの名無しさん:04/11/03 17:00:20
>>109
あと音楽関係のソフトはオープンソースが多いから
直接ソース見ればいい

114 :デフォルトの名無しさん:04/11/03 17:34:00
>>110 のは FreeDB のライブラリだろ?これライセンスいったっけ?
Gracenote CDDB はライセンスが必要だが。


115 :109:04/11/03 19:15:47
libaudiocdってのは、ダウソできなくなってる・・・。

ライセンスいるんですかー・・・。だよなー、そううまい話がある訳ないよなぁ・・・。
あとこれ、パッと見た感じGNUぽいですね。とすると、これ使ったら漏れもソース公開しなきゃならんって事ですか。
読みやすいコードに心がけなくては・・・。

116 :デフォルトの名無しさん:04/11/03 21:28:28
>>106
単に、プリンタを使えるユーザーならプリンタを使える、
というだけな気がする。

117 :デフォルトの名無しさん:04/11/03 22:27:19
>>115
GNU使う時は、その辺が嫌だね
いい加減に書いたソースでも公開しないといけない

118 :デフォルトの名無しさん:04/11/03 22:55:21
質問です。
メッセージループのメッセージのないところの処理に

DWORD lNowTime = GetTickCount();
static DWORD lOldTime = 0;
if( ( lNowTime - lOldTime ) > 2 ){
 SetForegroundWindow( hWnd );
 lOldTime = lNowTime;
}
〜処理〜

と書いたのですが、起動した後すぐにアクティブになるだけで
後はぜんぜんアクティブになってくれません。
常にアクティブ(最前面)にするにはどうしたらよいでしょうか?


119 :デフォルトの名無しさん:04/11/03 23:12:55
>>115
そもそもlibaudiocdはWinじゃないだろ

120 :デフォルトの名無しさん:04/11/03 23:15:54
>>118
SetWindowPos

121 :デフォルトの名無しさん:04/11/03 23:32:50
そもそもメッセージループのメッセージがないところの処理て。

122 :デフォルトの名無しさん:04/11/03 23:45:35
>>118
DWORD lNowTime;
static DWORD lOldTime = 0;
lNowTime; = GetTickCount();
if( ( lNowTime - lOldTime ) > 2 ){
 SetForegroundWindow( hWnd );
 lOldTime = lNowTime;
}

123 :デフォルトの名無しさん:04/11/04 01:18:29
そもそもアクティブと最前面はまったく違う概念なわけだが
常にアクティブ(最前面)って何やねん

124 :デフォルトの名無しさん:04/11/04 01:26:53
システムモーダル。

125 :デフォルトの名無しさん:04/11/04 03:18:05
BringWindowToTop()ってのもあるよな。

126 :118:04/11/04 03:56:12
ありがとうございました。

>そもそもアクティブと最前面はまったく違う概念なわけだが
なんとなく違うということはわかるのですが・・・・、
フォアグラウンド、アクティブなどでしょうか?
詳しく説明しているサイトなどはありますでしょうか?

それと、キー入力(フォーカス?)を自分にもってくるということはできるでしょうか?
最前面にもってきてユーザーからの入力を求めるような感じの。
SetFocusで、できそうなのですができません。


127 :デフォルトの名無しさん:04/11/04 06:55:04
TOPMOST

128 :デフォルトの名無しさん:04/11/04 10:05:45
>>115
>あとこれ、パッと見た感じGNUぽいですね。とすると、これ使ったら漏れもソース公開しなきゃならんって事ですか。
GNUな部分だけDLLにして逃げる、という手もある。
その代わり、せっかく作るなら使いやすいDLL作れよ・・・

129 :デフォルトの名無しさん:04/11/04 11:18:23
>>128
それダウンロードできないしWindows用じゃない。
適当に検索して見つかったやつを内容も見ないで無責任に教えたんだろう。

130 :デフォルトの名無しさん:04/11/04 12:30:48
>>129
Windows用じゃなくても、ソースを見れば何やってるか見当が付くだろう?

131 :デフォルトの名無しさん:04/11/04 12:43:14
>>130
わざわざWindows用じゃないやつのソース見んでも
Windows用のソースがいくらでもある。

132 :デフォルトの名無しさん:04/11/04 12:47:12
>>131
どこに?

133 :デフォルトの名無しさん:04/11/04 12:49:08
>>131
いくらでもあるなら、なんで教えてあげないの?

134 :デフォルトの名無しさん:04/11/04 14:00:20
VC++6でWritePwrScheme()を使ったプロセスを作っています。
「powrprof.h」と「powrprof.lib」を使用してビルドを行うと
リンクの時点で
 error LNK2001: 外部シンボル "
 "unsigned char __stdcall WritePwrScheme(unsigned int *,char *,char *,struct _POWER_POLICY *)"
 (?WritePwrScheme@@YGEPAIPAD1PAU_POWER_POLICY@@@Z)" は未解決です
とエラーが発生しビルドできません。
「powrprof.h」と「powrprof.lib」のバージョンが合っていないのでしょうか?
そうだとしたらVC++6でビルドできる「powrprof.h」と「powrprof.lib」は
どうやって入手すればよいのでしょうか?
ちなみに
CanUserWritePwrScheme()でも同一リンクエラーが発生します
 

135 :デフォルトの名無しさん:04/11/04 14:08:13
http://www13.cds.ne.jp/~wstar/n/cddb2.dml
http://www.gracenote.com/gn_japan/cddb.html

136 :デフォルトの名無しさん:04/11/04 14:18:29
>>135
> http://www13.cds.ne.jp/~wstar/n/cddb2.dml
Windowsのソース?

> http://www.gracenote.com/gn_japan/cddb.html
製品

137 :デフォルトの名無しさん:04/11/04 14:42:00
>>134
そもそも、素のVC6に「powrprof.h」と「powrprof.lib」ってあったっけな・・・

とりあえず、>>2のPlatformSDK updateしてみたら?

138 :デフォルトの名無しさん:04/11/04 14:52:16
>>137
>素のVC6に「powrprof.h」と「powrprof.lib」ってあったっけな・・・
VC7にあるのを使ってますが、蛇道ですか?

139 :デフォルトの名無しさん:04/11/04 16:33:17

>>104
亀レスでスマソ
LogonUserのAPIでいけそうです

で、そのLogonUserのパラメータへ設定するドメイン名/ユーザー名/パスワードを
事前にチェックようと思いまして、
NetUserChangePasswordで新旧パスワードを一緒にしてチェックをしてみたんですけ
ど、
該当ドメインに参加してない端末から、ユーザ名/パスワードが正しいかをチェック
しようとすると
ERROR_CANT_ACCESS_DOMAIN_INFO(1351)というエラーが返却されるんですが、

他にユーザ名/パスワードをチェックする方法ってあったりするんでしょうか?



140 :デフォルトの名無しさん:04/11/04 16:33:47
>>134
これはどうだ?
extern "C" {
#include <powrprof.h>
}

141 :デフォルトの名無しさん:04/11/04 16:45:23
>>140
べりーないす!ありがd!

142 :デフォルトの名無しさん:04/11/04 17:06:33
>>140
スゲー 美しくは無いけどその発想に脱帽

143 :デフォルトの名無しさん:04/11/04 17:16:16
発想って…
常套句なんだがなあ

144 :デフォルトの名無しさん:04/11/04 17:37:23
タスクバーのアイコンをクリックしたときのメッセージを教えてくださ

145 :デフォルトの名無しさん:04/11/04 17:50:14
WM_LBUTTONUP

146 :デフォルトの名無しさん:04/11/04 18:00:06
エロい人ありがとう

147 :デフォルトの名無しさん:04/11/04 19:09:55
エディットボックスに半角英数しか
入力できないようにするにはどうしたらよいでしょうか。

148 :デフォルトの名無しさん:04/11/04 19:14:58
>>135
Gracenoteのサンプルあっさり動いた。
ライセンスまだ届いてないけどいいのか?

149 :デフォルトの名無しさん:04/11/04 19:20:51
Windows98 と bcc5.5.1 を使ってますが、GetSystemMetrics() は
戻ってきた時、レジスタ eax, edx, ecx を破壊していませんか?
たとえば
GetSystemMetrics(SM_CXSCREEN);
と呼んでみた時です
デバッガで、この関数の前後でのレジスタの変化をみました

この関数は
windef.h や winuser.h の中で
#define CDECL _cdecl
#define WINAPI CDECL
int WINAPI GetSystemMetrics(int nIndex);
と宣言されているようです

返り値のために eax が破壊されるのはわかるのですが
てっきり edx, ecx は保存されていると思っていた…

WINAPI は、eax, edx, ecx を破壊する呼び出し規約でしょうか?

150 :デフォルトの名無しさん:04/11/04 19:26:24
>>149
 確か x86 用の VC++ (Microsoft の C/C++ コンパイラ) の ABI では、
関数呼び出しで ebp 以外の汎用レジスタはどれも破壊しても構わない
ことになっていたような気がする・・・bcc でも同様でしょう。

151 :デフォルトの名無しさん:04/11/04 19:27:03
win2000,VC6でMFCを使わずにwindowsアプリを開発しています。
マウスカーソルを消したいのですが、どうすればいいでしょうか?
ShowCursor(true)は、ウィンドウ外に行くとマウスカーソルが表示されてしまいます。
SetCursor(NULL)とやってみましたが、マウスカーソルが消えすらしませんでした。

152 :デフォルトの名無しさん:04/11/04 20:14:59
SetCaptureしてからShowCursorすれば?

153 :デフォルトの名無しさん:04/11/04 20:21:30
アフォの言うことは聞かないように

154 :デフォルトの名無しさん:04/11/04 20:24:41
>>152さん、どうもです。

SetCapture(hWnd);
ShowCursor(false);
こう書いてみましたが、メインフレームからはずれると消したマウスが表示
されてしまいます。


155 :デフォルトの名無しさん:04/11/04 20:27:17
>>153
天才のあなたなら答えがわかるのではありませんか?

156 :デフォルトの名無しさん:04/11/04 20:40:36
答えは「そんなことを望んではいけない」だ

157 :デフォルトの名無しさん:04/11/04 20:43:52
>>156
無理だという事なんでしょうか?
それともただのなじりでしょうか?
理解しかねます。。。

158 :デフォルトの名無しさん:04/11/04 21:00:50
きょうは、ようちえんですなどけいのえをかきました。じょうずにかけたので
はやくおかあさんにみてほしいなとおもっていたら、けんじくんがぼくのえを
びりびりとやぶってしまいました。おかあさんにきょうはどんなことをしたのと
きかれたので、みんなでなわとびをしたといいました。

159 :デフォルトの名無しさん:04/11/04 21:05:58
>>147
エディットボックスに半角英数しかはIME起動しなくすればよさそうだけど
コピペできちゃうから

160 :デフォルトの名無しさん:04/11/04 21:10:39
>>149
eax/edx/ecx: 破壊してもよい
ebx/esi/edi: 破壊しちゃだめ
となっております。
Windows だけじゃなくて、i386 で動く UNIX でも全部そうなってる。


161 :デフォルトの名無しさん:04/11/04 21:11:53
>>151は無理そうですね。残念です。
透明なマウスカーソルで置き換えられるか試そうと思います。

162 :デフォルトの名無しさん:04/11/04 21:15:01
>>157
そんなアプリを使わされたらブチ切れそうってことではないかとw

163 :デフォルトの名無しさん:04/11/04 21:24:46
>>157
他APのSetCursor とか WM_SETCURSOR とかをフックすればできるとは思います。
逆にかならずマウスカーソルを表示させるために同様のことをするAPと同時に動くと、
動作は不定なのだろうけれども。

>>162
タッチパネル付きモニタとかで使う業務用端末とかじゃないの?

164 :デフォルトの名無しさん:04/11/04 21:32:14
マウスをどっかに固定しとけば?

165 :デフォルトの名無しさん:04/11/04 21:38:09
あー SetCursorPos(0,0);
やってみたらとんでもないことに

166 :デフォルトの名無しさん:04/11/04 22:12:49
マウスドライバを削除すれば?

167 :デフォルトの名無しさん:04/11/04 22:38:02
だから答えるなと

168 :デフォルトの名無しさん:04/11/05 00:04:28
フォントサイズのデフォルトの値は環境によって変わるものですか?
また、通常のデフォルトのフォントサイズの値を教えてください。

169 :デフォルトの名無しさん:04/11/05 00:09:22
>>147
自由に入力させて、入力を全部チェック
入力文字を調べて、'a'〜'z'か'A'〜'Z'か'0'〜'1'以外の値なら削除

170 :デフォルトの名無しさん:04/11/05 00:51:02
大阪(西梅田)、新宿(JR駅前)のそれぞれ一等地に
拠点を構え、業績急上昇中!未経験者大募集中!の
ソフトウェア開発会社
グリーンシステムを応援するHPです。
http://www.geocities.jp/grs_hp/

応援するスレはこちら!
http://school4.2ch.net/test/read.cgi/job/1077432387/

最高の会社にするため、みんな頑張ってます!



171 :デフォルトの名無しさん:04/11/05 01:09:51
マウスをはずせば良い

172 :デフォルトの名無しさん:04/11/05 01:32:59
ビットマップで塗りつぶしたウィンドウに、
DrawTextで文字を書くと、
文字の背景に白い四角形がでてきます。
文字だけを表示するためにはどうすればよいのでしょうか。

ビットマップの上にさらにビットマップを重ねるときは、
透過処理用のビットマップを用意してBitBltで重ねるのは知っているのですが。

173 :デフォルトの名無しさん:04/11/05 01:34:37
オバキュー

174 :デフォルトの名無しさん:04/11/05 01:36:33
SetTextMode

175 :デフォルトの名無しさん:04/11/05 01:39:14
SetBkModeじゃね?
つうかこんなのググれば一発なのに。

176 :デフォルトの名無しさん:04/11/05 01:43:07
あぁ、ごめん、DrawTextだとうまくいくかワカンネ。
TextOutなら上手くいった記憶あり。

177 :172:04/11/05 01:45:25
初歩の初歩でした。
すみません。
でも私はこれで30分以上詰まってたので、
大変助かりました。

178 :デフォルトの名無しさん:04/11/05 01:48:05
DrawTextで大丈夫でした。ありがとうございます。

179 :147:04/11/05 01:53:11
>>159>>169
どもです。
やっぱ入力後にチェックするのが確実そうですね。
ありがとうございました。

180 :デフォルトの名無しさん:04/11/05 01:59:17
>>173
すでにわかってるやつにしかわからないという無意味さにワロタ

181 :デフォルトの名無しさん:04/11/05 02:20:37
スルーされてるしな

182 :デフォルトの名無しさん:04/11/05 11:23:18
いてーよーオバキュー

183 :デフォルトの名無しさん:04/11/05 12:23:57
オペ逝く?

184 :デフォルトの名無しさん:04/11/05 12:42:59
ET用オバキュー

185 :デフォルトの名無しさん:04/11/05 12:47:46
OPAQUEをオパキューと読むスレはここですか?

186 :デフォルトの名無しさん:04/11/05 12:49:22
>>185
http://pc5.2ch.net/test/read.cgi/tech/1056173956/


187 :デフォルトの名無しさん:04/11/05 13:13:15
>>185
オパクエだろ

188 :デフォルトの名無しさん:04/11/05 16:33:11
数値(int)を文字列に変換するAPIおしえて

189 :デフォルトの名無しさん:04/11/05 16:43:32
wsprintf

190 :デフォルトの名無しさん:04/11/05 16:57:39
>>189
それ逆だからっ!

191 :デフォルトの名無しさん:04/11/05 16:59:09
StrToIntExって何かリンクしないと使えない?

192 :デフォルトの名無しさん:04/11/05 17:01:10
何もリンクせずに使えるWin32APIは無いよ

193 :デフォルトの名無しさん:04/11/05 17:01:24
>>191
それ逆じゃないか?

194 :デフォルトの名無しさん:04/11/05 17:03:07
>>191
shlwapi
ちなみにこれはWin98/2kかIE4以降でないと入っていない。

195 :デフォルトの名無しさん:04/11/05 17:06:17
>>193
逆だから
>>194
そのヘッダーはインクルードしてんだけど、リンク時になんかStrToIntExAが未解決って

196 :デフォルトの名無しさん:04/11/05 17:06:21
>>194

197 :デフォルトの名無しさん:04/11/05 17:09:27
「何かリンクしないと使えない?」
「shlwapi」
「そのヘッダーはインクルードしてんだけど」


198 :デフォルトの名無しさん:04/11/05 17:09:39
>>195
インポートライブラリをリンクしろ。
ところで188ではint→charを聞いているがStrToIntExはchar→intだぞ。

199 :デフォルトの名無しさん:04/11/05 17:11:54
>>198
なにむきになってんの?

200 :デフォルトの名無しさん:04/11/05 17:19:03
・int->char*
sprintf
・INT->LPTSTR
wsprintf
・char * -> int
atoi
・LPTSTR->INT
_ttoi

201 :デフォルトの名無しさん:04/11/05 17:20:54
自己解決しました。

202 :デフォルトの名無しさん:04/11/05 17:39:39
自己満足しました。

203 :149:04/11/05 18:28:47
>>150さん、>>160さん、どうもありがとう

204 :デフォルトの名無しさん:04/11/05 18:56:52
自己猫耳ごっこしました。


205 :デフォルトの名無しさん:04/11/05 20:18:40
自己完結しました

206 :デフォルトの名無しさん:04/11/05 22:01:39
最大化ボタンを押されたのを知るにはどうすればいいですか?

207 :デフォルトの名無しさん:04/11/05 22:48:15
WM_SYSCOMMND

208 :デフォルトの名無しさん:04/11/05 22:54:31
>>188
SetDlgItemIntしてGetDlgItemText

209 :206:04/11/05 23:08:30
>>207
ありがとうございます。

210 :デフォルトの名無しさん:04/11/05 23:26:33
>>208
文字配列をソートするのに、LBS_SORTなリストボックスにぶちこんでから
取り出していた奴は実在する。

211 :デフォルトの名無しさん:04/11/05 23:26:46
32ビットのDIBを作って、指定したピクセル群にアルファ値を設定したいです。
GDI+ではブラシなどがアルファ値をもつので普通の描画操作(Polygonなど)で
できると思うのですが、GDIでこれをやるにはメモリを直接書き換えるしかないの
ですか?

212 :デフォルトの名無しさん:04/11/05 23:37:10
まぁ普通はDIBSectionでやるよな。

213 :デフォルトの名無しさん:04/11/06 00:11:54
>>212
異常者は?

214 :デフォルトの名無しさん:04/11/06 03:16:45
>>213
SetPixcel()

215 :デフォルトの名無しさん:04/11/06 07:37:13
>>210
某VBマガジンでソートの実装が面倒なときはこんな事もできると紹介されていたな

216 :デフォルトの名無しさん:04/11/06 07:45:33
>>214
異常者!無理じゃねーか

217 :デフォルトの名無しさん:04/11/06 09:46:27
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnwui/htm/layer.asp

218 :デフォルトの名無しさん:04/11/06 10:30:41
>>217
あほ

219 :デフォルトの名無しさん:04/11/06 14:33:16

WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU,
を指定して作ったウインドウの、クライアント領域を600に固定したいときの、
nHeightの指定の仕方を教えてください。

#define WINDOW_TATE (600 + SM_CYFRAME + SM_CYMENU)
では、少しクライアント領域が広くなるようです。

220 :デフォルトの名無しさん:04/11/06 14:39:25
>>219
AdjustWindowRect

221 :デフォルトの名無しさん:04/11/06 14:44:03
即答ありがとうございます。

222 :デフォルトの名無しさん:04/11/06 15:07:44
>>221
出来たみたいだからいいけど、

> #define WINDOW_TATE (600 + SM_CYFRAME + SM_CYMENU)

明らかに使い方間違ってないか?

223 :デフォルトの名無しさん:04/11/06 16:31:08
MFCとかアプリケーションウィザードとか使わずに、
普通にリソースエディタを使ってダイアログベースのアプリを作ってます。
それで、メインのダイアログにメニューをつけようとしてるんですが、
リソースにメニューを挿入し、そのメニューのIDを
メインダイアログの「プロパティー」の「一般タブ」から
指定してあげてもテストプレビューでメニューがまったく表示されません。
なにか他に必要な設定などはあるのでしょうか?
それともテストでは見えないものなんでしょうか?

224 :223:04/11/06 16:57:04
コンパイルしたらちゃんと表示されたから
そういう仕様なのかな…

225 :デフォルトの名無しさん:04/11/06 17:11:10
マウスの左ボタンをおして画面上を動かすと、画面の絵が動くようにしていて
途中で落ちるので、調べた結果、CreatePen() の廃棄洩れがあったのですが、
何回かは廃棄洩れがあっても動きます。何が満杯になると落ちるのか、分かり
ますか。

226 :デフォルトの名無しさん:04/11/06 17:16:38
GDIリソース
XPにも9xよりはるかに数字は大きいが上限はある

227 :デフォルトの名無しさん:04/11/06 17:19:26
普通「破棄」だと思うが。
原因は「破棄のし忘れでリソース不足に陥っていること」だろう。
破棄をきちんとすればいいこと。

228 :デフォルトの名無しさん:04/11/06 17:22:23
透明なウインドウを作りたいのですが、
どうすればできるでしょうか。

C言語、borlandのコンパイラで作成しています。

229 :デフォルトの名無しさん:04/11/06 17:34:55
「透明なウィンドウ」という言葉の意味による。
見えないウィンドウって意味なら表示させなきゃすむわけだが。

230 :デフォルトの名無しさん:04/11/06 17:42:58
>>228
Layered Window

231 :デフォルトの名無しさん:04/11/06 17:49:42
インターネットエクスプローラのクライアント領域を全て選択→コピー
するような文字列の取得を行うプログラムを作るにはどうすればいいのでしょうか?
対象プログラムのタイトルとか各コントロールの文字列を取得するのは分かったんだけど、
クライアント領域を手動でコピーするような操作が分からない
不可能なのでしょうか?

232 :デフォルトの名無しさん:04/11/06 18:14:12
MSAA

233 :デフォルトの名無しさん:04/11/06 19:40:35
任意の文字列を再変換したいんですけど、
うまくできません。
というより、どうすれば良いのかよくわかりません。
とりあえず、再変換構造体PRECONVERTSTRINGとか
ImmSetCompositionString()を使うって
ところまではわかったのですが…。
実際これを使ってどうすれば良いのでしょうか?


234 :ほんたま:04/11/06 20:34:14
おみゃ〜らよ、system32フォルダにあるDLLの関数を呼び出すには、インポートセクションにDLL名と関数名を書き込んでいくだけで、呼び出せるんだが、
VC++で自分でつくったDLLの関数を同じ方法で呼び出そうとすると、「DLL何に○○のエントリーポイントが見つかりません」というメッセージが出て呼び出せないんだ…
おみゃ〜らよ、自分でつくったDLLとwindows付属のDLLとは、どっか構造が違うのかな?
windows付属のDLLと同じ構造のDLLを自分でつくるにはどうすればいいの?
教えてくだされ〜♪


235 :デフォルトの名無しさん:04/11/06 20:47:44
えーと、インポートセクションって何だっけ?

236 :デフォルトの名無しさん:04/11/06 20:47:45
>>234
DLL 作るとき extern "C" した?

237 :デフォルトの名無しさん:04/11/06 20:58:03
便乗質問。
Dependency WalkerでDLLがエクスポートしている関数を見るとき、
自作DLLの関数を見ると、"_hoge@4"のように呼び出し規約に従った接頭・接尾文字が
エクスポートされているように見えるんだが、
たとえばKernel32.dllのGetProcAddressはそのまま"GetProcAddress"でエクスポートされている感じ。
この違いは何が原因?

238 :デフォルトの名無しさん:04/11/06 20:58:26
マルチにレス不要

239 :236:04/11/06 20:59:02
>>237
それも extern "C" しなされ。

240 :237:04/11/06 21:09:50
関数のプロトタイプ全てに一々書く必要があるん?
一応ソース自体も.cなファイルなので、ヘッダでは

#ifdef _cplusplus
extern "C" {
#endif

なんて書いてるんだけど…

241 :236:04/11/06 21:14:49
>>240
ごめん、__stdcall も必要かもしれない。

extern "C" __declspec(dllexport)
int __stdcall Func(...)

こんなんだっけな。

242 :デフォルトの名無しさん:04/11/06 21:19:44
>>240
マクロ化しておけばいいだろう。
ちなみに .c なら extern "C" はいらないよ。

243 :237:04/11/06 21:21:11
自己解決しました。
defファイルを書けばいいのですね。

244 :236:04/11/06 21:22:52
>>241
なんども間違えてすまんな。
MSDN で __stdcall を調べてみれば分かると思うけど、
__stdcall には @ がつくんだ。
これをなくそうと思ったら .def ファイルで定義する必要があったと思う。

245 :デフォルトの名無しさん:04/11/06 21:33:05
で、インポートセクション…

246 :236:04/11/06 21:37:19
>>245
たぶん、PE ファイルのインポート セクションのことだろう。
IAT (Import Address Table) とか、そういうのあるところ。

247 :デフォルトの名無しさん:04/11/06 21:59:53
177 名前:ほんたま :04/11/06 20:40:20
おみゃ〜らよ、system32フォルダにあるDLLの関数を呼び出すには、インポートセクションにDLL名と関数名を書き込んでいくだけで、呼び出せるんだが、
VC++で自分でつくったDLLの関数を同じ方法で呼び出そうとすると、「DLL何に○○のエントリーポイントが見つかりません」というメッセージが出て呼び出
せないんだ…
おみゃ〜らよ、自分でつくったDLLとwindows付属のDLLとは、どっか構造が違うのかな?
windows付属のDLLと同じ構造のDLLを自分でつくるにはどうすればいいの?
教えてくだされ〜♪

248 :236:04/11/06 22:15:31
>>247
だから .def ファイルを使うんだって。
.cpp で関数を定義しているんなら extern "C" をしておいたほうがいい。

249 :219:04/11/06 22:48:23
>>222
間違っていました。
#define WINDOWS_TATE 600

HWND hWnd;
int y1, y2, y3;
y1 = GetSystemMetrics(SM_CYFIXEDFRAME);
y2 = GetSystemMetrics(SM_CYCAPTION);
y3 = GetSystemMetrics(SM_CYMENU);

hWnd = CreateWindow(〜〜〜〜〜〜, WINDOWS_TATE + y1 + y2 + y3 ,〜〜〜);

が正しいと今の自分は思っています。
GetSystemMetricsで値を得る前に#defineで定義してはまったくだめですね。



250 :228:04/11/06 22:51:21
>>229
ウインドウの背景を透明化させたいです
最初にNULL_BRUSHを指定したの時のように(これはただ塗りつぶさないだけのようですが。。)
>>230
詳細がのっているところはありませんか?

251 :デフォルトの名無しさん:04/11/06 23:00:10
>>250
>詳細がのっているところはありませんか?
MSDN

252 :デフォルトの名無しさん:04/11/06 23:00:42
>>228
SetLayeredWindowAttributes

253 :デフォルトの名無しさん:04/11/06 23:06:28
すいません、SzFindLastChを使って、拡張子を調べてみようと思ったのですが、
この関数を使うと「デフォルトのメールクライアントが設定されていないか〜」と、
なぜかOutlookを起動するように促すメッセージが出てきます。
ここだけコメントアウトすると何も無いので、この関数に間違い無いと思います。
英語のページしかなかったので、自力でヘッダファイルを探して、mapiutil.hに宣言があったのでincludeしたのですが、これが問題なんでしょうか…
言語は、C++(をC言語として利用)で、テストに数値を書き出している段階なのでWinMainではなくmain関数から実行しています

因みに、メーラーはAl-Mailを使っていて、OEは使ってません

254 :デフォルトの名無しさん:04/11/06 23:07:32
単純に四角でないウィンドウを作りたいだけならSetWindowRgn()で充分。
半透明をサポートしたいならUpdateLayeredWindow()が基本。

255 :デフォルトの名無しさん:04/11/06 23:08:55
アプリケーションがOSからのサスペンドイベントを受信する方法について何かヒントください


256 :デフォルトの名無しさん:04/11/06 23:08:57
>>246
PE ヘッダの内部のセクションとかそういうの?
PE ヘッダなんてまともに調べたことなかったな。

しかし、__declspec とかした方が早いような気がするのは
俺だけか。

257 :230:04/11/06 23:43:57
>>250
ms-help://MS.PSDK.1033/winui/winui/windowsuserinterface/windowing/windows/usingwindows.htm#layered_win

258 :デフォルトの名無しさん:04/11/07 00:15:35
WM_POWERBROADCAST

259 :228:04/11/07 01:05:14
皆さんありがとうございました。
MSDNライブラリには
SetLayeredWindowAttributesがのっていたんですね
無事透明化できました。

しかし透明化(のカラーキー)の場所でマウスクリックが取れません。
これは仕方のないことなんでしょうか?


260 :225:pen廃棄漏れ:04/11/07 01:07:07
>>226, >>227 thanks。色をあれこれ変えていて、分岐によって廃棄漏れがあったの。

261 :デフォルトの名無しさん:04/11/07 01:15:30
>>256
__declspec(dllexport)
は関数の外部に公開するというだけで、公開名にはノータッチ。
stdcall なら当然 _hgoe@4 のまま公開される。
_ と @n を削除したければ def ファイルを書くしかない。


262 :デフォルトの名無しさん:04/11/07 01:21:26
>>260
廃棄じゃなくて破棄だってばさ。

263 :デフォルトの名無しさん:04/11/07 02:31:11
>>249
できたみたいだからいいけど、枠線は上と下にあるよ。

264 :255:04/11/07 03:03:24
>>258

さんきゅ!

265 :デフォルトの名無しさん:04/11/07 11:13:15
http://v.isp.2ch.net/up/e606b9e3f104.jpg

ファイルをDLしようとすると
こんなエラーが出てきてしまいます。
2週間前に新しく買ったパソコンで
最初は何もしなくても解凍出来てたみたいなのですが
何かをいじってしまったらしく…
これを元の設定に戻す方法
初期化以外にあれば教えてください。

266 :デフォルトの名無しさん:04/11/07 11:47:38
>>265
PC初心者板池

267 :デフォルトの名無しさん:04/11/07 12:59:05
>>265
飯塚さん、恐らくunlha32.dllを削除したのでしょう。

268 :デフォルトの名無しさん:04/11/07 13:09:37
いかにもなミスですね、飯塚さん。

269 :デフォルトの名無しさん:04/11/07 13:12:58
>>265-268
http://pc5.2ch.net/test/read.cgi/tech/1090324689/


270 :デフォルトの名無しさん:04/11/07 13:24:43
CreateWindow()でウィンドウを作成しているのですが、ダイアログのように、
左上にアイコンを表示せず、でも、右上に×ボタンは表示したいのです。
このような場合、どのようにしたらいいのでしょうか。

RegisterClass()の引数では、wndclass.hIconをNULLにしています。
CreateWindow()の引数では、WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_DLGFRAME
としているのですが、WS_SYSMENUを指定した時点で、アイコンが出てしまいます。
逆に指定しないと×ボタンが出てこないという...。

271 :デフォルトの名無しさん:04/11/07 13:37:14
>このような場合、どのようにしたらいいのでしょうか。

意味のない拘りを捨てればよいと思います。


272 :デフォルトの名無しさん:04/11/07 13:55:57
>>270
1週間ぐらい前に似たような質問をどっかのスレで見た

273 :デフォルトの名無しさん:04/11/07 15:00:13
>>265

タイトルバーの名前も消しておかないと、飯塚さん

274 :デフォルトの名無しさん:04/11/07 15:51:37
真っ青なアイコンを登録

275 :デフォルトの名無しさん:04/11/07 16:15:50
>>274
天才!!

276 :デフォルトの名無しさん:04/11/07 16:35:52
>>270
っVCLベースのダイアログ

277 :デフォルトの名無しさん:04/11/07 16:46:08
>>274
どうせなら、スクリーン全体に貼らなきゃ。

278 :デフォルトの名無しさん:04/11/07 19:27:48
プログラムが起動したディレクトリを知る方法って、起動時に記録しておくしか無いですか?
GetCurrentDirectoryだと、ファイル選択のダイアログとかで変化するし、
GetCommandLineはファイル名しか取得してないみたいです
WinMainからだと、起動時にGetCurrentDirectoryでパスを取得して、それをずっと保持しておくだけでしょうか?

279 :デフォルトの名無しさん:04/11/07 19:28:41
>>275
タイトルバーの色を変えてますた
とか
タイトルバーがグラデってますた
という状況を考えると透明アイコンのほうがいい

280 :デフォルトの名無しさん:04/11/07 19:29:01
>>278
GetModuleFileName

281 :デフォルトの名無しさん:04/11/07 19:29:31
ちなみに起動時にカレントディレクトリがすでにexeのディレクトリと
異なる場合もある

282 :デフォルトの名無しさん:04/11/07 19:37:22
>>280
おお、出来た。
ありがとうございます。

283 :270:04/11/07 19:49:00
>>274, 275, 277
それだとCAPTIONの左側に空白ができちゃいます。

>>276
VCLはわからないですけど、CreateWindow()するのではなく、
リソースとして空っぽの無駄なダイアログを用意しておき、
CreateDialog()で生成したウィンドウをこねくり回すいう逃げは
あるかなと。
ただ、アイコンのないウィンドウスタイルっていうのがあるのなら、
それを使った方がスマートではないかなと質問してみた次第です。


284 :デフォルトの名無しさん:04/11/07 20:12:49
普通のメインウィンドウの子として
CreateDialogで作ったモーダレスダイアログですが、
このダイアログのプロシージャを別ファイルに分割してコンパイルしようとした所、
エディットボックスなどのコントロールのIDが正しく受け取れず
定義されていない識別子ですというエラーがでます。どうしてでしょうか?
分割せずに一つのソースで書いてたときは上手くいっていたのですが…
クラスとかにはしていなくて、普通の関数のようにただソースを分割しているだけです。
///////////////////////////
BOOL CALLBACK DlgProc(HWND hwDlg,UINT msg,WPARAM wp,LPARAM lp)
switch (msg) {
case WM_INITDIALOG:
SetDlgItemText(hwDlg,IDC_EDIT,"aaa");
return TRUE;}


///////////////////////////
プロシージャのプロトタイプ宣言はヘッダファイルでしてます。

285 :デフォルトの名無しさん:04/11/07 21:12:28
>>283
Delphi/BCB製アプリのダイアログをSPY++等で見てみれ。
Del/BCBのライブラリはダイアログをCreateWindowで作ってる。

286 :デフォルトの名無しさん:04/11/07 21:14:46
>>284
IDC_EDIT自体をヘッダで宣言しろ。

287 :デフォルトの名無しさん:04/11/07 23:47:50
>>270==>>283
CreateWindowEx でよければ,WS_EX_TOOLWINDOW があるけど。
ただこの場合,どうしても最大化/最小化ボタンは現れないみたい。

288 :284:04/11/08 00:05:35
>>286
ありがとうございます。リソースのヘッダを読み込むの忘れてました。。。
完全に頭がボケてるようです。
ところで一つのソースにまとめて書いてたときのことですが、
下のようにウィンドウハンドルをグローバルにしたとき正しく渡らないのはなぜでしょうか。
この場合コンパイルは通りましたが、エディットボックスには何も表示されませんでした。
////////////////////////////////////////////////////////////////////
HWND g_hwDlg;//グローバル
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);//プロトタイプ
////メイン関数
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{略
g_hwDlg =CreateDialog(hInst, "Dialog", hWnd, (DLGPROC)DlgProc);//生成。同時にハンドルをグローバルに
略}
////ダイアログのプロシージャ
BOOL CALLBACK DlgProc(HWND hwDlg,UINT msg,WPARAM wp,LPARAM lp)
switch (msg) {
case WM_INITDIALOG:
SetDlgItemText(g_hwDlg,IDC_EDIT,"aaa");//←グローバルのハンドルを指定
return TRUE;}


///////////////////////////


289 :デフォルトの名無しさん:04/11/08 00:07:11
>>288
本当にぼけているようですね?
WM_INITDIALOG が呼ばれるのはどのタイミングですか?

290 :デフォルトの名無しさん:04/11/08 00:10:28
どのタイミングでしょう? えへえへ

291 :284:04/11/08 00:43:30
本当にボケてしまったようです。ごめんなさい。えへえへ

292 :ほんたま:04/11/08 01:37:08
WM_TIMERを使ったタイマーイベントなんですが、タイマーイベントがどうも発生しないんです。
ちなみにWM_CREATEのときメッセージボックスを表示すると、タイマーイベントが発生するんです。
でもメッセージボックスを取っ払うと、発生しなくなるんです…
どうして?教えてくだされ〜♪

293 :デフォルトの名無しさん:04/11/08 01:48:18
タイマ取締法違反に引っ掛かったのでしょう。


294 :デフォルトの名無しさん:04/11/08 01:51:45
HWND g_hwDlg = NULL;//グローバル
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);//プロトタイプ
////メイン関数
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{略
CreateDialog(hInst, "Dialog", hWnd, (DLGPROC)DlgProc);//生成
略}
////ダイアログのプロシージャ
BOOL CALLBACK DlgProc(HWND hwDlg,UINT msg,WPARAM wp,LPARAM lp)
switch (msg) {
case WM_INITDIALOG:
g_hwDlg = hwDlg; //ハンドルをグローバルに
SetDlgItemText(g_hwDlg,IDC_EDIT,"aaa");//←グローバルのハンドルを指定
return TRUE;}




295 :デフォルトの名無しさん:04/11/08 17:24:32
自作プログラム内でDLLを使おうと思っているのですが、
DLL関数の呼び出しって普通のクラス関数(非インライン)呼び出しと比べて
オーバーヘッドが大きいんでしょうか?
一回の処理で何百回も呼び出す予定なんですが差はどれくらい出るでしょうか?


296 :デフォルトの名無しさん:04/11/08 17:27:32
>>295
実験してみればいいじゃん

297 :295:04/11/08 17:28:03
すいません環境を書き忘れました。
WindowsXPSP1
VC++6.0SP6
です。


298 :デフォルトの名無しさん:04/11/08 17:33:39
スレッドハンドルの扱いに関してなのですが
スレッドが走ってる状態でそのスレッドハンドルをCloseHandleしていいのでしょうか?
試しにスレッドを作成しスレッド処理の最初でCloseHandleしてみたのですが
その後の処理も走っています。
この場合スレッドハンドルにアクセス(WaitForSingleObjectとか)出来ないだけで
スレッド自信は有効ということなのでしょうか?

299 :デフォルトの名無しさん:04/11/08 17:55:41
>>298
その通り

300 :298:04/11/08 18:12:08
>>299
ありがとう

301 :デフォルトの名無しさん:04/11/08 18:37:29
マウスカーソルを制御する命令と
マウスの移動範囲を限定できる命令を教えてください
CまたはC++でxp、VC.netです

302 :デフォルトの名無しさん:04/11/08 18:40:42
制御と言う意味が分からんが、移動範囲の限定はClipCursor、
形を変えるならSetCursor、位置を指定するならばSetCursorPosなど。

303 :デフォルトの名無しさん:04/11/08 18:42:14
>>302
レス有り難うございます
マウスカーソル位置を指定した位置に表示することでした
早速試してみます

304 :デフォルトの名無しさん:04/11/08 22:01:33
>>295
試してやるから開発環境(ハード・ソフト)をオレにゆずれ

305 :デフォルトの名無しさん:04/11/08 22:07:00
マウスボタンが離されたことを検出できるAPIを教えてください
CまたはC++でxp、VC.netです

306 :デフォルトの名無しさん:04/11/08 22:09:33
APIって…イベントドリブンが分かっているのだろうか。
マウスが離されたら、そういうイベントが飛んでくるに決まってるだろうが。

307 :デフォルトの名無しさん:04/11/08 22:17:56
>>305
フック?

308 :デフォルトの名無しさん:04/11/08 22:21:10
メインウィンドウの×ボタンを押したときに確認のダイアログを出すようなプログラムを
終了させるにはどうしたらいいでしょうか?
WM_CLOSEを送った後に、そのメッセージボックスの「はい(Y)」ボタンをクリックさせる方法を
思いついたのですが、常套手段ではないような気がしましたので。

309 :デフォルトの名無しさん:04/11/08 22:21:15
レーウェンフック

310 :デフォルトの名無しさん:04/11/08 22:25:47
WM_SETFONTで子コントロールのフォントを変更したのですが、
TextMetrics()で確認すると、デフォルトの情報しか返ってきません。
なぜでしょうか?

311 :デフォルトの名無しさん:04/11/08 22:26:20
>>306
>>307
ウィンドウプロシジャ関数内でWM_LBUTTONUPの場合で検出してたのですが
ウィンドウプロシジャ関数内でいろいろいじると変数の取り扱いが複雑になるので
マウスを離すことを検出できる命令ないかなと思ったんですが

312 :デフォルトの名無しさん:04/11/08 22:48:41
>>311
ウインドウプロシージャから別の関数を呼べば解決する問題の気がする。
設計・考え方を見直すべきでは?

313 :310:04/11/08 22:53:02
間違えた。

TextMetrics() -> GetTextMetrics()


314 :デフォルトの名無しさん:04/11/08 23:01:05
ウィンドウの位置を強制的に移動させたいのですが
SetWindowPosなどは高さや幅を指定するのが面倒くさいので
単に移動後の左上のXY座標を入力するだけで
その位置に移動してくれるような命令はないでしょうか。

315 :ほんたま:04/11/08 23:01:38
おみゃ〜ら〜、サンプルアップしたぞ〜♪ホームページもアップしたぞ〜♪宇宙一すげぞ〜♪
おみゃ〜らよ、なぜ宇宙一すげーかわかるかな?
おみゃ〜らよ、おりはな、「Visual C++」で自作したDLLをスリムドカンでつくったプログラムから呼び出すのに成功したんだよ!わかる?
おみゃ〜らよ、DLLを呼び出すプログラムを「Visual C++」」でつくるには、Libファイルをリンクに設定したり、ヘッダファイルをインクルードしたりとやるべきことは多いだろ?
おみゃ〜らよ、DLLを呼び出すプログラムを「HSP」でつくるにも、やはりDLLの他に「.as」ファイルが必要だよ。
だが、「スリムドカン」の場合、DLLの他には一切何も必要ないんだな〜う〜ん、これが…自分じわかる?
つまり「スリムドカン」の場合、DLLさえあればDLLを呼び出すプログラムがビルドできるってわけ♪
おみゃ〜らよ、おりは宇宙一画期的だと思わないか?
おみゃ〜らよ、宇宙一すげ〜とわめいたのはそういうことよ♪
おみゃ〜らよ、自分じどうじ?


316 :デフォルトの名無しさん:04/11/08 23:04:03
>>314
自分で作れ

317 :308:04/11/08 23:06:15
うまい方法が見当たらなかったので、そのやり方でいくことにしました。

318 :デフォルトの名無しさん:04/11/08 23:10:33
>>314
SWP_NOSIZE

319 :デフォルトの名無しさん:04/11/08 23:56:05
>>312
ウインドウプロシージャと直接関係のない関数の中のローカル変数がウインドウプロシージャで必要になるので
そのローカル変数をグローバル変数にしないとウインドウプロシージャ内で利用できないのです

320 :デフォルトの名無しさん:04/11/08 23:58:28
>>310
GetTextMetrics()にはDCのハンドルを指定するわけだけど、
DCの属性は、CS_OWNDCとかを指定しない限り、
最初はデフォルトの情報が選択されているからじゃないかな。
違っていたらスマソ

321 :デフォルトの名無しさん:04/11/09 00:16:58
track bar でパラメータ変えて描画しているんですが、描画にちょいと時間が
掛かるんで、描画が始まったら disable にしようと、EnableWindow() を
使って見たが、効かない。何を使えばいいでしょうか。TBS_... てものあるが
頭に血が上って、英語を読めません。

322 :デフォルトの名無しさん:04/11/09 00:35:15
>>321
頭の血を下げろ

323 :デフォルトの名無しさん:04/11/09 00:47:39
WM_SETREDRAWは効かない?

324 :デフォルトの名無しさん:04/11/09 00:50:02
>>319
聞くだけ聞いてやろう、開発環境は?

325 :デフォルトの名無しさん:04/11/09 01:30:42
>>319
だから、「あるコードの実行中まさにそのコードでマウスのボタンが上がって
いるか」は判別できるけれども、「あるコードの実行中まさにその実行中の
コードでマウスのボタンが上げられた」かどうかを判別できるわけがない。
これはOSに関係ない、時間の概念の問題だろう。

「マウスが上げられた瞬間に、ある指定した関数を呼び出してほしい」という
ことであれば話は別だろうが。

326 :デフォルトの名無しさん:04/11/09 02:37:24
普通は WM_LBUTTONUP のディスパッチャで検出できる。以上!
なんだけどなあ。Win32 としては基本中の基本の処理だ。
後は、設計の問題。設計のまずさをAPIでカバーしようとするのは
本末転倒だろう。
もしゲームだったら DirectInput も調べてみたら。


327 :デフォルトの名無しさん:04/11/09 02:39:30
>>325
>>326
WM_LBUTTONUP 使うかDirectInput使うかのどっちかにします
レスありがとうございました

328 :デフォルトの名無しさん:04/11/09 03:13:59
親ウィンドウを破棄したときに、
子ウィンドウも閉じられますが、
このとき、子ウィンドウにWM_CLOSEは送られるのでしょうか。
たとえば、Objectをいちいちdeleteするのが面倒で、
WM_CLOSEのときにまとめてdeleteするようにしていたときなど、
このオブジェクトはちゃんと全部消されるのか心配です。

こんなコードを書いていたのですが。

329 :デフォルトの名無しさん:04/11/09 03:15:00
LRESULT CALLBACK WPOL01 (HWND hWndOL01, UINT msg, WPARAM wParam, LPARAM lParam)
{
HDC hdc, hBuffer;
PAINTSTRUCT ps;
RECT rect;
static HBITMAP hBitIcon[30];
switch(msg){

 case WM_CREATE:
hBitIcon[0] = LoadBitmap(((LPCREATESTRUCT)lParam)->hInstance, (LPCSTR)IDB_BITBLACK);
//以下Icon用bitmapをどかどか呼び出す
break;

 case WM_LBUTTONDOWN:
SendMessage(GetParent(hWndOL01), WM_CLOSE, NULL, NULL);
 //左クリックされたら、親ウィンドウを破棄。もちろんこのウィンドウも破棄される

 case WM_CLOSE:
for(int i = 0; i < 30; i ++){
 DeleteObject(hBitIcon[i];
} //ココ、これが呼び出されないと困る。
DestroyWindow(hWndOL01);
break;

 default:
return(DefWindowProc(hWndOL01, msg, wParam, lParam));
}
return 0;
}



330 :デフォルトの名無しさん:04/11/09 03:32:14
WM_DESTROY

331 :310:04/11/09 03:54:15
>>320 CS_OWNDC指定したけど、何も変化ないです。

おれの解釈が違ってるみたい…。
コントロールの描画は、フォントが指定されていなければデフォルトが使われて、
指定されていればそのフォントで描画。 
という解釈であってますか?

332 :デフォルトの名無しさん:04/11/09 04:04:35
>>328
あるウィンドウに属するオブジェクト類は
特別な理由が無い限り

WM_CREATE オブジェクトの作成
WM_DESTROY オブジェクトの破棄
と考えると良い。

WM_CLOSE はウィンドウに対しての終了要求メッセージ。
しかし、これに対して拒否することも出来る。
ただし、トップレベルウィンドウにしか送られない。

WM_DESTROY が送られてきたらもう終わるしかない。


333 :510:04/11/09 04:27:17
肝心の部分がぬけてた。
ウインドウにテキストを描画するのと、コントロールがテキストを描画するのは
全くの別物である。という解釈で良いですか?

>>328
おれなら親にWM_DESTROYが送られたときに、
SendMessage()で子にもWM_DESTROYを送ってそこで処理します。


334 :デフォルトの名無しさん:04/11/09 04:34:28
まて

>おれなら親にWM_DESTROYが送られたときに、
>SendMessage()で子にもWM_DESTROYを送ってそこで処理します。

明示的に送らなくても親に WM_DESTORY 送った後に子供にも送られる。


335 :310:04/11/09 05:31:35
下のやり方だと子のMessageBox()が表示されないんですが、また解釈が間違ってますか?

WNDPROC fnDefProc;// グローバル

LRESULT CALLBACK ParentProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
  static HWND hButton;
  switch(msg) {
  case WM_CREATE:
    hButton = CreateWindow("BUTTON", "PUSH", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
        0, 0, 100, 100, hwnd, (HMENU)1, ((LPCREATESTRUCT)lp)->hInstance, NULL);
    fnDefProc = (WNDPROC)GetWindowLong(hButton, GWL_WNDPROC);
    SetWindowLong(hButton, GWL_WNDPROC, (LONG)ButtonProc);
    break;
  case WM_DESTROY:
    //  SendMessage(hButton, WM_DESTROY, wp, lp);
    MessageBox(hwnd, "Parent", "end", MB_OK);
    PostQuitMessage(0);
    break;
  default: return DefWindowProc(hwnd, msg, wp, lp);
  }
  return 0;
}

LRESULT CALLBACK ButtonProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
  if(msg==WM_DESTROY) MessageBox(NULL, "Child", "end", MB_OK);
  return CallWindowProc(fnDefProc, hwnd, msg, wp, lp);
}



336 :デフォルトの名無しさん:04/11/09 10:15:50
>>335
MessageBox()の第一引数は飾りではない。

337 :デフォルトの名無しさん:04/11/09 10:16:11
WM_DESTORYはウィンドウが破棄された結果システムが送る物。

338 :デフォルトの名無しさん:04/11/09 10:47:08
自分で送りたいときはDestroyWindowすれば結果的に発生する
直接SendMessageしてはいけない。

339 :310:04/11/09 10:56:44
>>334-338
やっぱり間違って覚えてたのか。
教えてくれてありがト。

340 :321:trackBar:04/11/09 11:26:52
>>323
どうも。WM_SETREDRAW は効かない。当座の凌ぎに ShowWindow() を使っておく
ことにしたが、バシャッと、皆お隠れになって、ドキッとするね。dim 化で
残したいよ。(下手に活かしておくと、弄られて、描画が起動されるし、busy
にして受け付けないと、freeze 見たいに見えるし)
>>322
TBS_NOTHUMB なんてあるから、隠した thumb を復帰するコマンドがあるだろうと
探しまくったがない。初期設定のみらしい。こんなん何に使うんだ。
頭に来た。まだ下がらない。

341 :デフォルトの名無しさん:04/11/09 12:31:20
>>333
ウィンドウにテキストを描画する場合も、コントロールにテキストを描画する場合も、
描画の前にまずデバイスコンテキストを取得する点では同じだと思う。
取得した時点では各属性はデフォルトのままなので、そこからフォント等の属性を
設定することになるわけだけど、属性を設定した後のデバイスコンテキストが
取得できない限り、GetTextMetrics()ではデフォルトの値が返ってくるだけだと思う。

342 :デフォルトの名無しさん:04/11/09 13:50:51
コントロールのサイズを動的に変えれますか?
ウインドウのサイズ変更にあわせてリストビューのサイズを変えたいんですが
SetClassLongやSetWindowLongではできそうもないんで。

343 :デフォルトの名無しさん:04/11/09 14:02:38
>>342
>>120

344 :デフォルトの名無しさん:04/11/09 14:32:55
Windowsではコントロールもおおむねウィンドウの一種に過ぎない
伊達にWindowsと名乗ってるわけではない

345 :デフォルトの名無しさん:04/11/09 14:45:26
VRAMのサイズやCPUの名前、メモリのサイズを取得したいのですが
それらを取得するAPIはありますでしょうか?


346 :デフォルトの名無しさん:04/11/09 14:47:59
>>344
それもあるかもしれないけど、
WindowsのWindowsたる所以は、シグナル駆動ではなくメッセージ駆動であるということだろう。
WindowsがUnixに勝っている部分のひとつだと思うのだが、認めようとしないUnix支持者。

347 :デフォルトの名無しさん:04/11/09 14:54:57
>>346
X11はメッセージ駆動じゃないの?

348 :デフォルトの名無しさん:04/11/09 15:07:56
>>347
そっとしておいた方がいいよ。

349 :デフォルトの名無しさん:04/11/09 15:22:44
342 は親ウィンドウのサイズ変更に合わせて自動的に子ウィンドウ(コントロール)
がリサイズしてくれるような機能があるかどうかを聞きたいのではないかと
思ったんだけど。

350 :デフォルトの名無しさん:04/11/09 15:45:22
>>349
エスパーな解釈だな・・・

そう思うなら、答えてあげれば良いのに

351 :デフォルトの名無しさん:04/11/09 16:23:22
>349の解釈なら、そんな機能はAPIにはないと言う答かな。

MFCならCodeGuruにCResizerなんてのがあって便利そうだけど。
#それ使っても、結局WM_SIZEやWM_GETMINMAXINFO辺りは自前で処理しないといけないけど。

352 :デフォルトの名無しさん:04/11/09 17:14:27
char buffer[256];
GetWindowText( hwnd, buffer, sizeof( buffer ) );  //A
GetWindowText( hwnd, buffer, sizeof( buffer ) -1 ); //B

APIにはバッファサイズを聞いてくるものが多いですが、
AとBではどちらが正しいのでしょうか

日本語ヘルプだとなんだか変なので、英語のヘルプを
読む限りAが正しい気がするのですが、ネットにはBのサンプルも
多い気がして混乱しています。

353 :デフォルトの名無しさん:04/11/09 17:31:31
nMaxCount
[in] Specifies the maximum number of characters to copy to the buffer, including the NULL character. If the text exceeds this limit, it is truncated.

354 :デフォルトの名無しさん:04/11/09 17:57:41
>>352
(大抵の)API の説明にあるように、最後の NULL キャラクタを含むサイズを指定するわけだけれども、
引き続く処理でいいい加減で良いから楽したい場合には、あらかじめ ZeroMemory しておいた上で
sizeof(buffer) / sizeof(TCHAR) - 1 を指定して必ず 0 ターミネートのストリングを得たりする手もある。

いい加減じゃマズイ場合には、GetWindowTextLength とか使ってちゃんと文字数文の領域を用意したりする。

355 :デフォルトの名無しさん:04/11/09 18:01:29
ZeroMemoryしておかないと終端されないAPIなんてあったっけ?

356 :デフォルトの名無しさん:04/11/09 18:06:43
>>355
バッファサイズが足りないときは殆どのAPIがそうなんじゃない?
ZeroMemory じゃなくて末尾だけ 0 入れとけば十分だけどね。

357 :352:04/11/09 19:27:29
>>354
レスありがとうございます。
しかしうーん、例えば「abc」というWindow名を持ったhwndに

char buf[3] = { 'X', 'X', 'X' };
GetWindowText( hwnd, buf, sizeof( buffer ) );

とやると、bufの中身はちゃんと「ab」であり、終端子も入っています(Windows2000)。
私としては>>352のBは必要のない処理である、で結論づけたい気もするのですが…。

或いは過去の遺物か何かなのかなぁ。
いずれにせよ皆さんお付き合い感謝です。

358 :デフォルトの名無しさん:04/11/09 19:29:33
失礼、誤記です
× GetWindowText( hwnd, buf, sizeof( buffer ) );
○ GetWindowText( hwnd, buf, sizeof( buf ) );

359 :デフォルトの名無しさん:04/11/09 19:50:50
まぁ、世の中碌に調べないで安直に-1して安心しているDQNプログラマが如何に多いかってこった。

360 :デフォルトの名無しさん:04/11/09 20:06:17
>>356
たいてい最後は0が入るよ。lstrncpyさえも。
MSDNの説明はこんな感じ
> [out] Pointer to the buffer that will receive the text. If the string
> is as long or longer than the buffer, the string is truncated and
> terminated with a NULL character.

361 :デフォルトの名無しさん:04/11/09 20:26:49
ListViewのカラムヘッダの文字がきちんと表示されません。
(幅を変えると出て来たり消えたり、とても微妙な調整をしないと表れなかったり。)
どういった可能性が考えられますでしょうか。
もしくはきちんと左揃えとかで表示するようにはできないでしょうか。

362 :デフォルトの名無しさん:04/11/09 20:47:24
スマソ。
漏れが多用する GetModuleFileName やら MultiByteToWideChar やらは NULLキャラクタ
付けてくれないんで、殆どそうなのかと思い込んでた。

363 :デフォルトの名無しさん:04/11/09 21:07:39
>>359
ソース汚いから人に見せれないやつも多いのに
ソース公開するのはそれなりの自信がないとできないだろ。
くだらないことにこだわって時間無駄にするより、
少しでも役に立つコード書いた方がよっぽどまし

364 :デフォルトの名無しさん:04/11/09 21:14:20
>>361
幅が狭いと省略される
広くすれば出るだろう

365 :デフォルトの名無しさん:04/11/09 21:22:11
>>363
そういう意識がバグを生む。

366 :デフォルトの名無しさん:04/11/09 21:23:45
>>364
どもです。なんかスタイル構造体のLVCF_FMTメンバを有効にしてたのに
それを実際にどれにするか設定してないのが悪いみたいでした。
きちんとメンバをlv.fmt = LVCFMT_LEFT;みたく設定したら上手くいきました。

367 :デフォルトの名無しさん:04/11/09 22:13:08
wininetに関して質問があります。

[test] 書き込みテスト 専用スレッド 24 [テスト]
http://qb5.2ch.net/test/read.cgi/operate/1099168555/
↑のスレッドに"書き込む"という文字を書き込みたいのですが。
ERROR:ユーザー設定が消失しています!と言う結果になり、失敗してしまします。
以下のコードをどのようにすれば、書き込めるようになるでしょうか・・。

368 :デフォルトの名無しさん:04/11/09 22:13:41
#include <wininet.h>
void kakikomi();

void kakikomi()
{
HINTERNET hInternet;
HINTERNET hHttpSession;
HINTERNET hHttpRequest;
char CokkieText[1000];
DWORD CokkieTextSize = 0;

// wininetを初期化
hInternet = InternetOpen("Monazilla/1.00",INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
// サーバへ接続
hHttpSession = InternetConnect(hInternet, "qb5.2ch.net",INTERNET_DEFAULT_HTTP_PORT,
NULL, NULL,INTERNET_SERVICE_HTTP, 0, 0);
// HTTP要求の作成
//「書き込む」をURLエンコードした結果→%8f%91%82%ab%8d%9e%82%de
hHttpRequest = HttpOpenRequest(hHttpSession, "POST",
"test/bbs.cgi?submit=%8f%91%82%ab%8d%9e%82%de&FROM=&mail=&MESSAGE=%8f%91%82%ab%8d%9e%82%de&bbs=operate&key=1099168555&time=0",
NULL, "http://qb5.2ch.net/operate/index2.html", NULL, INTERNET_FLAG_RELOAD, 0);
//クッキー取得
HttpQueryInfo(hHttpRequest,HTTP_QUERY_COOKIE,CokkieText,&CokkieTextSize,NULL);
// 作成したHTTP要求の発行
HttpSendRequest(hHttpRequest, CokkieText, -1, NULL, 0);

InternetCloseHandle(hHttpRequest);
InternetCloseHandle(hHttpSession);
InternetCloseHandle(hInternet);
}

369 :デフォルトの名無しさん:04/11/09 22:34:12
IME2002のローマ字入力・かな入力をプログラムから制御したいのですが

ImmSetConversionStatus()だと反映されません

http://support.microsoft.com/default.aspx?scid=kb;ja;419357
にはIME98はダメと書いてあるんですが・・

他の方法があるという事なんでしょうか

370 :デフォルトの名無しさん:04/11/09 22:57:06
>>368
とりあえず通信は成立してるようだからwininetは問題なし
あとは送ってるデータの問題なんでスレ違い
ツール使って荒らすやつがいるからいろいろチェックしてる。

371 :デフォルトの名無しさん:04/11/10 01:18:48
>>362
?????
MSDNのGetModuleFileNameの解説より
lpFilename
[out] Pointer to a buffer that receives a null-terminated string
that specifies the fully-qualified path of the module. If the length
of the path exceeds the size specified by the nSize parameter,
the function succeeds and the string is truncated to nSize characters
and null terminated.

372 :デフォルトの名無しさん:04/11/10 06:53:51
>>368
一度も2chに接続してないクライアントから書き込むと
「クッキー送信する云々」というメッセージが出るだろ?
君の作ったコードだとその儀式を通過していない訳だ。


373 :デフォルトの名無しさん:04/11/10 06:58:25
>>370 >>372
猿にエサ与えるなよ。ヴォケ


374 :デフォルトの名無しさん:04/11/10 10:15:45
>>368
こっちで聞いた方が良いと思われ
http://pc5.2ch.net/test/read.cgi/tech/1098912550/

375 :デフォルトの名無しさん:04/11/10 10:48:10
>>374
というよりこっちだろ。
http://pc5.2ch.net/test/read.cgi/tech/1057329161/

376 :333:04/11/10 12:02:31
>>341
分かりやすい説明ありがト。

377 :デフォルトの名無しさん:04/11/10 12:14:27
>>371
実際に↓みたいなコードで試してみればすぐにわかるけど、最後に 0 なんか付けてくれないよ。

TCHAR szPath[4];
GetModuleFileName(NULL, szPath, 4);

っていうか、msdn にはこうあるけど・・・
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getmodulefilename.asp
lpFilename
[out] Pointer to a buffer that receives a null-terminated string that specifies the fully-qualified path of
the module. If the length of the path exceeds the size that the nSize parameter specifies, the function
succeeds, and the string is truncated to nSize characters and "cannot be null terminated".

もしかして漏れ(バッファが足りないと0付かないよ派)が正しくて、>>360とかも勘違いか嘘なんじゃないの?

378 :デフォルトの名無しさん:04/11/10 12:17:26
>>377
APIにより付いたりつかなかったりする。
少なくともlstrncpyは必ず付く。

379 :デフォルトの名無しさん:04/11/10 12:18:40
lstrncpyじゃなくてlstrcpynだった

380 :367:04/11/10 12:21:14
>>370>>372
ありがとうございました。
スレ違いの質問になってしまって申し訳ありません。


381 :デフォルトの名無しさん:04/11/10 12:25:18
>>377
ドキュメント読んで、かつ試してみた。lstrホゲは末尾に0付けてくれる。GetWindowTextも。

382 :デフォルトの名無しさん:04/11/10 13:35:03
MultiByteToWideCharは? (長さ-1だと仮定して)
ドキュメント読む限りだとERROR_INSUFFICIENT_BUFFERに
なりそうだけど実際にそうなるの?

383 :デフォルトの名無しさん:04/11/10 13:36:34
つーかGetModuleFileNameにわざわざ4バイトしかないバッファを
渡すってどういう状況?

384 :デフォルトの名無しさん:04/11/10 13:50:58
>>383
0が付くかのテストする為だろ。空気嫁。

385 :デフォルトの名無しさん:04/11/10 14:22:08
リストビューの列と行を作成し、
値も入れることができました。
しかしアイテム(セットした値)の取得方法が分かりません。
LVM_GETITEMを使えばいいことまでは分かったのですが・・・。
ググっても全然載ってません。。
LVM_GETITEMでリストビューからアイテムを取得する簡単なサンプルを
お教え頂けないでしょうか。

386 :デフォルトの名無しさん:04/11/10 14:37:19
なるほど、APIの文字列の取り扱いは一貫性がないということでFAやね。

387 :デフォルトの名無しさん:04/11/10 14:40:35
>>385
ListView_GetItem()が使えると思う。
ListViewのhWndとLVITEM構造体のポインタを渡すのだが、
LVITEM構造体のiItemとiSubItemが行と列になる。

388 :デフォルトの名無しさん:04/11/10 15:05:01
RECT r = {0, 0, 640, 480};
AdjustWindowRect(&r, WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU,TRUE);
CreateWindowにr.right - r.leftとr.bottom - r.topを渡す。

AdjustWindowRectの使い方ってこれで合ってますでしょうか?
正しいサイズが求まらないんですが…

389 :デフォルトの名無しさん:04/11/10 15:26:23
>>388
拡張スタイルがあるならAdjustWindowRectEx。
あとメニューの折り返しが起きる場合は駄目だった希ガス。

390 :実行してないよ:04/11/10 15:31:58
>>385
LVITEM lvitem; //<さぁって情報を得て世界に羽ばたくぞ〜
lvitem.mask = LVIF_TEXT | LVIF_STATE; //<今回はセットした「文字列」と「状態」を取得すっかね
lvitem.iItem = 3; //<リスト3番目の・・・
lvitem.iSubItem = 0; //<最初の列っと

lvitem.stateMask = LVIS_SELECTED; //<「状態」は色々あるけど、今回は選択されているかどうかが知りたいの

char buffer_text[256]; //<おっといけねぇ
lvitem.pszText = buffer_text; //<「文字列」を取得するなら入れ物がねぇとな
lvitem.cchTextMax = sizeof(buffer_text); //<APIたんはバカだから、入れすぎないよう「文字列」の長さも指定っと

::SendMessage( hwnd_dialog, LVM_GETITEM, 0, (LPARAM)&lvitem ); //<APIたん、こいつで頼むよ
//ListView_GetItem( hwnd_dialog, &lvitem ); //またはこいつで

if( lvitem.stateMask & LVIS_SELECTED ); //おー入ってる入ってる
OutputDebugString( buffer_text ); //さんきゅう、APIたん

391 :デフォルトの名無しさん:04/11/10 15:37:01
わるい、間違えた
if( lvitem.state & LVIS_SELECTED );
OutputDebugString( buffer_text );

392 :デフォルトの名無しさん:04/11/10 17:07:52
フックに詳しい方、どうかお助けください!

やりたいことは特定ウインドウの低レベルキーボードフックです。
つまり左右のShiftやCtrlキーの区別を取れるフックがしたいのです。
しかしどうやってもスレッド単位のフックができません。
下のように記述(hwndはフックしたいウインドウのハンドルです)しても
hookには0しか返ってきません。つまりフック失敗です。

hook = SetWindowsHookEx(WH_KEYBOARD_LL, HookProc, GetWindowLong(hwnd, GWL_HINSTANCE), GetCurrentThreadId());

しかしシステム単位のフックならできるのです。
下のように書くと、hookには0以外の値が帰ってきて、OS全体がフックできてしまいます。

hook = SetWindowsHookEx(WH_KEYBOARD_LL, HookProc, GetWindowLong(hwnd, GWL_HINSTANCE), NULL);

しかしやりたいのはスレッド単位の低レベルキーボードフックなのです。
低レベルキーボードフックというのは、システム単位でしかできないものなのでしょうか?
※ちなみに低レベルじゃないキーボードフックの場合はスレッド単位でもできました。




393 :sage:04/11/10 17:18:27

フックプロシージャが現在のプロセスに関連付けられているコード内に置かれているときは、
NULLを指定しなければなりません

394 :388:04/11/10 17:20:05
>>389
拡張スタイルは使ってないし、
メニューは折り返しが起きるほど多くは無いです…

395 :393:04/11/10 17:21:54
↑途中
SetWindowsHookExの3番目の引数のこと

396 :デフォルトの名無しさん:04/11/10 17:29:55
>>395
ありがとうございます。
インスタンスハンドルをNULLですよね?
しかしやってみましたがダメでした。

自己レスですみませんが、どうも低レベルキーボードフックはやっぱり
グローバルじゃないとできないみたいです。
GetLastErrorで1429が返ってきたのですが、
その説明が、

ERROR_GLOBAL_ONLY_HOOK
This hook procedure can only be set globally.

ということでした。
道理で、ネットを検索してみてもグローバルな例しか見つからない訳です。
失礼しました。

397 :393:04/11/10 17:52:19
VS6付属のMSDNには
>WH_KEYBOARD_LL スレッド、または、システム
となっているが、MSDN最新 (microsoft.com)では
>WH_KEYBOARD_LL グローバルのみ
となってる。MSDNだけでも最新版使えってことか。

398 :デフォルトの名無しさん:04/11/10 18:46:25
>>388
> Note that you cannot specify the WS_OVERLAPPED style.
って書いてあるので、WS_OVERLAPPEDは指定しない方がいいのでは?

399 :388:04/11/10 19:16:07
>>398
ありがとうございます。解決しました。
その文、Web上のMSDN Libraryには載ってますね…
VC++6のやつには載ってなかったんでorz

400 :デフォルトの名無しさん:04/11/10 19:32:05
文字列入力ダイアログを表示させるAPIって無かったでしたっけ?

401 :ほんたま:04/11/10 19:34:29
みなみなさまがた〜、GetLocalTimeを使って時間を取得すると、SYSTEMTIME構造体にセットされますが、
マニュアルを見るとSYSTEMTIME構造体のメンバは、



曜日




ミリ秒

と書いてあるんです。
でも実際にSYSTEMTIME構造体にアクセスして先頭から順番に値を表示してみると、


曜日




ミリ秒
0?(不明)

の順番にメンバが並んでいるのが正しいのではないかと思うんです。
そこんとこどうなっているのかお聞きしたいんですが…?
教えてくだされ〜♪

402 :ほんたま:04/11/10 19:52:32
みなみなさまがた〜、いまSYSTEMTIME構造体の先頭に印をつけて、バイナリファイル見てみたところ、
何故かSYSTEMTIME構造体の先頭番地より2バイト前のアドレスを読むと、年が正しく取得されることが判明しました!
だからメンバの並び方はマニュアル通りで良かったのですが…
みなみなさまがた〜、何故SYSTEMTIME構造体の先頭番地より2バイト前から値がセットされるのでしょうか?
教えてくだされ〜♪

403 :デフォルトの名無しさん:04/11/10 19:54:35
お前のやり方がおかしいだけだろ。

404 :ほんたま:04/11/10 20:07:44
>>403
つーか実際にはSYSTEMTIME構造体の構造はこう↓なってるんではないかと…
予備領域


曜日




ミリ秒

でGetLocalTime(&SYSTEMTIME)と呼び出すと、自動的にSYSTEMTIME+2番地から値がセットされていくんではないかと…
どうでしょうか〜みなみなさまがた〜♪


405 :デフォルトの名無しさん:04/11/10 20:11:35
バカすぎて笑える。

406 :ほんたま:04/11/10 20:19:39
あるいはSYSTEMTIME構造体はPREバイト付きの構造体なのかもしれんです…
PREバイトというのは、おりがいま思い付いた概念で、構造体の先頭番地の前に何バイトかの領域を持っていて、
最初のメンバはそこから始まるようにしたもののことを言う。
マイクロソフトのことだから、PREバイト付きの構造体という概念を持っていてもおかしくはない…

407 :デフォルトの名無しさん:04/11/10 20:21:48
つまらんネタだなぁ

408 :デフォルトの名無しさん:04/11/10 20:22:37
winbase.hからのコピペ

typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;

409 :デフォルトの名無しさん:04/11/10 20:23:21
コテハンってこんな奴ばっかりだな…

410 :デフォルトの名無しさん:04/11/10 20:27:02
>>402
これって何かのコピペ?

411 :デフォルトの名無しさん:04/11/10 20:37:02
wYearもWORDなのか。
65536年問題が心配だな

412 :ほんたま:04/11/10 20:45:02
>>408
最初のwYearはDWORDってことはないか?
そうすればすべてがつじつま合うんだが…
ドキュメントの書き間違いかもしれんぞ。

413 :デフォルトの名無しさん:04/11/10 20:54:01
そう思うんならヘッダ見れ

414 :デフォルトの名無しさん:04/11/10 21:01:22
> でも実際にSYSTEMTIME構造体にアクセスして先頭から順番に値を表示してみると、
アクセスの仕方に問題がある悪寒。

415 :デフォルトの名無しさん:04/11/10 21:14:47
>>406
かもしれんじゃなくて実際にあるのだが?
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/csref/html/vcwlkstructstutorial.asp

416 :デフォルトの名無しさん:04/11/10 21:19:07
ATOMってなんですか?

417 :デフォルトの名無しさん:04/11/10 21:20:30
アライメント

418 :416:04/11/10 21:21:45
あ〜すみません、猫のところに説明がありました。探し方が悪かった・・・。
でも、イマイチなににつかうかわからない・・・。

419 :デフォルトの名無しさん:04/11/10 21:37:13
>>416
グローバルアトムは比較的簡単にプロセスをまたぐ文字列のやり取りに使える。
ウィンドウクラスのアトムはCreateWindow(Ex)でクラス名の文字列を指定するよりこっちを使う方が俺は好き。
ローカルアトムは……、何に使えばいいんだ?2バイトケチるためか?

420 :デフォルトの名無しさん:04/11/10 22:42:37
>>411
doubleでも使っとけ、クソが。

421 :デフォルトの名無しさん:04/11/10 22:57:34
2038年問題ってSYSTEMTIMEだと起きないの?

422 :デフォルトの名無しさん:04/11/10 22:57:37
浮動小数点では解決しない(RFC2550)

423 :デフォルトの名無しさん:04/11/10 23:15:57
ビットマップの平均色を求めるにはどうすればいいですか?
例えば1*2のビットマップで(255,255,255)と(0,0,0)なら(128,128,128)みたいな感じです。
正確さよりも処理の速さを優先したいです。

424 :デフォルトの名無しさん:04/11/10 23:24:24
自分で考えろ

425 :デフォルトの名無しさん:04/11/10 23:24:46
>>423
1. MMX 命令で自前の処理を書く
2. Intel の IPP 等を買ってきて使う
3. DirectX のテクスチャにして、ミップマップの自動生成機能を利用する
どれでも適切なやり方でどうぞ。

426 :ほんたま:04/11/10 23:41:48
>>414
>アクセスの仕方に問題がある悪寒

おみゃ〜はどうせ、マイクロソフトのコンパイラが定義してくれてる値を使って、SYSTEMTIME->wYearとかSYSTEMTIME->wMonthみたいなアクセスの仕方しか経験ないだろ?
だからwYearが何番目のメンバかwMonthが何番目のメンバかなんて考えたこともないだろ?
そういうのは隠蔽されているからな w♪
ところがおりは違う。
おりはマシン語を直接使っているので、wYearが何番目のメンバかwMonthが何番目のメンバかを知らないと、プログラミングできないわけだ。
だから[SYSTEMTIME][SYSTEMTIME+2]というようなアクセス方法を使う。
ところがメンバが2バイトずつ前にずれていることが判明したので、疑問に思ったわけだよ。
まあ、これはプログラミングにおける最高度の超絶技巧なので、カプセル化されたプログラミングしか知らないおみゃ〜には想像もつかないだろうがな…♪
自分じわかる?

427 :デフォルトの名無しさん:04/11/10 23:50:53
釣れますか?

428 :デフォルトの名無しさん:04/11/10 23:54:03
効果音なら、midiOutShortMsg より、sndPlaySoundの方が負荷は少ないのですか?



429 :414:04/11/11 00:05:32
>>426
長レスに敬意を表して、釣られてみよう。残念ながらハズレ。
さすがにフルアセンブラはご無沙汰だが、今でも一部インラインで組むことくらいはある。
ていうか、コンパイラしか使ってなくてもデバッグの時にアセンブルソースくらい見ると思うけど。

それはともかく、
> マシン語を直接使っているので
↑このあたりの表現が気になった。実は偉大なお方?

430 :ほんたま:04/11/11 00:07:30
おみゃ〜ら、すまん、全面的におりの勘違いだったよ^^;
というのもおりは、[SYSTEMTIME]の先頭アドレスの値をまずECXレジスタに読み込み、その値を16ビット右シフトして、次にCXレジスタの値を作業用のバッファにセットしていたんだよ。
なぜ右シフトしたかといえば、ファイル表現で考えてECXレジスタの上位16ビットに先頭アドレスの値が、下位16ビットに次のアドレスの値がはいっていると勘違いしていたのよ。
とろこがこれは逆だったんだな…!
だから右シフトするのをやめて、そのままCXレジスタの値をセットしたら、うまくいったというわけよ。
やっぱPREバイトとかドキュメントが書き間違ってるとかなかったよ。
マイクロソフトのドキュメントは正しかったよ…。
おりとしたことが、とんだミステイクだったよ♪
おみゃ〜らよ、自分じすまんな…どうじ?

431 :414:04/11/11 00:10:22
やはりエンディアンネス絡みの問題だったか。思った通りじゃねーの。

432 :デフォルトの名無しさん:04/11/11 00:14:03
リトルエンディアンも知らずに、マシン語云々言ってたのか。
もっと基本から勉強しろよ

433 :デフォルトの名無しさん:04/11/11 00:17:40
StretchBltで1x1ピクセルに

できたらいいな

434 :デフォルトの名無しさん:04/11/11 08:53:24
>>423
>>425

・・・・

全ピクセル足して、面積で割るだけなのに。小学生でもできるぞ。

435 :デフォルトの名無しさん:04/11/11 10:41:57
リストビューで項目の編集をできるようにしたいのですが
1列目しか項目を選択及び編集ができず、2列目以降は選択もできない状態です。
以下、ソースです・・・。原因わかります?
case WM_NOTIFY:
if ((int)wp == LISTVIEW) {
lvinfo = (LV_DISPINFO *)lp;
switch (lvinfo->hdr.code) {
case LVN_BEGINLABELEDIT:
hEdit = ListView_GetEditControl(hList);
break;
case LVN_ENDLABELEDIT:
GetWindowText(hEdit, buf, sizeof(buf));
ListView_SetItemText(hList, lvinfo->item.iItem, 0, buf);
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
col.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
col.fmt = LVCFMT_LEFT;
col.cx = 100;//列の幅 ピクセル単位
col.pszText = TEXT("社員ID");
col.iSubItem = 0;

ListView_InsertColumn(hList, 0 , &col);
int z;
z = 1;
col.iSubItem = z;
col.pszText=TEXT("氏名");
ListView_InsertColumn(hList, z , &col);
z++;

436 :デフォルトの名無しさん:04/11/11 11:52:03
>>434
だからそれを「速くやる」方法について話してるんだろ。

437 :デフォルトの名無しさん:04/11/11 12:17:10
>>434
今の小学生は3桁以上の計算は出来ません。

438 :デフォルトの名無しさん:04/11/11 12:57:03
>>436
除算は最後の一回だけだし、
加算はループで足し算するんだが、普通に足すより速くはならんぞ。
乗算とか入らないなら、MMXも必要ない。
第一、こんな質問してくるレベルの人間にはそれで十分だ。

439 :デフォルトの名無しさん:04/11/11 13:00:44
>>438
なにひとりでカッカしてんの?

440 :デフォルトの名無しさん:04/11/11 13:02:37
435
リストビューは1列目のラベルしか編集できない。

441 :デフォルトの名無しさん:04/11/11 13:05:45
>>439
馬鹿か?それはお前の思い込みに過ぎんぞ。
この程度のことでカッカする方がどうかしている。
お前がこういう文章を書くときはカッカしている時だからといって、
他人までそうだと思わないことだ。


442 :デフォルトの名無しさん:04/11/11 13:06:57
>>441
何カッカしてんの?

443 :デフォルトの名無しさん:04/11/11 13:09:01
何にせよ技法の話だからスレ違い。
と言いたいが面白いのでもっとやれ

444 :デフォルトの名無しさん:04/11/11 13:11:00
>>435
編集は一列目だけ。
選択の方は、こんな感じで。
ListView_SetExtendedListViewStyle(_hWnd, LVS_EX_FULLROWSELECT);

>>442
そういうことにしたいのですね。勝手にそう思ってれば?

445 :デフォルトの名無しさん:04/11/11 13:11:50
>>438
見た感じ>>438>>423はだいたい同じレベルだと思うんだけど。
・どちらも平均とは何かについては知っている
・高速に処理する方法は知らない

446 :デフォルトの名無しさん:04/11/11 13:13:06
オモロイ w

447 :デフォルトの名無しさん:04/11/11 13:13:37
それはさておき、カラーの平均ってなんだろ。
RGB各プレーンそれぞれの単純平均だと赤とシアンの平均がグレイになるんだけど。
グレイであることが保証されてるなら単一プレーンだけの平均ですむし、
平均輝度とか平均彩度とか、何が要求されているのかよく判らんね。

448 :デフォルトの名無しさん:04/11/11 13:16:32
>>447
算術平均以外の平均なら、ほげほげ平均とかって明記するんじゃない?
ってのはともかく、アルゴリズム的には>>438の言うように足して割るのが最適だから、
あとは>>425の言うように実装手段でアレコレするしかない。

449 :デフォルトの名無しさん:04/11/11 13:16:53
>>445
全ピクセルの平均をとるなら、データスキャンして普通に加算するのが一番速い。
画像をロードした瞬間にわかるって言ってもいいぐらい。
今時のCPUなら、アセンブラ化してもほとんど変わらないよ。

450 :デフォルトの名無しさん:04/11/11 13:19:22
>>448
MMX使っても速くならんぞ?
テクスチャにするなんて論外だ。転送にめちゃくちゃ時間がかかる。
それともバイリニアで縮小画像を作ることを考えているのだろうか?

451 :デフォルトの名無しさん:04/11/11 13:19:38
>>449
今時のCPUはキャッシュミスの際のペナルティが(そうでない場合との比較で)大きいから、
メモリをスキャンするときにアセンブラでちゃんとプリフェッチを入れれば簡単に+10%位にはなるよ。

Intel Compiler とかなら勝手にやってくれるかもしれんが。

452 :デフォルトの名無しさん:04/11/11 13:20:49
ごく小さい領域の単純平均ならMMXつかえばRGB同時に計算できるとかあるけどな。
あとは精度落としていいならサンプル間引くぐらいしかないんじゃないか。

453 :デフォルトの名無しさん:04/11/11 13:22:59
>>451
そこまでの最適化を必要としている奴が、>>423みたいな質問よこすか?
「ここまでやって、これが限界でしょうか」というのなら、
極限までの最適化方法を教える努力をするけどね。

454 :デフォルトの名無しさん:04/11/11 13:27:43
>>452
>あとは精度落としていいならサンプル間引くぐらいしかないんじゃないか。
業務向けにマトモな高速化案キタ━━━━━━(゚∀゚)━━━━━━ !!
そういえば画像処理で画素間引いたりして高速化するのは定石だな・・

455 :デフォルトの名無しさん:04/11/11 13:27:54
>>452
整数「加減算」だけならMMXを使う必要はないって。
通常のアセンブラでも同時計算は可能。

間引くのは有効だけど、そもそも画像をメモリへロードする方が重いので、
そこまで気にするのがちょっと疑問。

456 :デフォルトの名無しさん:04/11/11 13:28:25
>>453
なんでそんなに偉そうなの?

457 :デフォルトの名無しさん:04/11/11 13:29:02
>>456
偉いから。

458 :デフォルトの名無しさん:04/11/11 13:35:42
>>423
これが Win32 API スレであることを考えると、たぶん真っ当な答えは

・Bitmapがある程度大きい場合には、GetDIBits 等で DIB として取り出し、
 ピクセルフォーマットに従ってメモリ値を読み出して平均をとる。
 (可能であれば最初から DIB として画像を保持しておくべき)
・Bitmapが 1x2 とか小さい場合には、GetPixel で RGB 値を取り出して平均をとる。
・"ビットマップ"というのが画像ファイルのことであれば、LoadImage で DIBSection にして、
 GetObject で DIB と BITMAPINFOHEADER を取得してアレコレする。

っていうような感じなんだろうなぁ。

459 :デフォルトの名無しさん:04/11/11 13:43:03
googleったらこんなの出てきた。
ttp://www.emit.jp/prog/prog_b.html

> v2 = (v0 & v1) + (((v0 ^ v1) & 0xfefefefe) >> 1);

なんでこれで平均がでるの?ワケワカラン

460 :デフォルトの名無しさん:04/11/11 13:44:14
ここでの質問して良いのか疑問ですけど、どこがいいのかわかりません
でしたのでお願いします。

Windows2000やXPなんかでは、LANケーブルが抜けている場合
タスクトレイにネットワークのアイコンが出てLANケーブルが
抜けていることがわかりますが、プログラム上からLANケーブルが
抜けていることを特定する方法はないでしょうか?



461 :デフォルトの名無しさん:04/11/11 13:51:06
MessageBox(NULL, "LANケーブルは抜けていますか?", "質問", MB_YESNO);

462 :デフォルトの名無しさん:04/11/11 13:52:49
C = 繰り上がりがある場合の繰り上がり (v0 & v1) <<1
S = 繰り上がりを無視した加算結果 (v0 ^ v1)
C + S は足すと普通の加算になる。右に1シフトする(2で割る)と平均になる。
(S は各バイトの最下位ビットが立っている可能性があるから、0xfefefefeでマスクしておく)

精度は低く速度も遅いがわかりやすい代替物は、
((v0 >> 1) & 0x7f7f7f7f) + ((v1>>1) & 0x7f7f7f7f)。

463 :デフォルトの名無しさん:04/11/11 14:17:40
>>459
>>462
目からウロコが10枚くらい出た

464 :デフォルトの名無しさん:04/11/11 14:17:50
>>462
>>1 クリックしてしもた


465 :459:04/11/11 14:23:55
>>462
サンクス!なんとなくわかった希ガス



466 :デフォルトの名無しさん:04/11/11 14:51:48
>>462
COBOL 出る前ってこんなんばっか見たいだった気がする。なつかしい。

467 :デフォルトの名無しさん:04/11/11 15:06:01
とてつもないジジイが紛れ込んでないか?

468 :デフォルトの名無しさん:04/11/11 15:22:47
>>460
このスレのどこかに同じような質問なかったっけ?

469 :460:04/11/11 15:41:29
>>468
ほんとですか〜。
探してたのですが見つけきれませんでした。
もし思い出されたらご一報お願いします。


470 :デフォルトの名無しさん:04/11/11 16:26:04
WinXP SP2を適用後に、RegSaveKeyがエラーになってしまいます。
戻り値は 87「パラメータが間違っています」となります。
SP1以前は正常に動作していました。
SeBackupName 特権は取得しています。

471 :デフォルトの名無しさん:04/11/11 17:55:50
>>460
ipconfig で分かる


472 :デフォルトの名無しさん:04/11/11 17:57:41
小手先でいじるよりも
SetStretchBltMode(hdc,HALFTONE);
して
StretchBltしたほうが速いと思う。
DDBならハードウェアアクセラレーションが効くかもしれない。

473 :デフォルトの名無しさん:04/11/11 18:08:41
ボタンの上にマウスカーソルが来た時に来るメッセージは無いでしょうか。
if(HIWORD(wParam) == BN_XX)
みたいなのを探していたのですがありませんでした。

474 :デフォルトの名無しさん:04/11/11 18:09:43
WM_MOUSEHOVER


475 :473:04/11/11 18:13:32
>>474
それでできそうです。ありがとうございました。

476 :460:04/11/11 18:46:12
IPHlpApi.h を使えば ネットワークのいろいろな情報が取得できるけど
Cable Disconnected って直接的に取得は出来ない気がします。
何を持って Cable Disconnected 状態なのか特定できないものでしょうか?

これってWin32APIよりMFCかな・・・

477 :デフォルトの名無しさん:04/11/11 19:12:08
USBオーディオデバイスに直接アクセスしたいのですが、GUIDを知る方法が分かりません。
ヒューマンインターフェースデバイス(HID)ではHidD_GetHidGuidでゲットしたのですが…
御教示おねがいします。

478 :デフォルトの名無しさん:04/11/11 20:15:16
現在キューに入っているメッセージではなくて
Windowsシステムにどのようなメッセージが用意されているのか
MSDNで探したいのですが、
urlないし検索のためのキーワードを教えてください。


479 :デフォルトの名無しさん:04/11/11 20:18:08
>>478
ソースもらうしかねえだろな
あとアプリ定義のメッセージもあるわけだが
それはどーするんだ?

480 :478:04/11/11 20:18:57
http://www.geocities.co.jp/SiliconValley-Cupertino/5872/Message/WM/index.html

すみません、上にありました。
しかし178個って、これで全てなんでしょうか。
なんだか少ないように思ったのですが。

481 :デフォルトの名無しさん:04/11/11 20:30:45
全てじゃないです。

482 :デフォルトの名無しさん:04/11/11 20:32:13
ボタンに文章ではなくて、
ビットマップなどの絵を表示する方法を教えてください。

483 :デフォルトの名無しさん:04/11/11 20:35:42
>>480
BM_ とか CB_ みたいに WM_ で始まらないのもいっぱいあるぞ

484 :デフォルトの名無しさん:04/11/11 21:06:50
>>460
>>89
>>91

485 :デフォルトの名無しさん:04/11/11 21:17:35
>>482
BS_BITMAPとかBS_ICON、もしくはBS_OWNERDRAW

486 :デフォルトの名無しさん:04/11/11 21:32:59
そういや、MSが用意してるメッセージで、WM_USERとか使うのが何個かあったよね
自作メッセージって、どの辺の範囲使っておけば、MSのライブラリと競合しないものなの?
自作メッセージって結構使うんだけど、新しくコントロール追加した時に競合しないか心配だったりする

487 :デフォルトの名無しさん:04/11/11 21:36:17
>>485
ありがとうございます。調べてみます。

488 :デフォルトの名無しさん:04/11/11 21:40:33
>>486
WM_APP以降を使っておけば、とりあえず競合はしないので安心。

489 :デフォルトの名無しさん:04/11/11 21:40:55
WM_APP + 0x3FFFまで

490 :デフォルトの名無しさん:04/11/11 21:44:13
>>488>>489
どもです。
既に作ったプログラムを直すのは面倒ですが、次からはそれ以降で作ります

491 :デフォルトの名無しさん:04/11/11 21:50:56
ところでWM_USERからは何に今は使うの?

492 :デフォルトの名無しさん:04/11/11 22:01:13
自作のカスタムコントロールとかかな?

493 :デフォルトの名無しさん:04/11/11 22:03:33
http://www.google.co.jp/search?btnI=I&q=MSDN+WM_APP

494 :デフォルトの名無しさん:04/11/11 22:35:40
>>492
3rdParty製の

495 :ごめん、途切れた:04/11/11 22:36:15
コントロールが使ってた肝する。

496 :423:04/11/11 22:37:27
みなさん貴重な意見をありがとうございます。
お察しの通り私は知識も経験も少ない初心者なのでとてもためになりました。
デジカメサイズのビットマップ200枚ほどの平均色を求めたかったので速さにこだわっていました。
適当に間引きながら足し算で求める方法でアプローチしてみます。

497 :デフォルトの名無しさん:04/11/11 22:39:11
デジカメのデータだとファイルI/OとJPEGデコーダで律速されそうだが。
IJLってもう無料で入手不可能なんだったか?

498 :デフォルトの名無しさん:04/11/11 22:40:22
ダイアログが表示されているときに押されたボタンの仮想キーコードを
表示させたいんだけど、どうやって押されたキーのコード取得するんですか?

499 :デフォルトの名無しさん:04/11/11 22:40:45
>>496
画像の色計算より
読み出しとかにかかる時間のほうが支配的だと思うから
速度気にしなくていいんじゃないかな。

500 :デフォルトの名無しさん:04/11/11 22:56:22
200枚って、オーバーフローしないサイズ?

501 :デフォルトの名無しさん:04/11/11 23:04:54
0xfefefeの話題が出てたので、余計な補足を。
((a++&0xf8f8f8)>>3)+((a++&0xf8f8f8)>>3)+((a++&0xf8f8f8)>>3)+((a++&0xf8f8f8)>>3)+((a++&0xf8f8f8)>>3)+((a++&0xf8f8f8)>>3)+((a++&0xf8f8f8)>>3)+((a++&0xf8f8f8)>>3)
で、int32 *a のRGBデータの8点平均。
2のべき乗ならこのやりかたがはやいよー。

502 :501:04/11/11 23:08:26
まちがえた。
シフトは足した後で一括でやろう。

503 :デフォルトの名無しさん:04/11/11 23:18:52
a[?]使った方がイイかも?

504 :デフォルトの名無しさん:04/11/11 23:24:21
>>501
些細な高速化の割には精度ガタ落ちだから、素直に>>459を7回やったほうが良いような気がする・・例↓

#define Ave2(a,b) (((a) & (b)) + ((((a) ^ (b)) & 0xfefefefe) >> 1))
#define Ave4(a,b,c,d) Ave2(Ave2(a,b), Ave2(c,d))
#define Ave8(a,b,c,d,e,f,g,h) Ave2(Ave4(a,b,c,d), Ave4(e,f,g,h))


505 :501:04/11/11 23:30:34
>>504
ごもっとも。
でも、些細な高速化に興味が有るので許してください。

506 :デフォルトの名無しさん:04/11/11 23:38:32
>>423も、とりあえず満足したようだし、
スレ違いの話題はこの辺に

続きをやりたければ、画像処理スレか最適化スレにでもどぞ

507 :501:04/11/11 23:40:58
>>506
BMPの話題はWin32だよー。
でも、確かにこの辺にしておくのが良いですね。

508 :デフォルトの名無しさん:04/11/11 23:45:55
>>507
BMP特有の操作じゃないだろ?

509 :501:04/11/11 23:47:48
この辺に。
ね。

510 :501:04/11/12 00:30:30
進行を止めてしまった。
申し訳ないです。
悪気は無いんです。
許してね。

遠慮せずに書き込んでねー。

511 :デフォルトの名無しさん:04/11/12 01:43:05
最小化してから再び最大化したときに、
親ウィンドウの部分は再描画されるのですが、
子ウィンドウの部分は真っ白になってしまいます。
子ウィンドウも描画させるにはどうしたら良いでしょうか。

512 :デフォルトの名無しさん:04/11/12 01:43:50
SDIです。

513 :デフォルトの名無しさん:04/11/12 01:51:20
>>512
OnDrawとかOnPaintで描いてないとかそんなんじゃ

514 :デフォルトの名無しさん:04/11/12 02:06:59
MFC使わずにSDKだけでやっています。
汚いコードですが、こんな感じです。

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 static HWND hChild01;
 PAINTSTRUCT ps;
 HDC hdc, hBuffer;
 static HBITMAP hBit01;
       switch (msg)
       {
  case WM_CREATE:
 hBit01 = LoadBitmap(((LPCREATESTRUCT)lParam)->hInstance, (LPCTSTR)IDB_BITMAP1);
 MyRegisterClassDefault(((LPCREATESTRUCT)lParam)->hInstance, Child01, szChild01);
 hChildOL01 = CreateMyWnd(IDhChild01, hWnd);
 ShowWindow(hChild01, SW_SHOW);
 break;
  case WM_PAINT:
 hdc = BeginPaint(hWndOpen, &ps);
 hBuffer = CreateCompatibleDC(hdc);
 SelectObject(hBuffer, hBitMAP1);
 BitBlt(hdc, 0, 0, 800, 600, hBuffer, 0, 0, SRCCOPY);
 DeleteDC(hBuffer);
 EndPaint(hWndOpen, &ps);
 break;
       }
(つづく)

515 :デフォルトの名無しさん:04/11/12 02:07:55
(つづき)
LRESULT CALLBACK ChildProc(HWND hChild01, UINT msg, WPARAM wParam, LPARAM lParam)
 HDC hdc, hBuffer;
 PAINTSTRUCT ps;
 static HBITMAP hBitKuro;
 switch(msg){
case WM_CREATE:
 hBitKuro = LoadBitmap(((LPCREATESTRUCT)lParam)->hInstance, (LPCTSTR)IDB_Kuro);
 break;
case WM_PAINT:
 hdc = BeginPaint(hChild01, &ps);
 hBuffer = CreateCompatibleDC(hdc);
 SelectObject(hBuffer, hBitKuro);
 BitBlt(hdc, 0, 0, 200, 120, hBuffer, 0, 0, SRCCOPY);
 EndPaint(hWndOL01, &ps);
 break;
}


プログラムを始めて3週間なのですが、
いきなりMFCを覚えたほうが楽でしょうか?


516 :デフォルトの名無しさん:04/11/12 03:06:41
MFCのソースを読めばよし。


517 :デフォルトの名無しさん:04/11/12 03:39:12
>>498 はスルーでつか?

518 :デフォルトの名無しさん:04/11/12 03:49:04
>>517
あー WM_GETDLGCODE じゃだめか。


519 :デフォルトの名無しさん:04/11/12 03:52:42
WM_KEYDOWNのwParamじゃだめなん?

520 :デフォルトの名無しさん:04/11/12 03:55:20
>>515
MFC覚えた方が楽かも知れんが、そのコードを理解しながら
書いたんなら、そのまま一本位 API でプログラム書いてみたら。
基礎を勉強することは悪いことではない。


521 :デフォルトの名無しさん:04/11/12 04:03:14
>>515
うっかり消しただけかもしらんが、ChildのhBufferをDeleteしてないよ。
それによってhBitKuroのSelectが2回目以降失敗しているのではないかな?

522 :デフォルトの名無しさん:04/11/12 04:17:12
左右にスクロールできて、複数のボタンを配置できるスライダを作りたいと思い、
カスタムコントロールについて調べてみたんですが、これは
・所定の位置にウィンドウを作る
・ボタン、スライダのグラフィックを自作する
・カスタムコントロール用のプロシージャにて、マウスクリックのメッセージを受け取ったら
 その時の位置に応じて動いた場合の動作を決定する。つまりボタンの位置を常に把握し
 位置関係の判定を全部やらなくてはならない
という方針で良いのでしょうか?もっと効率良い方法があるのならご教授頂ければ幸いです。

イメージとしてはこんなカンジです。
・スライダをクリックしてドラッグした場合:
+----+----+----+----+----+----+----+----+
0 5 10 15 20 25 30 35 40
-+----+----+----+----+----+----+----+----
5 10 15 20 25 30 35 40
(左へ4メモリスクロールさせた場合。右に隠れていた4つの目盛りが現われる)
・ボタンをクリックしてドラッグした場合:(ボタン:*とする。複数存在可能)
+----+----+--*-+----+-*--+--*-+----+----+
↑を左へクリック&ドラッグした場合
+----+-*--+----+----+-*--+--*-+----+----+
     ↑ここへ動く

523 :デフォルトの名無しさん:04/11/12 04:23:31
猛烈にずれた…orz
+----+----+----+----+----+----+----+----+
0   5   10  15  20  25   30   35  40
-+----+----+----+----+----+----+----+----
 5   10   15  20  25   30   35  40

+----+----+--*-+----+-*--+--*-+----+----+
          ↑を左へクリック&ドラッグした場合
+----+-*--+----+----+-*--+--*-+----+----+
     ↑ここへ動く

今度こそうまくいくかな(´・ω・`)

524 :デフォルトの名無しさん:04/11/12 04:55:51
その方針でいいです

525 :522-523:04/11/12 05:21:18
>>524
ありがとうございました。面倒そうだなぁ…(汗)

526 :デフォルトの名無しさん:04/11/12 09:02:16
スレッドについて質問
以下を実行する:
int main(void) {
DWORD dwThreadId;
LPTHREAD_START_ROUTINE lpStartAddress = ThreadFunction;
for ( DWORD i = 0 ; i < 2; i++ ) {
::CreateThread(
NULL,// セキュリティ
0,// スタックの大きさ
lpStartAddress,// 開始する住所
&i,// パラメター
0,// スレッドの状態
&dwThreadId// スレッドID
);
}
}
// スレッド函数
DWORD ThreadFunction(LPVOID pParameter){
DWORD* pdwInteger = (DWORD*) pParameter;
TRACE( "%u\n", *pdwInteger );
return 0;
}
これで,
ThreadFunction(0)
ThreadFunction(1)
が実行されることを期待したいけど,なぜか
ThreadFunction(1)
ThreadFunction(1)
が実行される.
どうしてなん?


527 :デフォルトの名無しさん:04/11/12 09:05:21
>>526
CreateThread() した瞬間に新しいスレッドが走り出すわけではないか
ら。つーか、最近同様の質問を見た覚えがあるぞ…



528 :526:04/11/12 09:07:11
>>527

スレッドをどのタイミングで走るわけ?

また,俺の意図どおりに動かすにはどうしたらええん?

529 :デフォルトの名無しさん:04/11/12 09:15:20
知ったこっちゃねえ

530 :デフォルトの名無しさん:04/11/12 09:16:11
>>528
最初のスレッドが情報を取得したことを親スレッドに何らかの方法で通知する。
親スレッドはそれを受けてから次のスレッドを起動する。

531 :デフォルトの名無しさん:04/11/12 09:17:28
>>520
ありがとうございます。頑張ってみます。
>>521
が正解でした。
各入門書や入門ページで口を酸っぱくして言われている、
「必ずGDIオブジェクトを削除しなければならない」
の意味がやっと分かりました。


532 :デフォルトの名無しさん:04/11/12 09:21:55
>>526
> &i,// パラメター

の説明をしてもらおうか。

>>531
> 「必ずGDIオブジェクトを削除しなければならない」
> の意味がやっと分かりました。

たぶんまだ分かってないと思う。

533 :デフォルトの名無しさん:04/11/12 10:20:31
>>528
作ったスレッドが動き出すのは、少なくとも、最初のコンテキストスイッ
チよりは後だろうよ。

そもそも、自動変数のアドレスをスコープを越える可能性のある関数に
渡しちゃダメでしょ。

一番簡単なのは、
CreateThread:
&i,==>reinterpret_cast<void*>(i),

ThreadFunction:
TRACE( "%u\n", *pdwInteger );
==>TRACE("%d\n", reinterpret_cast<int>(pParameter));


534 :デフォルトの名無しさん:04/11/12 12:48:41
>>501
そのコードは移植性ないと思うんだが
VC++だとインクリメントの順番が副作用完了点を挟まなくても
別途保証されてたりするのか?

535 :デフォルトの名無しさん:04/11/12 12:53:02
>>534
されてないけど、501みたいなへたれコードは誰も書かないから問題ないよ。
遅いし。

536 :デフォルトの名無しさん:04/11/12 13:31:40
いつもお世話になっております
UpdateLayeredWindowに関する質問です

デスクトップマスコットのようなウィンドウを
UpdateLayeredWindowを使って描画しています
αチャネルを使って透明化する部分は全く問題ないのですが、

既に配置済みのボタンやコンボボックスが
UpdateLayeredWindowで指定したイメージで上書きされてしまい、表示されずに困っています
(実際、配置はされていて、マウスイベントなどは問題なく処理できます)

最終手段として、
コントロール以外をカラーキーで透明化したウィンドウと
イメージをαチャネルで透明化したウィンドウを2枚重ねて動かそうと考えましたが、
他によい方法があるのではないかと思い投稿しました

良い方法をご存知の方がいらっしゃいましたら、よろしくお願いします

537 :デフォルトの名無しさん:04/11/12 13:35:43
よく分からんがレイヤードウィンドウにコントロールを子ウィンドウとして配置してるってことか?

538 :デフォルトの名無しさん:04/11/12 13:56:46
>>536
UpdateLayeredWindow使ったことないけど
イメージの上にコントロールにWM_PRINT送って描画してもらい、UpdateLayeredWindowするとか。
コントロールがクリックされたら、そのイメージを作ってUpdateLayeredWindowしなきゃならなそうだけど。

539 :デフォルトの名無しさん:04/11/12 14:43:14
ある領域に(CreateWindowで作成した領域<TEXT(static)>)に
小さな子ウィンドをたくさん作成し、領域をはみ出るものについては
スクロールバーを出すことで対応したいと思っているのですが、
今、現在、ただ領域に子ウィンドウをたくさん作成すると
領域をはみ出てしまいます。
領域にスクロールバーを作ることはできたのですが・・・。

いい方法ありますでしょうか?

540 :デフォルトの名無しさん:04/11/12 14:45:03
>>539
その領域を別Windowにして貼り付ける。

541 :デフォルトの名無しさん:04/11/12 14:49:02
その前に作文力をなんとかしろ

542 :デフォルトの名無しさん:04/11/12 14:55:16
>>539
WS_CLIPCHILDREN

543 :デフォルトの名無しさん:04/11/12 15:37:40
レスありがとうございます。WS_CLIPCHILDRENを指定しましたらうまく行きました。
水平スクロールバーをつけちゃったりなんかしてみたのですが
スクロールバーが移動しません。
最後の質問にしますのでよろしくお願い致します
seru_hyouji_ryouiki = CreateWindow(
TEXT("STATIC"),TEXT("") ,
WS_CHILD | WS_VISIBLE | WS_BORDER |WS_VSCROLL |WS_CLIPCHILDREN,
100,150,
700,300,
hwnd,(HMENU)SERU_HYOUJI_RYOUIKI,
((LPCREATESTRUCT)(lp))->hInstance, NULL
);


scr.cbSize = sizeof(SCROLLINFO);
scr.fMask = SIF_PAGE | SIF_RANGE;
scr.nMin = 0;scr.nMax = 9;
scr.nPage = 2;

SetScrollInfo(seru_hyouji_ryouiki , SB_HORZ , &scr , TRUE);
scr.fMask = SIF_POS;


544 :ほんたま:04/11/12 20:16:41
>>482
>ボタンに文章ではなくて、
>ビットマップなどの絵を表示する方法を教えてください。

文章?ボタンに小説書いてんの?

545 :デフォルトの名無しさん:04/11/12 20:25:00
いけず

546 :デフォルトの名無しさん:04/11/12 21:53:32
>>543
水平スクロールバーはWS_HSCROLLだよね。
WM_HSCROLLメッセージは正しく処理してる?

547 :デフォルトの名無しさん:04/11/12 22:51:29
>>543
そのコード、続きはないの?
それだけだと範囲指定しただけで、位置を設定していないし。

548 :デフォルトの名無しさん:04/11/12 23:55:10
>534
あのコードはインクリメントの順番が保証されている事を要求しないと思うが。

549 :デフォルトの名無しさん:04/11/13 00:24:00
>>548
まとめてインクリメントされるとアボーン。

550 :デフォルトの名無しさん:04/11/13 00:31:31
そういう処理系もあるのか。
感謝。

551 :デフォルトの名無しさん:04/11/13 01:05:40
>>549
そんな処理系が有ったら恐い。
実例あるのか?

552 :デフォルトの名無しさん:04/11/13 01:12:33
つーか言語仕様的に式評価の前か後かに
まとめてインクリメントされるのでは?

int a = 1;
int b = (a++) + (a++) + (a++) + (a++);
だと b = 4 で

int a = 1;
int b = (++a) + (++a) + (++a) + (++a);
だと b = 20 になる。

553 :デフォルトの名無しさん:04/11/13 01:33:12
少なくとも C や C++ では、1つの式の中に副作用が発生する項目を
複数含んでいるコードの動作は未定義だったはずだよ。

554 :デフォルトの名無しさん:04/11/13 01:34:23
うちはb=15だった
未定義だな

555 :デフォルトの名無しさん:04/11/13 01:35:29
タイミングは未規定
結果の値が未定義

556 :551:04/11/13 01:40:04
>552
ほんとだ。
失礼しました。

557 :デフォルトの名無しさん:04/11/13 01:40:51
スレ違いだけど参考までに
ttp://www.kouno.jp/home/c_faq/c3.html

558 :デフォルトの名無しさん:04/11/13 02:05:09
とにかく >>501 のコードは全然ダメだろ
ポインタに&演算してるし

559 :552:04/11/13 02:11:45
スマソ、たしかに未定義でした。

560 :デフォルトの名無しさん:04/11/13 03:19:33
多重バッファ使った
waveOutWriteがうまくいきません。
バッファとバッファの間に、ノイズ(音切れ)が入るのです。
16個のバッファにデータをとりあえずロードさせ再生させても起こります。
バッファに書く速度が間に合ってないわけじゃないみたいです。

2個目以降のバッファは、メッセージ着てから再生では遅いのでしょうか?


とりあえず、ソースの部分貼り付けます。
1個目再生
::waveOutPrepareHeader(m_hWaveOut,&m_pWaveHdr[0],sizeof(WAVEHDR));
::waveOutWrite(m_hWaveOut,&m_pWaveHdr[0],sizeof(WAVEHDR));

while(1)Sleep(1); // とりあえず待機(本来は、随時バッファ読み込み)

MM_WOM_DONE メッセージで、

::waveOutUnprepareHeader(m_hWaveOut,&m_pWaveHdr[m_nRingCursor],sizeof(WAVEHDR));
m_nRingCursor = (m_nRingCursor+1) % m_dwRingBufferSize;
::waveOutPrepareHeader(m_hWaveOut,&m_pWaveHdr[m_nRingCursor],sizeof(WAVEHDR));
::waveOutWrite(m_hWaveOut,&m_pWaveHdr[m_nRingCursor],sizeof(WAVEHDR));


メッセージのコールバックは、関数タイプです。


561 :デフォルトの名無しさん:04/11/13 04:11:31
>>560
>2個目以降のバッファは、メッセージ着てから再生では遅いのでしょうか?

遅いよ。
用意したバッファは全部あらかじめ書き込んでおいて、
コールバックで使い終わったバッファに次のデータを用意して、
再び書き込む。

全部のデータを再生し終わるまで延々と繰り返す。
が、基本。
ちなみに、最低3個以上のバッファを作ることが推奨されているね。


562 :560:04/11/13 13:41:12
>>561
いけました。
Writeの内容解釈間違えてた。
Writeって、書き溜め(バッファ)できたんですね。
ありがとうございます。

563 :デフォルトの名無しさん:04/11/14 00:34:09
CreateWindow()のスタイルBS_OWNERDRAWでWM_MEASUREITEMが発生すると書いてあったのですが発生している気配がありません。
どうしてでしょう?

CreateWindow(
TEXT( "BUTTON" ),
TEXT( "" ),
WS_CHILD | BS_OWNERDRAW,
0, 0, 200, 100,
hWnd,
(HMENU)1,
hInstance,
NULL
);

......

switch( msg ){
case WM_MEASUREITEM:
MessageBox( hWnd , TEXT("aaa") , TEXT("bbb") , MB_OK );
break;
}

564 :デフォルトの名無しさん:04/11/14 00:41:25
とりあえずmessageboxを確認に使うのをやめなさい

565 :デフォルトの名無しさん:04/11/14 00:45:05
(0,0) の位置にあったウィンドウに、
以下の機能がついています。

・チェックボックス
・入力欄

入力欄のところに実行した瞬間、文字列を転送するプログ
ラムを考えているのですが、どんな関数が必要になってき
ますか?
WindowFromPoint()は必要になるだろうと思ったのですが、
それ以上がいくら調べても分かりません。
入力欄のコントロールIDを得る関数があればいいのかなぁ
とか、色々考えて検索ずっとしてるのですが、そんなのないし・・・

これから先、検討がつきません。
どなたかお助けを・・・ M(._.)m


566 :デフォルトの名無しさん:04/11/14 00:49:05
>>564
どのような、確認の方法がよいでしょうか?

567 :デフォルトの名無しさん:04/11/14 00:50:53
>>566
AllocConsole

568 :デフォルトの名無しさん:04/11/14 00:59:27
>>565
SetWindowText

って既出?


569 :お助けお願いm(_ _)m:04/11/14 01:29:03
どなたか詳しい方教えていただけないでしょうか?
WindowsXPではGetSystemMetricsで検出できるのですが、
Windows2000でシャットダウン中を検出する事は可能でしょうか?


570 :デフォルトの名無しさん:04/11/14 01:31:05
>>568
それ使おうと思ったんすけど、
入力欄のコントロールIDが、同じプログラム内で
作ったものじゃないんで、わかんないのが前提なんっす・・・
レスありがとう

571 :デフォルトの名無しさん:04/11/14 01:50:57
>>567
ありがとうございます。
先ほどのプログラムを下のように書き直してみました。
ほかのところでの文字の表示は成功したのですがやはりWM_MEASUREITEMのところは通っていないような気がします。
それともAllocConsoleの使い方が間違っているのでしょうか?

CreateWindow(
TEXT( "BUTTON" ),
TEXT( "" ),
WS_CHILD | BS_OWNERDRAW,
0, 0, 200, 100,
hWnd,
(HMENU)1,
hInstance,
NULL
);

AllocConsole();
hStdOutput = GetStdHandle( STD_OUTPUT_HANDLE );

......

switch( msg ){
case WM_MEASUREITEM:
WriteFile( hStdOutput , TEXT( "aaaa" ) , 4 , 0 , NULL );
break;
}


572 :デフォルトの名無しさん:04/11/14 02:10:55
>>571
CreateWindowの前にAllocConsoleしたほうがいいと思うけど。

ていうかBS_OWNERDRAWでそのメッセージが送られるってどこに書いてあるの?

573 :デフォルトの名無しさん:04/11/14 02:17:16
WM_DRAWITEMの間違いだったりして。イヤン

574 :デフォルトの名無しさん:04/11/14 02:23:44
コピペ。

BS_OWNERDRAW
オーナー描画ボタンを作成します。
オーナーウィンドウは、ボタンが作成されると WM_MEASUREITEM メッセージを受け取り、
ボタンの外観が変わると WM_DRAWITEM メッセージを受け取ります。
他のボタンスタイルと組み合わせることはできません。

575 :デフォルトの名無しさん:04/11/14 02:24:34
Win32 API プログラマーズリファレンスには、
オーナー描画ボタンを作成します。オーナー ウィンドウは、 ボタンが作成されるときに
WM_MEASUREITEMメッセージを受け取り、 ボタンの外観が変わったときにはWM_DRAWITEMメッセージを受け取ります。BS_OWNERDRAWスタイルは、 ほかのボタン スタイルと組み合わせることはできません。

と書いてあります。


576 :デフォルトの名無しさん:04/11/14 02:25:52
>>575
CreateWindowのBS_OWNERDRAWの説明です。

577 :デフォルトの名無しさん:04/11/14 02:40:51
俺のにはこれしか書いてない

BS_OWNERDRAW
Creates an owner-drawn button. The owner window receives a WM_DRAWITEM message
when a visual aspect of the button has changed. Do not combine the BS_OWNERDRAW
style with any other button styles.



578 :デフォルトの名無しさん:04/11/14 02:58:00
>>563
試してみたけど、うちの環境でも WM_MEASUREITEM は送られてこないっすよ。
WM_MEASUREITEM の説明にも、そのようなことは書いてないし…。

579 :デフォルトの名無しさん:04/11/14 02:58:34
>>565
やりたいことがよく分からないけど、
ウィンドウハンドルは WindowFromPoint() や ChildWindowFromPoint() で取得、
IDは GetDlgCtrlID() で取得するってのはだめっすか?

580 :デフォルトの名無しさん:04/11/14 02:59:04
>>569
WM_ENDSESSION で検出するのはだめっすか?

581 :デフォルトの名無しさん:04/11/14 04:58:37
メインウィンドウのようにタイトルバーや枠つきのエディットコントロール作りたいのですが教えてください

582 :デフォルトの名無しさん:04/11/14 05:29:43
>>579
う〜ん、なんとか成功させてお礼を言いたいとこだったけど、
もう今日は限界・・・合歓いっす。
レスありがとう。わずかな希望が見えた気がしたでつ。


583 :デフォルトの名無しさん:04/11/14 06:38:17
>>565
IDがなくともウィンドウハンドルがあれば十分だと思うが。

584 :デフォルトの名無しさん:04/11/14 07:23:12
>>569 以下は前にどっかで見たやつのコピペだけど
Windows 2000 ですが、実際にやって調べてみました。
HKCR\Software\Microsoft\Windows\CurrentVersion\Explorer
の Reason Setting と Shutdown Setting が変化するようです。
(どちらも DWORD 値)

シャットダウン
 Shutdown Setting=0x00000002
 Reason Setting=0x00000005
再起動
 Shutdown Setting=0x00000004
 Reason Setting=0x00000005
ログオフ
 Shutdown Setting=0x00000001
 Reason Setting=0x00000000

ちなみに、regmon という
レジストリ操作を監視するツールを使って調べました。


585 :デフォルトの名無しさん:04/11/14 07:24:37
続き

HKCR\Software\Microsoft\Windows\CurrentVersion\Explorer
Shutdown SettingとReason Settingのキーは無いようです。

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer
には存在していましたので、こちらで試しています。

OSのシャットダウン時の処理なので、ちゃんと動くまで再起動しまくって
いるので時間かかるー(笑)



キーさえ分かればきっと情報があるはずだ、ということで検索してみた。
ttp://www.microsoft.com/windows2000/techinfo/reskit/en-us/regentry/36031.asp
これによると Shutdown Setting はあくまでダイアログでの選択値のようっす。
Reason Setting の方は見つからず。


586 :デフォルトの名無しさん:04/11/14 11:09:18
VFWを使って画像処理ソフトを作っているのですが、フレームレートが15FPS以上に上がってくれません
他のソフトを使えば、30FPS出ているので、カメラ・PCの性能は十分あります
これは、VFWの仕様でしょうか?
それとも、プログラムのコードが問題あるのでしょうか?

587 :デフォルトの名無しさん:04/11/14 11:12:02
>>586
capPreviewRateやCAPTUREPARMSのdwRequestMicroSecPerFrameでの設定値を変えても、
capSetCallbackOnFrameで設定したコールバック関数の呼び出しタイミングが15FPSを切ってるという話です

588 :デフォルトの名無しさん:04/11/14 11:24:28
static TCHAR strFile[MAX_PATH];
LPSTR strText;
(中略)
GetOpenFileName(&ofn);
hFile = CreateFile(
   (LPCTSTR)strFile , GENERIC_READ , 0 , NULL ,
   OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL
);
if (hFile == INVALID_HANDLE_VALUE) break;

strText = (LPSTR)malloc(GetFileSize(hFile , NULL));
ReadFile(hFile , strText , GetFileSize(hFile , NULL) , &dwBytes , NULL);
CloseHandle(hFile);
SetWindowText(hwnd , strFile);
SetWindowText(edit , strText);
指定して読み込んだパスのファイルを開いて、
エディタ(edit)に書き出すコードのつもりなのですが、
エラーなしですが、何も書き出せません。パスまでは読み込める状態です。
間違っていそうな部分を上げましたが、情報不足でしたらすみません。
お願いします。

589 :デフォルトの名無しさん:04/11/14 12:00:46
WM_SETTEXT

590 :デフォルトの名無しさん:04/11/14 13:30:11
malloc の戻り値くらいチェックしろや


591 :デフォルトの名無しさん:04/11/14 15:08:21
問題解決とは直接関係ないがちゃんとナル文字の分もバッファを取れ。
DWORD dwFileSize;
・・・
dwFileSize = GetFileSize(hFile , NULL);
strText = malloc(dwFileSize + 1);
ReadFile(hFile , strText , GetFileSize(hFile , NULL) , &dwBytes , NULL);
strText[dwFileSize] = '\0';

ところでchar/TCHARのハンガリアンはstrじゃなくてsz。どうでもいいことだが。

592 :588:04/11/14 15:21:48
>590
すみません。事故解決しますた。
edit がstatic になってませんでした。
NULLではなかったっぽいです。
ご迷惑かけました。

593 :588:04/11/14 15:31:00
>591
補足かたじけないです。
WindowsSoftのコードを参考にしたのですが。
それにしてもWinプラは型がややこしい。。。

594 :デフォルトの名無しさん:04/11/14 16:13:53
mallocの戻り値、ReadFileの読み込みサイズくらいはチェックしましょう。

595 :デフォルトの名無しさん:04/11/14 17:31:20
ちょっと質問します。

自分のウィンドウに来たメッセージ(マウスボタンの押下など)を
裏に隠れているウィンドウに伝える方法ってありますか?

SetWindowRgnでウィンドウに穴を開けると
穴の部分のウィンドウメッセージは裏にいるウィンドウに伝わりますが
穴が空いてない部分でも同じようにメッセージを伝えたいのです。


596 :デフォルトの名無しさん:04/11/14 18:22:46
Mac のアプリを Win に移植したいのですが
ChasingArrows (ぐるぐる回転する矢印)を絵画するAPIはどれに相当するのでしょうか。

Macの場合はこれです。
Declare Function DrawThemeChasingArrows Lib "CarbonLib" (inBounds as Ptr, index as Integer, state as Integer, eUPP as Integer, userData as Integer) as Integer

597 :デフォルトの名無しさん:04/11/14 18:33:20
絵画(かいが?)するAPIってなんだよ。

598 :デフォルトの名無しさん:04/11/14 18:36:53
描画でしょ(w

599 :デフォルトの名無しさん:04/11/14 18:37:23
VC++でアプリ作ってるんですが、
CreateAbout?AboutWindow?Aboutを表示する関数があった気がしたんですが
誰か分かる人居ませんか?
どっかにAboutが入ったAboutを表示する関数があった気がして・・
無いようでしたら、おとなしくDialogで作ります。

600 :デフォルトの名無しさん:04/11/14 18:39:00
>>595
例えば、上にあるウィンドウが子ウィンドウならプロシージャに
SendMessage(GetParent(hWnd),msg,wParam,lParam);
って感じに、そのまま親ウィンドウにスルーしつつ、自分の処理もするとか
”伝える”って事は、自分で作ったウィンドウで隠れた場合だよね
親子関係じゃ無くても、下にあるウィンドウのハンドル取得して、同じようにすれば良い

VFW詳しい人って居ないのかな…

601 :デフォルトの名無しさん:04/11/14 18:48:11
プログラミングwindowsという本を見ていてどうしてもわからなかったのですが
static TCHAR szAppName[] = TEXT ("SysMets1");という一文があったのです。
今までヨンたほかのwindowsプログラミングの書籍ではTEXT("")という表記がまったく使われていなかった(static TCHAR szAppName[] = "SysMets1";っぽい感じ)上に、プログラミングwindowsという書籍の索引を引いてもまったく解説されておらず困っています。
このTEXT("")というのはいったいどういう意味なのでしょうか?
よろしくおねがいします。

602 :デフォルトの名無しさん:04/11/14 18:50:25
>>601
嘘つけ。第2章で出てくるだろ。<プログラミングWindows(上)

603 :デフォルトの名無しさん:04/11/14 18:51:51
>>597-598さま、大変失礼しました。絵画ではなく描画です。

Mac のアプリを Win に移植したいのですが
ChasingArrows (ぐるぐる回転する矢印)を描画するAPIはどれに相当するのでしょうか。

Macの場合はこれです。
Declare Function DrawThemeChasingArrows Lib "CarbonLib" (inBounds as Ptr, index as Integer, state as Integer, eUPP as Integer, userData as Integer) as Integer

604 :デフォルトの名無しさん:04/11/14 18:52:38
>>601
その本に馬鹿丁寧に書いてあるから
絶対読み落とすはずがない。

605 :デフォルトの名無しさん:04/11/14 18:53:39
>>602
立ち読みで一部だけ読んだとか?
律儀にTEXTマクロ使ってる本ってあんまり見ないな…ネットでも少ないけど

606 :デフォルトの名無しさん:04/11/14 18:55:36
>>603
日本語の「たくわん」に相当する英語を教えてください

607 :デフォルトの名無しさん:04/11/14 18:56:20
>>595
Transparent

608 :デフォルトの名無しさん:04/11/14 18:58:16
>>606さま、
Pickled Japanese radishだそうです

609 :デフォルトの名無しさん:04/11/14 19:00:47
>>595
この辺でぐぐってみそ
WS_EX_TRANSPARENT
WS_EX_LAYERED
setLayeredWindowAttributes



610 :デフォルトの名無しさん:04/11/14 19:26:25
>>599
ShellAbout()のことか?
ただしMicrosoftの文字が必ず入る。

611 :デフォルトの名無しさん:04/11/14 19:56:36
>>610
ありがとうございます。

612 :デフォルトの名無しさん:04/11/14 19:58:03
下げ忘れた・・・すまそん・・(´・ω・`)

613 :デフォルトの名無しさん:04/11/14 20:04:46
Chasing Arrowsコントロールとはこれのことです。
http://images.google.com/images?q=tbn:EruxJ3ZCH6cJ:developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/art/chasingarrows.gif
このコントロールを任意の座標に描画するAPIを探しています。宜しくご教授お願いします。

614 :デフォルトの名無しさん:04/11/14 20:07:04
>>613
Windowsのシステムカーソルにそんなものはない。

LoadCursorのドキュメントから用途にあったものを探せ。
OSが変わればカーソルも変わる。

615 :デフォルトの名無しさん:04/11/14 20:07:37
>>613
Windowsアプリでそれ使ってるアプリあるか?

616 :デフォルトの名無しさん:04/11/14 20:10:04
>>615
それがどうした?

617 :595:04/11/14 20:15:27
レスありがとうございました

>>600
”伝える”の意味はそれで合っています
隠れるウィンドウは親子関係にないので、どうすればいいか分からなくなってしまいました
まずは隠れているウィンドウのハンドルを取得する方法を模索してみます

>>607, 609
レイヤードウィンドウについて調べてみましたが
完全に透明にしないとメッセージが裏のウィンドウに届いていませんでした
自分のウィンドウは見せる必要があるので、この方法では駄目でした
言葉が足りず、申し訳ありません


618 :デフォルトの名無しさん:04/11/14 20:20:23
>>617
完全な透明にしなくても後ろのウィンドウにメッセージが行くのがTRANSPARENT

619 :デフォルトの名無しさん:04/11/14 20:27:26
もしかしてWindowsにはChasing Arrowsコントロールそのものがないでしょうか。
長い処理などをユーザーに待たせる時にマウスカーソルを砂時計に変えるかわりに、
回転する矢印のコントロールをウィンドウに配置して、処理中を知らせる物です。

620 :デフォルトの名無しさん:04/11/14 20:30:52
>>619
無いっつってんだろ。

621 :デフォルトの名無しさん:04/11/14 20:32:07
ない。砂時計しかない。そこでWin糞とか言ってはいかん。
やる気があるならリソース埋め込んで自前で作れ。

622 :595:04/11/14 20:49:52
WS_EX_TRANSPARENTで無事に目的の事が出来るようになりました
TRANSPARENTをレイヤードウィンドウと勘違いしていました

ありがとうございました


623 :デフォルトの名無しさん:04/11/14 20:59:29
>606が素晴らしいヒントを書いたのにねぇ。郷に入りては郷に従うべし。

624 :デフォルトの名無しさん:04/11/14 21:00:56
>>595
勘違いしたのは >>609 のせいだな


625 :デフォルトの名無しさん:04/11/14 21:02:47
>>623
別に素晴らしくもないと思う。むしろ回りくどくて書いた本人が満足してるだけっつーか。

626 :デフォルトの名無しさん:04/11/14 21:04:44
>>625
>>606 == >>623 なんだからそれ以上かまうな

627 :デフォルトの名無しさん:04/11/14 21:05:30
OutputDebugStringのような機能を独自で作りたくて
# そのままこれを使うといろんなアプリの出力が混じってしまうので
TCP、プロセス間通信あたりで実装しようかと思っていますが
もっとよい方法、定石、ライブラリみたいなものはあるんでしょうか?

628 :デフォルトの名無しさん:04/11/14 21:13:00
>>626
=ではなく==を使う辺りがプログラム板って感じだ

629 :デフォルトの名無しさん:04/11/14 21:14:48
>>627
ファイル書き出しが定石じゃないか?


630 :623:04/11/14 21:17:11
>>626
違うよん。この件に関しては漏れは突っ込み入れ損ねたから。

631 :595:04/11/14 21:17:52
>>624
悪いのは自分で >>609 さんは的確な回答を示していました
622の書き方も変なので勘違いがないように訂正させてください

WS_EX_TRANSPARENTをWS_EX_LAYEREDを指定し
SetLayeredWindowAttributesを呼び出したウィンドウ=レイヤードウィンドウに付け加えることで、
自ウィンドウが存在しないかのようにメッセージがすり抜け、裏にいるウィンドウに送られるようになりました

何度も言葉足りずで混乱させて申し訳ありませんでした


632 :デフォルトの名無しさん:04/11/14 21:24:01
>>629
それだとODPと同じにはならないし

633 :デフォルトの名無しさん:04/11/14 22:08:32
>>627
そういうのを syslog といいます

634 :デフォルトの名無しさん:04/11/14 22:16:36
>>606の言いたいことが全然解らん

635 :デフォルトの名無しさん:04/11/14 22:20:28
>>634
日本語で「たくわん」に相当する英語 = 存在しない

じゃないか?

636 :デフォルトの名無しさん:04/11/14 22:31:57
>>595 >>631
おお、すまそ。
あくまで SetLayeredWindowAttributes と WS_EX_LAYERED が使われていないと、
WS_EX_TRANSPARENT が有効にならないんだということが分かった。

お詫びのしるし
http://www.sutosoft.com/room/archives/000050.html
http://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.asp

637 :お助けお願いm(_ _)m:04/11/15 01:11:34
>>580
返事ありがとうございます。
残念ながら、その方法ではアプリケーションを終了するタイミングは
取れますが、私の欲しいOSのシャットダウン中であるという情報は
取れませんね。

何はともあれ返事をいただいた事に対して深く感謝いたしますm(_ _)m

638 :お助けお願いm(_ _)m:04/11/15 01:14:37
>>584-585
返信ありがとうございます。
まだ試しておりませんので、なんともわかりませんが
まったく手がかりがなかったので参考にさせていただきます。
誠にありがとうございました。m(_ _)m

639 :デフォルトの名無しさん:04/11/15 10:32:58
>>77にある他アプリのOLEドラッグ開始の検出方法ってどんなものですか?

640 :デフォルトの名無しさん:04/11/15 12:18:52
スパイウェアの開発者ですか?

641 :デフォルトの名無しさん:04/11/15 17:08:12
DispatchMessage()の仕様について聞きたいんですけど
このAPIの終了はプロシージャが終了して、そのリターン値を受け取ってから終了する
ってことでいいんですか

642 :デフォルトの名無しさん:04/11/15 17:22:54
はい。

643 :デフォルトの名無しさん:04/11/15 18:03:00
THX
てことはプロシージャは一つのWinMain()からは
1ループ(メッセージループ)毎に常に1回しか呼び出されないって理解してOKですか

644 :デフォルトの名無しさん:04/11/15 18:06:20

すんませんコレ
スルーしといてください

645 :デフォルトの名無しさん:04/11/15 20:05:38
メニュー項目に半角の'&'を出したいんですけど、
そのままだと次の文字がアクセラレータキーになっちゃいます。
どしたらいいですか。

646 :デフォルトの名無しさん:04/11/15 20:09:14
&&

647 :645:04/11/15 20:13:04
>>646 thxです

648 :デフォルトの名無しさん:04/11/15 20:39:36
すいません質問です
コンソールアプリケーションです
GetCurrentDirectoryを使ってパスを取得しています
アプリケーションをダブルクリックで実行させると正しいパスが帰ってくるんですが
他のファイルをドロップして実行させると「C:\Documents and Settings\hogehoge」というパスを取得してしまいます
もちろんアプリケーションはそれとは別のディレクトリですし、ドロップしたファイルも同様です
これはこういう仕様なのでしょうか?


649 :デフォルトの名無しさん:04/11/15 20:47:23
>>648
そういう仕様です

650 :デフォルトの名無しさん:04/11/15 20:51:12
>>648
シェル (Explorer) から exe ファイルをダブルクリックなりドラッグ・アンド・ドロップなりで起動した際の
カレントディレクトリはどこにも規定されていなかったと思います。

98系だと EXE のパスや開くべきファイルのパス、
NT系だとユーザのホームディレクトリになるんだったかな・・・
実行ファイルのパスを得るためには、GetModuleFileName という API が用意されています。

651 :デフォルトの名無しさん:04/11/15 20:52:27
>649,>650
GetModuleFileNameで取得したパスを分解してディレクトリパスを取得して使ってみます
ありがとうございました


652 :デフォルトの名無しさん:04/11/15 20:56:21
確かにね、そういう仕様だ罠

なんかM$のデフォ設定きらい
C:はブート用(入れなおせば済むファイル)
D:をミラーリング(消えたらガクブル系)
みたいな管理を徹底的に無視しやがる

653 :デフォルトの名無しさん:04/11/15 21:24:08
わざわざGetModuleFileNameつかわなくても
argv[0]に入ってるみたいだけど

654 :デフォルトの名無しさん:04/11/15 21:43:12
>653
ああぁっ!

コンソールアプリなのに忘れてましたw

655 :デフォルトの名無しさん:04/11/15 22:23:51
こっちでいいのかわかりませんが、教えてください。
VB6でピクチャボックスにGetPixelつかうと、ウィンドウと重なっている場合、
前のウィンドウのピクセルを拾ってしまうんですが、
どうすれば重なって隠れているウィンドウの
ピクセル色が拾えますか?

656 :デフォルトの名無しさん:04/11/15 23:10:14
__argvを忘れてやるなよ。


657 :デフォルトの名無しさん:04/11/16 00:53:23
__argvはVCローカルなり

658 :デフォルトの名無しさん:04/11/16 00:55:28
便乗質問だけど
GetCommandLineで得られる文字列にも「実行ファイルのパス」が含まれてますが
これが確実にフルパスである、という保証はありますか?

GetCommandLineとGetCurrentDirectoryとGetModuleFileNameとを比較してみたら
引数の順序や戻り値の仕様がバラバラで精神衛生上アレだと思った

659 :デフォルトの名無しさん:04/11/16 01:59:27
全然ありませんが。>保証
引数や戻り値はまぁあれだ、作ってるやつ(チーム)がそれぞれ違ったりするんで許してやれ。

660 :デフォルトの名無しさん:04/11/16 02:45:50
>>658
俺が試してみたら、ファイル名だけだったよ

ファイル選択ダイアログとかはGetCurrentDirectoryで良いけど、
実行ファイルのパスが知りたいならGetModuleFileName使うが宜しい
コマンドライン引数を任意のタイミングで知りたいなら、GetCommandLineを使えばよい

661 :デフォルトの名無しさん:04/11/16 03:50:23
>>655
Windows 側でイメージは保持してくれません。
重なって隠れているピクセルは拾えません。

別のウィンドウが上に重なったら、その下にあるウィンドウのイメージは壊れます。
別のウィンドウの下になっている部分が表示される時には WM_PAINT
が送られますので自分で書かなければいけません。
よって、画面上にあるピクセルを取得しても別のウィンドウが重なっている時は
重なっているウィンドウのピクセルが返ってきます。
これを回避するにはあらかじめ画面に表示するイメージを別に作っておくしかありません。
「オフスクリーンビットマップ」で調べてみてください。

VB には他に逃げ道があるのかもしれませんが。


662 :デフォルトの名無しさん:04/11/16 07:34:36
>>660
__argc, __argvは、VC6.0以降は非サポートなの?

663 :デフォルトの名無しさん:04/11/16 09:49:03
指定したプロセスに対して,
どんなスレッドが起こされているのか
リアルタイムで表示するような
アプリケーションてないですかね?


664 :デフォルトの名無しさん:04/11/16 09:59:48
spy++

665 :デフォルトの名無しさん:04/11/16 10:00:49
リヤルタイムじゃないかもしれない

666 :デフォルトの名無しさん:04/11/16 10:21:53
リストビューのアイテムがクリックで選択されたと同時に
そのアイテム番号(リストの行)を拾いたいのですが、
なんかメッセージ飛んできますか?

667 :デフォルトの名無しさん:04/11/16 10:43:35
>>666
親へ WM_NOTIFY で NM_CLICK

http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/listview/notifications/nm_click_listview.asp?frame=true

668 :デフォルトの名無しさん:04/11/16 10:57:51
>>667
ありがとん。

669 :655:04/11/16 11:40:09
>>661
わかりました。
ありがとうございます。

670 :デフォルトの名無しさん:04/11/16 17:38:25
すいません。質問させてください。
Susieのプラグインで

HLOCAL *pHBm : ビットマップデータ本体のメモリハンドルが返される

とあるんですが、メモリの内容を見るにはどうすればいいですか?

671 :デフォルトの名無しさん:04/11/16 17:38:56
すいません。VBスレと間違えました。

672 :デフォルトの名無しさん:04/11/16 18:16:21
>>670
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_locallock.htm
別にAPIスレはC/C++限定じゃないが。

673 :デフォルトの名無しさん:04/11/16 19:20:55
文字リテラルは_Tまたは_TEXTを使用して定義する(_TEXT("heloo")という具合)と書いてあったのですが、実際のコードに_TEXTを使用するとコンパイルエラーになってしまいます。
サンプルプログラムを見るとTEXT("")という形で_が使われていなかったりして書いてあることと実際がぜんぜん違うじゃないかと困っています。
#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox (NULL, _TEXT ("Hello, Windows 98!"), _TEXT("HelloMsg"), 0) ;
return 0 ;
}
本に書いてあるとおりならこれで間違いないはずなのですがどうしてもコンパイルできないのはPCの問題でしょうか?

VC++6.0使用してます

674 :デフォルトの名無しさん:04/11/16 19:31:50
#include <tchar.h>

675 :デフォルトの名無しさん:04/11/16 19:34:23
TEXT() や __TEXT() を使いましょう。
_T() や _TEXT() を使いたければ、tchar.h 等をインクルードしましょう。

676 :デフォルトの名無しさん:04/11/16 19:40:27
/*--------------------------------------------------------------
HelloMsg.c -- Displays "Hello, Windows 98!" in a message box
(c) Charles Petzold, 1998
--------------------------------------------------------------*/

#include <windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0) ;

return 0 ;
}

677 :デフォルトの名無しさん:04/11/16 19:40:53
>>674-675
わかりやすい回答ありがとうございます。
御礼をしておいてまた質問するもの失礼かと思いますが、#include <tchar.h> と_TEXTの組み合わせか、TEXT()を普通に使用するとではどちらが望ましいのでしょうか?

678 :670:04/11/16 19:40:54
>>672
ありがとうございます。
ロックを解除したいのではなく、中身を見たいんですが・・・

679 :デフォルトの名無しさん:04/11/16 19:50:49
バカキター

680 :デフォルトの名無しさん:04/11/16 20:06:48
>>655
AutoRedraw=Trueしれ

681 :デフォルトの名無しさん:04/11/16 20:25:13
>>678
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_locallock.htm

682 :デフォルトの名無しさん:04/11/16 20:32:09
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        >>678
/     ∩ノ ⊃  ヽ      J
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /

683 :670:04/11/16 20:33:28
>>682
つりじゃないんですけど・・・

684 :デフォルトの名無しさん:04/11/16 20:59:36
>>677
他のヘッダやマクロを使う特別な理由がなければ、TEXT() でいいと思うよ。

685 :デフォルトの名無しさん:04/11/16 21:02:05
>>678
戻り値がメモリへのポインタなんだから、それを取得して好きに読めばよい。
取得したポインタの中身を読む方法が分からないんだとしたら、スレ違い。

686 :デフォルトの名無しさん:04/11/16 22:17:18
>>684
どうもですー。


687 :デフォルトの名無しさん:04/11/16 23:49:36
Str系APIってMBCS考慮するんだな。
知ってた?

688 :デフォルトの名無しさん:04/11/17 03:02:04
Win32APIで、メニューアイテムのテキストを収得、変更する方法はありますか

689 :デフォルトの名無しさん:04/11/17 04:15:49
API で出来なくてどうやってメニューをハンドリングしろと?
GetMenuString
ModifyMenu


690 :デフォルトの名無しさん:04/11/17 07:53:28
フックプロシージャをクラスのメンバー関数として持ちたいんですが、
staticで定義されたフックプロシージャにthisポインタを渡す方法は
何かないでしょうか?

691 :デフォルトの名無しさん:04/11/17 08:40:32
>>690
SetWindowLong/GetWindowLong

692 :デフォルトの名無しさん:04/11/17 09:40:20
>>690
自前の永続変数にthisアドレスをコピー。

693 :デフォルトの名無しさん:04/11/17 09:42:11
>>691
回答ありがとうございます。
あと質問の際の情報が不足していました申し訳ありませんでした。
お教えいただいた対策は、WH_CALLWNDPROC等のプロシージャ側にWindowHandleが送られて
くるタイプのプロシージャに対しては有効なのですが、今回メンバー関数に入れたい
フックプロシージャは、WH_KEYBOARD、WH_MOUSEなのでプロシージャにWindowHandleは
送られてきません(WH_MOUSEは送られてきたかも..)。

こういった場合の対策法は何かありませんでしょうか?



694 :690=693:04/11/17 09:46:42
>>692
やっぱり、その方法しかないんでしょうか..

695 :690:04/11/17 10:01:18
>>693
自己レスです。
よく考えたらHookだと目的のWindow以外のHandleも受け取るので無理ですね
やっぱり>>692の方法が現実的なんでしょうか?

とりあえず、>>692の方法で組んでみます。他にスマートな方法を知っている方が
居られましたらお教えください。

>>691,>>692
ありがとうございました。


696 :デフォルトの名無しさん:04/11/17 10:21:08
>>691はフックプロシージャをウィンドウプロシージャと読み違えて回答し、
>>690は見当違いな>>691の回答に丁重な謝辞を述べ、
まともな回答をした>>692を粗略に扱った、に10000ペソ。

697 :デフォルトの名無しさん:04/11/17 10:23:03
>>693は照れ隠しにスマートな方法はないか?
と全く心のこもっていないダミーの質問をして、己の短慮を誤魔化そうとした、に10000ペソ。

698 :デフォルトの名無しさん:04/11/17 12:59:47
実行した後、自分自身が消えるような実行ファイルはどのような
感じで作ったらいいですか?

699 :デフォルトの名無しさん:04/11/17 13:11:26
>>698
>ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。

だそうだが、それは真っ当な用途のための質問かい?

700 :デフォルトの名無しさん:04/11/17 13:12:05
はい、そうです。

701 :デフォルトの名無しさん:04/11/17 13:38:57
ま、いいや

実行ファイルのパス取得して、別プロセス起動後、自アプリを終了
ググれば、サンプルはいくらでもあるよ

NT系限定だけど、
MoveFileExでMOVEFILE_DELAY_UNTIL_REBOOTフラグを指定すれば、
再起動時に削除できる

702 :デフォルトの名無しさん:04/11/17 14:24:45
>>699
アンインストーラ自身とかは自殺してくれないと困るだろ。

703 :デフォルトの名無しさん:04/11/17 14:43:27
>>702
「アンインストーラを作りたいのですが・・・」
みたいに聞いてくれたら、
余計な突っ込みは入れないんだけどね

704 :デフォルトの名無しさん:04/11/17 15:01:15
MSIとか、InstallWizardとかググればいいものを。
わざわざ自分でインストーラ作るのは車輪の再発明。

705 :デフォルトの名無しさん:04/11/17 15:13:06
>>700-701
CreateFileでFILE_FLAG_DELETE_ON_CLOSEを指定する方法もある。

706 :デフォルトの名無しさん:04/11/17 15:27:50
>>698
バッチファイルを作って、ループを回しそこで削除すればいい。
最後にバッチファイル自身を消す。


707 :デフォルトの名無しさん:04/11/17 15:30:11
echo off
:start
del ほげほげ.exe
if exist ほげほげ.exe goto start:
del 自分自身.bat

708 :デフォルトの名無しさん:04/11/17 15:30:30
前にここで聞いたときは
1) rundll32で削除用DLLを起動
2) ヒープ上に3)、4)をやるコードをコピーしてジャンプ
3) 自分自身のロックをFreeLibraryで解放
4) 自分自身を削除
という方法を教わった。

で、XPSP2 on Athlon64にしたらヒープにジャンプしたところで
エラーが発生しましたとさ(チャンチャン

709 :デフォルトの名無しさん:04/11/17 16:35:20
ヒープにコードを書くのは、いまや非合法という扱いになったね。
ま、元々そうだったけど明確に弾かれるようになった。

SP2のデータ実行防止(DEP)機能なのか?
それとも多くのバイナリを/GSオプションでリコンパイルした結果?

710 :デフォルトの名無しさん:04/11/17 16:50:45
virtualallocならいいの?

711 :デフォルトの名無しさん:04/11/17 17:06:30
初めて質問します。

DirectXで描画している他人のウィンドウに落書きしたいのですが、
DirectXの描画速度が速いためにちかちかしてしまいます。

負けじとこちらもDirectXで描画してみたのですが、
やっぱりちかちかしてしまいました( つД;)

他人のDirectX描画をクリッピングとかできたりするんでしょうか?

テスト・開発環境はWinXP SP2+VC7+DirectX9cです

712 :デフォルトの名無しさん:04/11/17 17:34:34
>>709-710
原因はDEPだった。VirtualAllocでPAGE_EXECUTE_READWRITEを
指定したメモリを確保するように変更して解決

713 :デフォルトの名無しさん:04/11/17 20:09:35
タスクマネージャが立ち上がったら終了するようなウィスルを作りたいのですが、
どうすればいいですか?

714 :デフォルトの名無しさん:04/11/17 20:12:12
タスクマネージャ.exeを事前にすり替えrp

715 :デフォルトの名無しさん:04/11/17 20:13:43
がんばってウィスれ!

716 :デフォルトの名無しさん:04/11/17 21:02:20
正攻法ならグローバルフックとpsapiを調べれ

717 :デフォルトの名無しさん:04/11/17 21:07:41
>>711
DirectXの描画速度は99%無関係だと思う


718 :デフォルトの名無しさん:04/11/17 22:52:16
>>711
リージョン使って落書きの形のウィンドウを作って、
そのDirectXなウィンドウの上に置くとか。

719 :711:04/11/17 23:38:53
>>718

ウィンドウを重ねて(TOPMOST)で作成しても、
落書きしたい相手のウィンドウが上書きしてくるんです。
(言い忘れましたが、落書きしたい相手というのがゲームなので少し特殊なのかもしれません…)

DirectXでTOPMOSTよりも前面に上書きするオプションがあるかどうかなど当たってみます。


720 :デフォルトの名無しさん:04/11/18 00:58:15
>>711
サーフェスぶんどってそこに描画ならできたはず。
詳しくは知らないのであとは調べてくれ。

721 :デフォルトの名無しさん:04/11/18 01:30:48
>>719
フルスクリーンだと>>720しないときついけどウィンドウモードならリージョンでも
いけるはずなんだけどなぁ。nVidiaのカードだとドライバーのバージョンでいろいろ
挙動が変わったと思う。Layerd Windowも試してみるといいかも。

722 :デフォルトの名無しさん:04/11/18 01:42:01
IHTMLDocument2のwriteでxmlデータを出力してみたのですが、どうにもxmlとして解釈してくれません。
なんとかxmlとして表示させられないでしょうか?

723 :デフォルトの名無しさん:04/11/18 01:42:25
>689
できました。づもありがとうございます。

724 :デフォルトの名無しさん:04/11/18 01:50:19
副スレッドを立てて処理をする時
一方のスレッドが参照のみを行う(NULLでない間ループ等)場合でも
クリティカルセクションオブジェクトというのは作る必要があるんでしょうか?

725 :デフォルトの名無しさん:04/11/18 01:58:47
ない

726 :デフォルトの名無しさん:04/11/18 04:12:19
たとえば状態の変化が
NULL 5秒
NULL 5秒
!NULL 5秒
NULL 5秒
NULL 5秒
ポーリング感覚が10秒だったら検出出来ない罠

727 :デフォルトの名無しさん:04/11/18 04:34:50
>>724
ポインタがNULLかどうかなら大丈夫だけど
一般にCPUが一命令で処理できないようなデータの参照は駄目。
あと最適化でNULL突っ込むタイミングが変わらないとも限らないから
volatile指定しておくといいかも。

728 :デフォルトの名無しさん:04/11/18 15:19:28
他から紹介されてここにたどりつきました
個々のプログラムが使用するメモリー容量を取得したいのですが・・・
(タスクマネージャのプロセスタブで表示できる仮想メモリサイズ)
APIはどれを使えばいいのか知りたいのですが解るかた教えてください。


729 :デフォルトの名無しさん:04/11/18 15:53:29
serviceを作っています。
ある条件が真になるとserviceから現在logonしているuserのデスクトップ上で
applicationを起動したいのですが方法をご存知の方教えてください。

現在は、ターゲットapplication起動用のapplicationを
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
に登録する方法を取っているのですが、serviceから直接起動できるのなら
そのようにしたいと考えています。

730 :デフォルトの名無しさん:04/11/18 16:14:47
CreateProcessAsUser

731 :デフォルトの名無しさん:04/11/18 17:40:24
便乗スマソ。現在ログオンしているユーザーのトークン取得ってどうするの?

732 :デフォルトの名無しさん:04/11/18 17:56:09
てきとーにOpenProcessTokenする

733 :デフォルトの名無しさん:04/11/18 19:50:40
HDCのデータをビットマップファイルで出力するにはどうすればいいですか?

734 :デフォルトの名無しさん:04/11/18 19:53:09
>>733
GDIにはないから、BITMAPFILEHEADER構造体→BITMAPINFOHEADER→色値の順にへこへこ書き出す
GDI+にはあるらしいが俺は試してないんで、すまんがコメントを控えさせていただく

735 :デフォルトの名無しさん:04/11/18 22:31:00
>>733
IPicture::SaveAsFile()もあるでよ

736 :デフォルトの名無しさん:04/11/18 22:54:56
現在表示されている画面に直接描画をしたいのですが
どうしたらいいでしょうか?

単にデスクトップへの描画でなく
デスクトップよりも手前に表示されているウィンドウがあればそれも含めて
現在の画面に直接落書きするようなことをしたいのです

画面に落書きが表示された状態でも操作は普通にさせたいので
画面のハードコピーをとって表示させてその上に書くというのは無しで

737 :デフォルトの名無しさん:04/11/18 22:59:44
>>736
ガッ = GetDC(ぬるぽ);

738 :デフォルトの名無しさん:04/11/18 23:04:20
>>737
なるほどぉ
ありがとうございます

739 :デフォルトの名無しさん:04/11/19 00:13:06
どこかのスレでC++を事前に勉強しておかないと、VC++を覚えるのは困難
だと言っている人がいましたが本当なのでしょうか?
できれば、Cから一気にVC++に飛びたいのですが……

740 :デフォルトの名無しさん:04/11/19 00:20:32
>>739
言ってる意味ぜんぜん分からないから。
VC++はCやC++の延長上にあるものじゃないから。
雪と雪見大福くらい違うから。

741 :デフォルトの名無しさん:04/11/19 00:24:30
740に突っ込みたいけどそれ以前にスレ違いだボケ>>739

742 :デフォルトの名無しさん:04/11/19 01:02:40
>>740
VC++はCやC++の開発環境なんですけど・・・

743 :デフォルトの名無しさん:04/11/19 01:09:13
>>742
VC++覚えるのにCの知識もC++の知識も要らないでしょ。
VC++でCやC++の開発したければそれぞれの言語の知識が必要だけど。

744 :デフォルトの名無しさん:04/11/19 02:10:48
>>740
突っ込みどころ満載で・・・

745 :デフォルトの名無しさん:04/11/19 02:49:38
みんないじめてるな

>>739
Windows のアプリが作りたいのに C++ をわざわざ他のプラットフォーム
で勉強してもしょうがないよ。
まあ、C の知識のみ API の知識なしで、 MFC 使って C++ のプログラム
を覚えるのはちと荷が重いけどね。

VC++ でアプリ開発するには
C言語 + API
C++言語 + MFC (+ API)
C++言語 + ATL+ API
等、選択肢はいくつもある。
段階的に覚えていけばよいよ。


746 :デフォルトの名無しさん:04/11/19 10:24:32
>>743
君のいう「VC++を覚える」とは、エディタの使い方かよ。 (プ

747 :デフォルトの名無しさん:04/11/19 10:42:18
>>746
あとは、プロジェクトの設定とかだな

748 :デフォルトの名無しさん:04/11/19 10:56:39
Serviceと、そのServiceから起動されるExeを作ってます。
Serviceから現在ログインしているユーザでExeを起動すると
パスワード有りの場合は何も問題なく実行出来るのですが、
パスワード無しの場合LogonUser関数で失敗(ErrCode:1327)します。

原因を追いかけていくと
ローカルセキュリティの設定 → セキュリティオプション内の
『アカウント:ローカルアカウントの空パスワードの使用を制限する』
の設定で挙動が変化すると判ったので
Exeを起動している間だけここの設定を『有効→無効』にしたいと思っています。

ここの設定を変更する方法(APIとか)を教えてください。



749 :デフォルトの名無しさん:04/11/19 11:10:24
でも、プログラミングを教えるようなサイトでも、VCを言語として表現してる所があったり…
MFCの意味で使ってるっぽい

750 :デフォルトの名無しさん:04/11/19 11:15:56
とりあえず、MFCはバージョンアップも止まりドトネト対応しないから、M$が収束させる方向なんだが。

751 :デフォルトの名無しさん:04/11/19 11:35:00
>>749
確かにね。仕事で引き合い貰って客先の案件要求見ると、言語の欄に.NET、VB、VC、C/C++、JAVAなんて書いてあったりするからね。
#VBって書いてあってExcelVBAだったりJAVAって書いてあってDeveloper2000なんか出てきた日にゃぁ…

752 :デフォルトの名無しさん:04/11/19 11:40:57
MFCだとActiveXベースになってニッチもサッチもいかなくなるからやめるべし。

753 :デフォルトの名無しさん:04/11/19 12:05:28
VCは開発言語でいいんじゃないか?
Cだってライブラリも言語のうちだし、
C++のクラス、テンプレートも言語のうちだろ

あとVisualStudioの開発ツール使わないでコーディングする場合もあるから
開発環境とは直接関係ないし

754 :デフォルトの名無しさん:04/11/19 12:11:22
>>748
現在ログオンしているユーザーと違うアカウントで
起動したいのでなければ>>731-732

755 :デフォルトの名無しさん:04/11/19 13:21:44
もう面倒くさいから"特技パソコン"でいいよ。

756 :デフォルトの名無しさん:04/11/19 13:25:11
>>751
仕事や人事にでてくるそーゆー用語は
言語かどうかでは選んでないだろ

757 :デフォルトの名無しさん:04/11/19 13:32:49
すいません。質問です。
Platform SDKとNET Framework SDKをインストールして
#include<windows.h>が使えるようになるんでしょうか??


758 :デフォルトの名無しさん:04/11/19 13:37:33
環境に関係なくwindows.h持ってれば使えるだろ

759 :デフォルトの名無しさん:04/11/19 13:43:03
windows.h持っててもコンパイルできるコンパイラがないと使い物にならないけどね。
VC++互換の言語拡張されてるやつ。

760 :デフォルトの名無しさん:04/11/19 13:59:29
>>759
たしか、>>757にvc.exeが入ってたよね。
ヘッダは無かった気がするけど。

761 :デフォルトの名無しさん:04/11/19 14:00:28
>>756
「言語」って書いてあるから>751のように書いたんだが。

762 :デフォルトの名無しさん:04/11/19 14:00:32
ヘッダはPlatform SDKのほうに入ってる

763 :デフォルトの名無しさん:04/11/19 14:11:55
>>758
>>759
レス、dクスです。
コンパイラはbccの無料のやつを使ってるんですが。互換言語のところに、VC++と確か書いてありました。
今ボーランドのファイルを調べてみたら<windows.h>、ありやしたYO-!

764 :デフォルトの名無しさん:04/11/19 14:18:50
とりあえずPlatform SDKのcoreSDKとやらを落としてみます

765 :デフォルトの名無しさん:04/11/19 14:20:28
ありがとうございました。また来ます。

766 :デフォルトの名無しさん:04/11/19 16:15:34
「プリプロセッサの定義」のところで,
_UNICODE を設定したとき,
Unicode にもいろいろありますが,
どのコードが使われるのでしょうか?


767 :デフォルトの名無しさん:04/11/19 16:16:15
UTF-16

768 :デフォルトの名無しさん:04/11/19 16:19:49
UCS-2じゃねの

769 :デフォルトの名無しさん:04/11/19 16:23:00
UniscribeとかはWin9xでもUTF-16受け付けるけど
データ型が違うわけじゃないから(全部WCHAR)

770 :デフォルトの名無しさん:04/11/19 17:26:37
>>767
正確にはUTF-16からサロゲートペアを取り除いた物、だったはず。

771 :デフォルトの名無しさん:04/11/19 17:42:01
それをUCS-2っていうんじゃないのか?
Win2k以降ならサロゲートにも対応してるしWin9xでも>>769

772 :デフォルトの名無しさん:04/11/19 17:42:52
あ、漏れの環境で試した限りではWin95だけは
どうあがいてもサロゲート文字が出せなかった

773 :デフォルトの名無しさん:04/11/19 22:37:58
文字集合と転送形式は違うだろ

774 :デフォルトの名無しさん:04/11/19 23:31:37
質問です。
WS_EX_TOOLWINDOWを使って作ったウィンドウを
子ウィンドウとして、出しているのですが、
Xボタンを押すとウィンドウを隠すのではなくて
完全に消去されてしまっていてShowWindow(hwnd,SW_SHOW)で
また表示することができません。
Xボタンの処理内容を変更するにはどうしたらよいでしょうか?

775 :デフォルトの名無しさん:04/11/20 00:01:18
>>774
WM_CLOSE
で ShowWindow(hwnd, SW_HIDE) でウィンドウ消して
DefWindowProc を呼び出さない。


776 :デフォルトの名無しさん:04/11/20 00:34:09
>>775
そーやってんだけどなぁ・・・ああ?ん?へ?
って、ソースが汚すぎてインデントが腐ってて
よくみるとbreakで抜けていましたw
ごめいわくおかけしました。逝ってきまつ。
レスありがとうございました。おかげで解決しました。

777 :デフォルトの名無しさん:04/11/20 13:21:55
Cで、リソーススクリプトやMFCを使わずに、
ツールバーを使う方法がありましたら教えてください。
ボタンやメニューなどは分かったのですが、ツールバーは見つかりませんでした。

778 :デフォルトの名無しさん:04/11/20 13:41:20
>>777
スリーセブンおめ!
いや、普通にCreateWindowExで作れるんじゃねぇ?
ぐぐっといたぞ。
猫さんが一番上にきてるね。
http://www.google.co.jp/search?hl=ja&q=%E3%83%84%E3%83%BC%E3%83%AB%E3%83%90%E3%83%BC+CreateWindowEx&lr=

779 :デフォルトの名無しさん:04/11/20 13:44:22
>>773
質問がそもそも曖昧だし
UCS-2は転送形式をも含んだ意味で使われる場合もあるし

780 :777:04/11/20 13:53:32
>>778
ありがとうございます。
確かに乗っていますが、リソーススクリプトを使っています。
ボタンの章では使わずに作られているのですが。
http://www.kumei.ne.jp/c_lang/sdk/sdk_28.htm

781 :デフォルトの名無しさん:04/11/20 13:58:18
>>780
自作ライブラリから適当に抜き出した
構造体名とかから、ググれば解説ページも出ると思う

 TBBUTTON *tbButton
 TBADDBITMAP tb;

 hWnd=GetParent(hwToolbar);
 tb.hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);
 tb.nID=IDD_BMP_BBOARD;
 iIndex=SendMessage(hwToolbar,TB_ADDBITMAP,1,(LPARAM)&tb);
 tbButton[1].iBitmap=iIndex;
 SendMessage(hwToolbar,TB_ADDBUTTONS,1,(LPARAM)&tbButton[1]);

782 :777:04/11/20 14:01:34
>>781
ありがとうございます。調べてみます。

783 :デフォルトの名無しさん:04/11/20 14:13:49
マルチメディアタイマー(timeSetEventなど)を使ってプログラムを組んでいるのですが、
処理が軽い時は一定のタイミングでコールバックが来るので良いのですが、
重くなった時は呼び出し回数が減り、その後に大量にコールバック関数が呼ばれます
重くなった時は回数が減っても良いのですが、軽くなった時に元通りのタイミングに戻って欲しい場合はどうすれば良いですか?

timeGetTime辺りで呼び出し間隔を記録して、
・前回からの呼び出し間隔が設定値よりかなり短い時は、丁度良い感覚のもの以外はすぐにreturnする
というだけの処理で良いのでしょうか?
重い状態が長続きした場合に、バッファがたまってオーバーフローを起こしたりしないのでしょうか?

784 :デフォルトの名無しさん:04/11/20 14:19:12
>>780
え?
猫さんの63章は使って無いんじゃない?
リソーススクリプトはビットマップを読んでるだけでしょ。

785 :デフォルトの名無しさん:04/11/20 14:24:06
>>783
それって単純にやっちゃ駄目なんじゃない?

つまり、重くなったときは処理が間に合わなくてメッセージだけ
蓄積されてて軽くなったら一気に処理しちゃってるってことでしょ?

こういうの解決するのってメッセージの送信側と受信側で
メッセージの蓄積状態を管理しなきゃ駄目なんじゃない?
よう知らんけどw

786 :デフォルトの名無しさん:04/11/20 14:29:38
>>785
マルチメディアタイマーはWindowsが管理してるんで、送信側の管理が良く分からんのですよ
今実験してたら、しばらく負荷かけてたら、プログラムが落ちた…そのままでは問題みたいです
マルチメディアタイマーでは無理な場合は、自作タイマーで行くしか無いかな…

787 :777:04/11/20 14:35:58
>>784
ホントですか?
結構いろんな所を調べていて、リソースとか、.rcとか見つけると、
またかと思い他のページに行くとかしていました。差し替えてやってみます。

788 :777:04/11/20 14:53:35
>>784
できました。後は>>781さんのも参考にして理解を深めたいと思います。
お答えくださった方、ありがとうございました。

789 :デフォルトの名無しさん:04/11/20 16:32:59
こんばんわ

今Windows内で開いてあるウィンドウのハンドルを全て得たいのですが、
どのAPIを使えばいいのでしょうか?

教えていただけると助かります。

790 :デフォルトの名無しさん:04/11/20 16:47:08
>>789
EnumWindows

791 :733:04/11/20 16:55:22
>>734-735
ありがとうございます。
色の値をへこへこ書く方法に挑戦しているのですが、
COLORREF rgb;に色の値が入っていて、
LPBYTE lpPixel;がピクセルビットの先頭を指しているという場合、
ここからどうすればいいのでしょうか。カラービットは24です。

792 :789:04/11/20 17:04:47
>>790
ご返答ありがとうございました。


あと、一点ほど質問があるのですが、
人様のウィンドウハンドルを取得したとします。
そのウィンドウ(ハンドル)にイベントを送信できるのでしょうか?

たとえば、メモ帳が開いてあるとして、
そのメモ帳に自分が作ったアプリケーションからイベント(文字入力や改行など)を送ることができるのでしょうか?

もしできるとするなら、どのAPIを使えばいいのでしょうか?
再度の質問になりますが、ご返答いただけたらとても助かります。

申し訳ございませんが、よろしくお願いいたします。

793 :デフォルトの名無しさん:04/11/20 17:09:45
>>792
できる。
イベントを送るにはPost/SendMessageを使う。
戻り値を知る必要のあるときと引数にポインタを渡すときにはSendMessage()。
どちらにも当てはまらないときにはPostMessage()。迷ったらSendMessage()。

ちなみにメモ帳はメモ帳自身のウィンドウにエディトボックスが子ウィンドウとして張り付いていることに注意。

794 :デフォルトの名無しさん:04/11/20 17:10:29
ただし、文字列の送信は非常に面倒くさい。

795 :デフォルトの名無しさん:04/11/20 17:31:39
質問です
MessageBox()のオーナーウィンドウのハンドルをNULLにした場合で
プロシージャからMessageBox()を呼び出し、無視してオーナーウィンドウを操作して終了させた場合
MessageBox()を呼び出しているプロシージャが終了しないまま
実行ファイルが終了することになると思うんですが

プロシージャが終了していない=WinMain()のメッセージループに制御が戻っていない にもかかわらず
どうやってプロシージャが終了のメッセージを受け取り、実行ファイルが終了しているんでしょうか

796 :デフォルトの名無しさん:04/11/20 17:32:54
>>792
便利なAPIがあるぞ。
GetWindowThreadProcessId
GetGUIThreadInfo
これで得たフォーカスを持ったウィンドウに
SendMessageを送る。


797 :デフォルトの名無しさん:04/11/20 17:42:29
>>795
MessageBoxの中でメッセージループが回ってるから
そいつが終了イベントを拾ってウィンドウプロシージャが呼ばれる。

798 :デフォルトの名無しさん:04/11/20 17:55:34
MessageBox 内部のメッセージループは WM_QUIT がポストされると、
処理を終了するけど、もう一度アプリに WM_QUIT を送りなおしてたか
キューから取り除かなかったかしてたと思う。
その挙動を利用して MessageBox を自動的に閉じるテクニックがあったような。

で、MessageBox 関数から戻ってきた時にプログラムがどこまで解体されているかが
問題だね。WM_QUIT まで処理は進んでるんで、MessageBox 関数後の
処理でクラッシュするかもしれない。運良く本来のメッセージループまで
もどれたら、アプリは正常終了できるんじゃないかな。


799 :733:04/11/20 18:31:40
自己解決しました。

800 :デフォルトの名無しさん:04/11/20 18:47:03
>>797
>>798
THX
結局MessageBoxってWinMainのような
ウィンドウを生成してメッセージボックスをもつ仕様なんですね

801 :デフォルトの名無しさん:04/11/20 19:56:54
EnumWindowsでウィンドウハンドルを取得すると、
タスクバーに無い(見えない)ウィンドウらしきものも取得されるみたいですね。

デスクトップには実際に3つしかウィンドウを開いていないのですが、
100個ちかくのウィンドウが取得されます。

タスクバーにあるウィンドウ(アプリケーション含め)だけを取得したい場合はどうすればいいのでしょうか?

802 :デフォルトの名無しさん:04/11/20 20:02:40
// EnumWindows()ではIME等、不可視のウィンドウも全て列挙されるので
//ふるいにかける必要がある
if( ( IsWindowVisible( hWnd ) ) && // 可視状態か
( GetWindow( hWnd, GW_OWNER ) == NULL ) && // トップレベルウィンドウか
( lstrlen( szWindowName ) > 0 ) && // キャプションを持っているか
( lstrcmp( szClassName, "Progman" ) != 0 )) // シェルでないか
{


803 :デフォルトの名無しさん:04/11/20 20:07:30
>802
お前・・・それ試したか?

804 :デフォルトの名無しさん:04/11/20 20:10:43
試すのは >>801 の仕事

805 :デフォルトの名無しさん:04/11/20 20:10:58
猫サンネコネコネコミミモード♥

806 :デフォルトの名無しさん:04/11/20 20:36:32
>804
つまりお前の思い込みで書いたってことね。
納得。

807 :デフォルトの名無しさん:04/11/20 20:37:46
>>801
ITaskBar とかっていうインターフェイスなかったっけ?

808 :デフォルトの名無しさん:04/11/20 20:43:49
http://www1.harenet.ne.jp/cgi-bin/cgiwrap/unaap/bbs2/bbsdsp_itm.cgi?genrekey=api&logmode=2&tpckey=1035518663

809 :デフォルトの名無しさん:04/11/20 21:25:40
IInternetProtocol を実装して、独自の情報をIEコンポーネントに表示することは出来るのですが。
URLOpenBlockingStream / URLDownloadToFile / ATL::CBindStatusCallback::Download
など、データを取得する関数がことごとく失敗します。
(URLDownloadToFile にいたっては失敗したくせに成功コードを返してきます)
それぞれ 結果の Stream が NULL / ファイルが作成されない / OnDataAvailable が呼ばれない
という症状が出ています。
IEコンポーネントでは表示できるし、
実際にプロトコルハンドラの方にリクエストが来ていることは確認しました。
http などの定義済みプロトコルではこれらの取得関数は成功します。

どなたか成功したことのある方がいらっしゃったらお知恵をお貸しください。

810 :789:04/11/20 21:44:36
>>793
ご返答ありがとうございます。
試してみます。

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

811 :デフォルトの名無しさん:04/11/21 04:46:28
あるウィンドウに文字を送信したい場合、
SendMessegeの引数をどうすればいいのでしょうか?

ウィンドウハンドルは、hWnd
送信したい文字は「a」とするならば、どうなるでしょう?

教えていただきたいのですが、ご存知の方はいますか?

812 :デフォルトの名無しさん:04/11/21 04:59:25
MSDN の WM_CHAR を調べればいいと思う。

813 :デフォルトの名無しさん:04/11/21 05:30:10
>812
質問はそういう意味だったのか。よく分かるな。

814 :デフォルトの名無しさん:04/11/21 08:31:17
>>812 は細木数子
普通は SendMessage(hWnd, WM_HOGE, TEXT('a'), 0); って思うのが関の山

815 :デフォルトの名無しさん:04/11/21 09:00:49
GetWindowText
SetWindowText


816 :デフォルトの名無しさん:04/11/21 09:38:09
質問です。
VisualBasic6.0でAPI呼び出す方法を勉強したいのですが
解説されているサイトでお勧めなのを教えてください。

817 :デフォルトの名無しさん:04/11/21 09:42:35
http://www.google.co.jp/search?hl=ja&q=VisualBasic6.0%E3%81%A7API%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99&lr=lang_ja

818 :816:04/11/21 09:51:35
ありがとうございます。
でもgoogleは文章で検索するのは精度落ちるのであまりいい方法ではないですよ。
詳しくはこちらで
http://kagakuteki.poke1.jp/jokyu/google-shikumi.html

引き続きお勧めサイトの情報お待ちしております。

819 :デフォルトの名無しさん:04/11/21 10:31:17
>818
うーん、お前は死んだ方がいいぞ。
自分の書き込みをよく見直してから投稿しろ。

820 :デフォルトの名無しさん:04/11/21 11:02:24
>>818
このキーワードならどう?
http://www.google.co.jp/search?as_q=&num=100&hl=ja&c2coff=1&btnG=Google+%E6%A4%9C%E7%B4%A2&as_epq=Win32API&as_oq=VB+VisualBasic&as_eq=&lr=lang_ja&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=

821 :デフォルトの名無しさん:04/11/21 11:16:02
ちょっと調べてわからないんで、安直ですが、教えて。
モニタの色の設定が 256 とか 24 bit color とか調べる API はなんですか。

822 :デフォルトの名無しさん:04/11/21 11:28:43
>821
あんま自信ねーんだけど
GetPixelFormat と DescribePixelFormat でどうよ。

823 :デフォルトの名無しさん:04/11/21 11:59:04
今アクティブにしているウィンドウから、別にウィンドウへ切り替えたらときに出るWMメッセージってなんでしたっけ?
忘れてしまいました。
教えてください。すいません。

824 :デフォルトの名無しさん:04/11/21 12:20:11
>>821
GetDeviceCapsかな?

825 :デフォルトの名無しさん:04/11/21 12:21:18
>>823
ttp://www.geocities.jp/winapi_database/Message/WM/index.html

826 :デフォルトの名無しさん:04/11/21 12:26:54
>>816
このスレにはVBプログラマあんまりいないんじゃねえの…?
基本がわかってるなら「ダニエル・アップルマンのWin32 APIパズルブック」という本が面白かった。本だけど。
http://www.amazon.co.jp/exec/obidos/ASIN/4881357905/

>>821
GetDeviceCapsでどう?

>>823
SPYで調べろよ。WM_ACTIVATE

827 :816:04/11/21 13:26:28
>>826
ありがとうございます。
早速三省堂へ行ってきます。

>>819
在り来たりな言葉だが

  厨 房 必 死 だ な w

828 :デフォルトの名無しさん:04/11/21 13:50:04
うわ (;´Д`)y-~~ なんか俺と同じニオイがするな

829 :821:04/11/21 14:13:41
>>824, >>826 ありがとうございます。
MSCN のサンプルに 1<<GetDeviceCaps(hDC, BITSPIXEL) で色数を求めている例が
ありました。24 bit 前提でソフト組んでて違うモニタで一瞬びっくりでした。
>>822
どうもありがとうございました。取り合えず多数意見に従いました。
ご指摘の API も知りませんので、後で、勉強させてもらいます。

830 :デフォルトの名無しさん:04/11/21 14:21:57
ListViewの選択されているアイテムの選択色を
カスタムドローで変えるにはどうすれば良いのでしょうか?

CDDS_ITEMPREPAINTで(何故かuItemStateが全てCDIS_CHECKED | CDIS_SELECTED)
選択アイテムとそれ以外を区別する所までは上手くいっているのですが
選択アイテムの時に新しいカラーを指定しても反映されず、元の反転色のままで困っています。

831 :デフォルトの名無しさん:04/11/21 14:38:52
>>827
819では無いが、Googleを使いこなす努力は必要だろ
適切なキーワードを入れれば、精度は上がるし、その努力が足りない事をGoogleの性にするのはどうかと思うぞ

832 :デフォルトの名無しさん:04/11/21 14:48:41
わざわざ本など買わんでも
>>820の最初のリンク先で十分じゃん。

833 :デフォルトの名無しさん:04/11/21 14:50:38
自作自演

834 :デフォルトの名無しさん:04/11/21 14:54:45
>823
忘れたんじゃなくて元々知らないんでしょ。
見栄張らなくていいよ。ま、見栄にもなってないけど。

835 :デフォルトの名無しさん:04/11/21 15:20:12
>>831
質問しに来て逆切れするのはそれ以前の問題だろ

836 :デフォルトの名無しさん:04/11/21 15:24:19
>>831
よく分からん。誰に言ってるんだ?

837 :デフォルトの名無しさん:04/11/21 15:26:38
いや 816 は逆ギレもしてねえぞ
ごく平静に礼儀をもって話しているつもりがあのとおり
要するに人格障害だ
一番苦しいのは本人てとこで許してやろうぜ(・∀・)ニヤニヤと

838 :デフォルトの名無しさん:04/11/21 16:31:27
>>836
>>816>>817>>818>>819>>827
質問→ググれ→Googleは精度悪い、ちゃんとサイト出せ→煽り→煽り
って流れ。
>>818でGoogleがダメだから見つからないって言い訳してるが、
>>820のようにキーワードを工夫する事無く、サイトが見つからないのをGoogleの性にするのは問題ありって話
本質的には、>>835の言うように問題外だけど

839 :デフォルトの名無しさん:04/11/21 17:57:51
SysMsgProcでMSGF_MENUなメッセージを捕まえてあれこれしようと思ったんですが、IEの「お気に入り」とか「スタートメニュー」は「メニュー」じゃないらしくて、メッセージが来ないんですよ(とりあえず、手元のW2K+SP4+IE6ではそうでした)。
こういう偽物(?)をひっくるめたメニュー由来のメッセージを扱う方法はないものでしょうか?
メニューも子ウィンドウの一種らしいんで、ウィンドウのハンドルからそれがメニューっぽいかどうか判別できれば良いんじゃないかと思うんですが…

840 :デフォルトの名無しさん:04/11/21 19:11:13
エディットテイストで文字列を設定するのは、SetWindowText( HWND hwnd, LPCSTR lpString)ですが、
今エディットテキスト内にあるテキストの指定した部分に文字列を挿入したい場合は、どのAPIをつかえばいいのでしょうか。

申し訳ございませんが教えていただきたいです。

841 :デフォルトの名無しさん:04/11/21 19:25:41
>840
GETしてSET

842 :デフォルトの名無しさん:04/11/21 19:30:13
>>840
EM_REPLACESEL

843 :デフォルトの名無しさん:04/11/21 19:52:40
>>841
ハッととしてグー

844 :デフォルトの名無しさん:04/11/21 20:17:57
>>728
そろそろ、誰か答えてもらえないかのぉ

845 :デフォルトの名無しさん:04/11/21 20:39:21
>844
まだ誰も答えてなかったんだ。
GetPageMemSize
でしょ。

846 :モウモウ:04/11/21 20:44:15
>>845 そんな API あるんですかい?
GetProcessMemoryInfo じゃないのか?
NT系限定だけど。

847 :モウモウ:04/11/21 20:48:00
あと、VirtualQueryEx でもできたような気がする。
こちらは 9x系でも使える。

848 :816:04/11/21 21:03:19
>>826
本購入しました。少し難しいですけど頑張って勉強することにします。
どうもありがとうございました。

>>838
少々誤解されているので一応補足します。
>Googleは精度悪い、ちゃんとサイト出せ
これは全く的外れです。
Googleは精度悪いなど言ってません。
>>818で述べたように「文章で検索するのは精度落ちるから
「キーワードで検索するほうがよい」といった意味で教示したまです。
リンク先を読めば理解できると思うのですが。
私が希望したサイトの情報の回答がこの時点で得られてないので引き続き回答を
受け付けていると言ったまでです。
本当に意図が理解できなかったのか、それとも揚げ足を取りたかったのかどちらでしょう?
いずれにしても非常識極まりないですし、こちらとしても不愉快です。
長い間このスレにいますが、少々良識ない人間が最近入り込んでいて残念に思います。

849 :816:04/11/21 21:05:50
もう一つ補足。
「文章で検索するのは精度落ちる」というのは
>>817に対するレスです。
「VisualBasic6.0でAPI呼び出す」という文章で検索してるので
キーワード絞って検索したほうがいいといった意味で
参考までに>>818のリンクを貼りました。
>>817が少しでも正しくgoogleを使えるようになるといいと思います。

850 :デフォルトの名無しさん:04/11/21 21:21:36
>849
やっぱ死んだ方がいいよ、君は。
同じ失敗をまた犯している。もう救いようがないな。

851 :デフォルトの名無しさん:04/11/21 21:30:52
>>850
死ななくて良いけど、ネットはしない方が良いな
人付き合いも問題がありそうだから、プログラミングよりそっちの勉強をした方が良い
最近は職業訓練所とか行けばやってくれるのか?

852 :デフォルトの名無しさん:04/11/21 21:40:49
まぁ>>816の意図はどうあれ大抵の人は
「またカキコしてるようぜぇな」とレスを読んでません

853 :デフォルトの名無しさん:04/11/21 21:56:50
バカって API 呼び出すのもいちいち本買わなきゃならんのか。
大変ですな。

854 :デフォルトの名無しさん:04/11/21 22:04:15
全くもって残念極まりないです

855 :デフォルトの名無しさん:04/11/22 00:44:42
ム板をリファレンス代わりにするのが天才。

856 :デフォルトの名無しさん:04/11/22 01:22:02
調査方法の基本を知らんDQNがカメレオン現象でわめくから・・・

857 :デフォルトの名無しさん:04/11/22 09:10:27


858 :デフォルトの名無しさん:04/11/22 11:57:19
カメレオン現象ってなんだろ?Googleさんも15件しか知らない言葉だ

859 :デフォルトの名無しさん:04/11/22 12:47:53
>858
つか、相手にするな。

860 :デフォルトの名無しさん:04/11/22 15:20:56
>>846
さんくすこ

861 :デフォルトの名無しさん:04/11/22 16:09:47
MFCを使用せずに、リッチエディットコントロールを使った簡単なテキストエディタを作成しています。
文中に特定のワードが現れたときに、その部分だけ色を変えたいのですが、うまくいきません。

普通に入力していき、特定ワードが完成した瞬間にその部分の色が変わり、
逆に一文字削除したらその瞬間に元の色に戻るようにしたいのです。

特定ワードをハイライトする部分は完成したので、
「テキストファイルを読み込んだ直後、一度だけ色付けする」
というようなことなら出来ていますが、リアルタイムに変更させることができません。

具体的には、
1)メインウィンドウの中にリッチエディットコントロールを貼り付ける
2)ウィンドウメッセージを監視して、WM_KEYDOWNの瞬間にリハイライトルーチンを呼ぶ
ということを行っていますが、
リッチエディットウィンドウ内で一度マウスをクリックして、カーソルが「I」の形に変化した状態になると、
いくら文字を入力してもWM_KEYDOWNを検知することができません。

C/C++は15年くらい経験があるのですが、Windowsプログラミングは全くの初心者なので、
根本的に違っていたらご指摘ください。


862 :デフォルトの名無しさん:04/11/22 16:23:47
>>861
リッチエディトコントロールの中で起こる事はリッチエディトコントロールのウィンドウプロシージャが処理するから、
親ウィンドウではいくら待ってもWM_KEYDOWNは来ない。
代わりにWM_COMMANDでEN_CHANGE通知メッセージが来るのをを待てば良いんじゃないかな。
そしてEN_CHANGEが来るようにするにはリッチエディトコントロールへEM_SETEVENTMASKメッセージを送る必要がある。

863 :デフォルトの名無しさん:04/11/22 16:33:45
>862
ありがとうございます。

864 :861:04/11/22 16:42:50
>>862
ありがとうございます。
>>863
私の代わりにどうもです(w


865 :デフォルトの名無しさん:04/11/22 16:49:27
#define UNICODE
#define _UNICODE
ではなにが違うのでしょうか?

866 :デフォルトの名無しさん:04/11/22 16:55:55
ヘッダからのコピペ

#ifdef _UNICODE
#ifndef UNICODE
#define UNICODE // UNICODE is used by Windows headers
#endif
#endif

#ifdef UNICODE
#ifndef _UNICODE
#define _UNICODE // _UNICODE is used by C-runtime/MFC headers
#endif
#endif


867 :デフォルトの名無しさん:04/11/22 16:58:38
>>865
UNICODEはWindows.h以下でAPIやTEXT/__TEXTマクロ、TCHARなどの切替。
_UNICODEはTChar.hでCライブラリ関数や_tmain/_tWinMain、_TEXT/_Tマクロ、_TCHARなどの切替。

868 :デフォルトの名無しさん:04/11/22 17:26:33
>>866-867
レスありがとうございます。
CライブラリやMFCを使っている場合は_UNICODEもしろって感じですかね(自信なしです

869 :デフォルトの名無しさん:04/11/22 17:28:31
>>868
>>866読め。どっちかが定義してあればもう片方も定義されるようになっている。

870 :デフォルトの名無しさん:04/11/22 17:50:53
常に両方指定してても問題無いですよね?

871 :デフォルトの名無しさん:04/11/22 17:55:58
>870
全部聞くなよ。最近この手の新人多いんだよなー
全ての判断を人に委ねる奴。
ひどい評価付けてやってるけどね。

872 :865:04/11/22 18:09:19
>>870は私じゃありません
_UNICODEでコンパイルしてみたら「wsprintf・lstrlen・DrawText」が通らなかったので調べてました
とりあえず私は両方使います orz

873 :デフォルトの名無しさん:04/11/22 19:38:48
>>872
単に渡してる文字列がcharになってるだけだな。
間違いない。

874 :デフォルトの名無しさん:04/11/22 19:44:29
>873
うーん、それはありうりますなぁ

875 :デフォルトの名無しさん:04/11/22 19:55:35
ありうりそがりいまそがり

876 :デフォルトの名無しさん:04/11/22 20:56:20
>875
アホ

877 :デフォルトの名無しさん:04/11/22 21:46:25
>>875-876
s/う/お/
古典スレ池


878 :デフォルトの名無しさん:04/11/22 21:47:10
s/う/を/

879 :デフォルトの名無しさん:04/11/22 22:06:53
>877-878
くだらん

880 :デフォルトの名無しさん:04/11/22 22:54:51
「はべり」を指摘してないので全員アホ

881 :デフォルトの名無しさん:04/11/22 22:56:35
>880
アホじゃないけど存在不要

882 :デフォルトの名無しさん:04/11/23 04:05:27
ここはひどいインターネッツですね

883 :デフォルトの名無しさん:04/11/23 07:02:31
>882
アホ

884 :デフォルトの名無しさん:04/11/23 07:42:23
そろそろこのスレも閉鎖かな?

885 :デフォルトの名無しさん:04/11/23 08:47:06
>884
そうだな。どうせろくな回答もないし。

886 :デフォルトの名無しさん:04/11/23 08:54:25
じゃあスレ住民の総意で次スレは無しということで。

887 :デフォルトの名無しさん:04/11/23 09:05:16
>>885
そもそもまともな質問がないからな。

888 :デフォルトの名無しさん:04/11/23 09:05:46
>886
いいとも

>887
ごもっとも

889 :デフォルトの名無しさん:04/11/23 13:32:59
次スレ
http://pc5.2ch.net/test/read.cgi/tech/1057225723/


890 :デフォルトの名無しさん:04/11/23 13:56:04
質問です。

switch(msg)
case WM_COMMAND:
 //処理(ボタンとかメニューとかを処理)

 return 0;
case WM_NOTIFY:
 //処理(リストビューとかの処理)

 return 0;
}

ってやってたんですけど。
これってやっぱりreturnしちゃまずいですかね?
HIWORD(wp)とかLOWORD(wp)とかある場合だと自分が処理する以外の
他のメッセージとかDefWindowProcにいかないので処理されないですかね?

891 :デフォルトの名無しさん:04/11/23 14:20:14


892 :デフォルトの名無しさん:04/11/23 15:41:08
>>890
それ、動かしてみたか?
まともに動くわけ無いだろ。

893 :デフォルトの名無しさん:04/11/23 15:44:33
>892
この手の質問する奴ってまともに動いてるかどうかの
判断もできてないから問題ないんじゃない?

894 :デフォルトの名無しさん:04/11/23 15:45:03
>>890
場合による

895 :581:04/11/23 16:19:37
>>581を教えて下さいお願いします。

896 :デフォルトの名無しさん:04/11/23 16:36:31
素直にダイアログボックス作って貼れ

897 :デフォルトの名無しさん:04/11/23 16:37:22
>>892
実際はDefWindowProcが一番下にあって
switch文のWM_COMMANDの中身は
switch(HIWORD(wp)とか判断してBN_CLICKとか
switch(LOWORD(wp)とかIDC_XXXとかあるわけですよ。

んで、実際に動いてます。
いまのところなんの支障もありません。
また、return 0で返してしまおうが、breakでぬけて
DefWindowProcに渡そうが動作はまったく変わりません。

898 :デフォルトの名無しさん:04/11/23 16:51:35
WM_COMMAND に関してはシステムは何もしないから、
return で帰ろうと、DefWindowProc に渡しても違いは無いよ。


899 :デフォルトの名無しさん:04/11/23 16:52:25
switch文の勉強しような

900 :デフォルトの名無しさん:04/11/23 16:55:52
返却値はメッセージによって違う
同じメッセージでもSDIかMDIかによって変わる
ヘルプ読む

901 :デフォルトの名無しさん:04/11/23 17:01:19
>>898,900
そうなんですか。
いまのところSDIのアプリしか作ったことがないので
その辺気にしたことがありませんでした。
ありがとうございます。


902 :デフォルトの名無しさん:04/11/23 20:06:02
WINE って Win32 API を独自に実装しているのでしょうか?
それとも Windows のシステム DLL を逆アセして、
C 言語で書き直しているんでしょうか?

903 :デフォルトの名無しさん:04/11/23 20:33:41
>902
アホ

904 :デフォルトの名無しさん:04/11/23 20:35:09
こんばんわ

Winsockでヤフーのサーバwww.yahoo.co.jpへGET送信したんですけど、
返答してきたデータが文字化けをしてるんですね。
これってなぜこうなるのかご存知でしょうか?

HTTP/1.1 200 OK
Date: Tue, 23 Nov 2004 11:29:45 GMT
Cache-Control: private

(一部省略)

Content-Type: text/html;charset=euc-jp
Content-Encoding: gzip

domain=.yahoo.co.jp

25aa
・ミソノ・1」Xル^+<-箕tウ葎クmxョ・rヲ・ロ厩ロ]鑒/lレ哩・@ュrq
&Y1i
ー諢ュ3ャヘT=JS^忸07ヘU

・4#2仕!フh暮ォR)9「。リリ&ォ帥Rエャ 1ocW^?e+{・ィ3H煬ア4y・ハラェTa・8蘇3・dA慢埒8&イ_・A ・リ

v咽「ェjゥ0オ<フク=E{BC}Gナヲゥ-マHュ・K)9)%g・゚ヤエョコタE「
゚Fタt・S・・エサΜ怯設オ(t綉驕E

=zgV」ソbレXPGqヒ!イ啓~カ求EqW'Nコ+ケ~%p&恩・・

905 :デフォルトの名無しさん:04/11/23 20:37:57
> Content-Type: text/html;charset=euc-jp
> Content-Encoding: gzip

これ見た?

906 :デフォルトの名無しさん:04/11/23 20:56:20
>904
すげーな。わかんないところは適当に読み飛ばしか。

907 :デフォルトの名無しさん:04/11/23 20:59:08
>>904
Content-Type: text/html;charset=Shift_JIS
をつけてGETすれば、おk

908 :デフォルトの名無しさん:04/11/23 21:00:02
>>907
なんか勘違いしてないか?

909 :デフォルトの名無しさん:04/11/23 21:07:53
>>904
GET送信する際、恐らくAccept-Encoding: gzipと入れてるのでしょうか?

Accept-Encodingは圧縮されて受信しますので、そのような文字化けされた形になります。
Accept-Encodingを削除してGET送信してみてください。
プレーンのテキストで受信されますよ。

910 :デフォルトの名無しさん:04/11/23 21:18:42
>>902 だれか知らない?

911 :デフォルトの名無しさん:04/11/23 21:23:43
>>910
たぶん(最悪でも建前上は)前者じゃないと駄目だろ。

912 :デフォルトの名無しさん:04/11/23 21:25:38
>>911
でも、相互運用のための逆アセは合法だって聞いたよ。

913 :デフォルトの名無しさん:04/11/23 21:29:37
>912
誰に?

914 :デフォルトの名無しさん:04/11/23 21:30:34
米国の話。
実際にそれをやった企業があるらしいし、
裁判になって勝った例もあるらしいよ。

915 :デフォルトの名無しさん:04/11/23 21:33:09
EU の例だけど、↓ここを「相互運用」で検索すれば出てくる。
http://www.cric.or.jp/houkoku/h6_5/h6_5_main.html


916 :デフォルトの名無しさん:04/11/23 21:34:05
>915
サンクス

917 :916:04/11/23 22:03:25
    ヽ、  `;、                     .;            丿  ノ
      ` 、_,{ `‐、_                 ,*           ,、' ~`y'
         )  r' ~`'rr-、、,,,_          ,ノ"§        _,、<   ,;;ゝ
        `~`i'   ,'r´:::::::::`;丶、 ,_    _,,、-'´,ノ ,ノ      ,、 ‐'"`, ';‐'"
          ,'  ,','::::::::::::::,'    `````  `"´ `"´~`''''''''''T´::::::::::::::',', |
          i   ,','::::::::::::::,'         ( ) (ブリブリッ',::::::::::::::::::ii :!
         ,r'"  ,','::::::::::::: ,'           ).∧  )   ',::::::::::::::::::!! i、
       r''"'  ノノ:::::::::::: ,'            (:::::::::)    ',::::::::::::::::',', i!ヽ
       {____,、-'/:::::::::::::;;'     ポルポト  (:::::::::::::::)   ',:::::::::::::::::ヾ、__)

918 :デフォルトの名無しさん:04/11/23 23:44:00
Win32APIのリファレンス本として「Win32 APIオフィシャルリファレンス改訂3版 グラフィック/GUI編 Ascii books」を買おうかと思うのですが、
どうでしょうか?
ほかにもっといいリファレンスなどありますでしょうか?
(MSDNライブラリなどは入っていますが、持ち歩きたいので)

http://www.amazon.co.jp/exec/obidos/ASIN/4756137482/qid=1101220486/sr=1-1/ref=sr_1_10_1/249-3121052-5258703

919 :デフォルトの名無しさん:04/11/23 23:49:48
>>918
MSDNライブラリを持ち歩け

920 :デフォルトの名無しさん:04/11/24 00:16:42
携帯用 MSDN ビューワ
http://www.vaio.sony.co.jp/Products/VGN-U50/
どぞ。

921 :デフォルトの名無しさん:04/11/24 00:21:56
そんなお金があればうれしいのですが・・・・

922 :デフォルトの名無しさん:04/11/24 06:05:34
>>918
それ買ってみたけど損したよ
関数の解説だけで構造体の解説が載ってないのがリファレンスとして片手落ち。
構造体の解説を読むにはMSDNを開く必要がある… 結局MSDNしか使ってない罠。

923 :デフォルトの名無しさん:04/11/24 09:00:32
コンボボックスで、ボタンを押してアイテムを選ぶのではなく
何かメッセージを送って任意のアイテムを選択させるやり方を教えてください

924 :デフォルトの名無しさん:04/11/24 09:43:26
CB_SETCURSEL

925 :デフォルトの名無しさん:04/11/24 10:35:10
>>924
ありがとうございました

926 :デフォルトの名無しさん:04/11/24 11:38:28
例えば20秒ごとにプログラムを動かす時に使うような
経過した秒数がわかるようなAPIを教えてください

927 :デフォルトの名無しさん:04/11/24 11:40:59
GetTickCount



928 :デフォルトの名無しさん:04/11/24 11:50:40
でも、起動には SetTimer() を使ってねっ♥

929 :デフォルトの名無しさん:04/11/24 12:05:35
>>927
>>928
レスありがとうございます
GetTickCountとSetTimer()の長所と短所を教えてください
どっちを使った方がいいのか迷ってしまいました

930 :デフォルトの名無しさん:04/11/24 12:10:38
>>929
両方やってみろ

それで分からなかったら、頭悪すぎだからプログラムやめとけ

931 :デフォルトの名無しさん:04/11/24 12:10:48
火を見るより明らか
GetTickCount() 無限ループ
SetTimer() イヴェントドリヴン


932 :デフォルトの名無しさん:04/11/24 12:39:37
>931
それは>929に対する回答にはなってないですね。

933 :デフォルトの名無しさん:04/11/24 13:14:57
>>929
両者は、使用目的が違うので比較するようなものではないです。
ループで GetTickCount() の値の変化を待つのは
CPU時間の浪費につながるので、あまり望ましくないのです。

934 :デフォルトの名無しさん:04/11/24 13:37:14
>>932
それがどうかしましたか?

935 :デフォルトの名無しさん:04/11/24 13:48:40
>934
いいえ

936 :デフォルトの名無しさん:04/11/24 13:49:55
すべてはわたしがつくったモノなのです

937 :デフォルトの名無しさん:04/11/24 16:14:11
マルチメディアタイマー

938 :デフォルトの名無しさん:04/11/24 17:27:38
TextOut (hdc, (22 * cxCaps) + (40 * cxChar), cyChar * i,
szBuffer,
wsprintf (szBuffer, TEXT ("%5d"),GetSystemMetrics (sysmetrics[i].iIndex)));
というコードがあったのですが%5dってどういう言う意味なんでしょうか。
%dとの違いがよくわからず困ってます。


939 :デフォルトの名無しさん:04/11/24 17:37:11
APIの説明の width のところを読め

940 :デフォルトの名無しさん:04/11/24 17:37:12
5桁

941 :939:04/11/24 17:41:33
すいません。訂正します。
APIの説明の width のところを読んでください。

942 :本物の939:04/11/24 18:01:20
騙るな、この野郎
訂正なんかしねえぞ

943 :938:04/11/24 18:05:20
荒れ気味なのでほかで聞きます。

944 :940:04/11/24 18:27:10
俺は無視かよ

945 :デフォルトの名無しさん:04/11/24 18:32:06
当然無視

946 :939:04/11/24 18:33:19
すいません。今精神が不安定で通院中なんです。
本当にすいません。病気なので許してください。

947 :デフォルトの名無しさん:04/11/24 19:43:53
>>944
とりあえず、これからも頑張ってくれ

948 :デフォルトの名無しさん:04/11/24 20:43:42
フォルダ選択ダイアログの出し方を教えてください。

開発環境はC言語、ボーランドです。

949 :デフォルトの名無しさん:04/11/24 20:46:57
>948
SHBrowseForFolder でググってください。

950 :デフォルトの名無しさん:04/11/24 20:47:24
SHFolderなんとかを使う

951 :デフォルトの名無しさん:04/11/24 20:50:58
>949
それそれ

952 :デフォルトの名無しさん:04/11/24 21:05:08
>>948
VisualC++逆引き大全500の極意
って本がかなりいいよ。
MSDNの100倍役に立つ。
これからは「MSDNの100倍役に立つVisual(以下略
って出してもいいくらい。

最近MSに下記原文まんま(ハゲ抜かしてw)で送ってみた。

おい!MS!てめぇんところにもう何年投資してやってるとオモテンだ!ハゲ!
いつになったらWin32APIが日本語訳されんだよ!ハゲ!
全然進歩してねぇよ。ハゲ!
最近じゃ英語ヘルプも含めて、日に日にWin32APIにヒットしなくなってるのは
どういうことだよ。ハゲ!
日本語訳そっちのけで、新機能なんか追加してんじゃねぇよ!ハゲ!
フィルタの種類ももニーズにあってないんだよ!ハゲ!
センスの悪さがMSDNからにじみ出てんだよ!ハゲ!

まだ、レスが返ってこないよw

953 :デフォルトの名無しさん:04/11/24 21:11:56
>>952
ゲイツ「これだから英語も出来ない極東の小国の民は困る」

954 :デフォルトの名無しさん:04/11/24 21:27:22
>>952
VisualC++逆引き大全500の極意
買ったけど損した。
使えるサンプルコードが少なすぎ。

たとえばSHBrowseForFolder の所なんかサンプルコードないだろ

955 :デフォルトの名無しさん:04/11/24 21:45:11
>>954
でも、ここまで詳しく書いてあれば十分だよ。
俺はその存在をしっただけでもよかった。

956 :デフォルトの名無しさん:04/11/24 21:46:05
逆引き大全、俺も VC++ を始めたての頃に買った。
誤植も多いけど、結構役に立ったよ。初心者にはいいと思う。

957 :デフォルトの名無しさん:04/11/25 00:52:04
htmlでルビ付きの文字列を作成し、それをVB6で
WebBrowserを使用してフォーム上に表示してますが、
WebBrowserは透過が出来ないため、WebBrowserの背景が
長方形型にくっきりと残ってしまいます。
どうしても、枠を消してフォームの背景上にWebBrowserの
ルビ付き文字だけを表示させたいのです。

VBでWebBrowserを透過表示させる方法を教えてくらはい

958 :デフォルトの名無しさん:04/11/25 05:42:16
たしかにMSDNは逆引きには向いてないな。
とくにShell/OLE/COM周りは。

959 :デフォルトの名無しさん:04/11/25 05:57:27
>>957
特に簡単な手はないです。get_Documentでドキュメントを手に入れて、
body の style を操作して背景イメージを適切に設定するのが良いと思います。

960 :デフォルトの名無しさん:04/11/25 06:07:00
逆引きだったら
VC++によるWin32プログラミングTips
http://www.expertmg.co.jp/html/cti/vctips/

フォルダ選択ダイアログの実装もちゃんとコードつきで説明がある。



961 :デフォルトの名無しさん:04/11/25 07:26:01
なぁ?
ディレクトリリストボックスってなかったっけ?
なんか古いタイプのファイルオープンダイアログにはついてんだけどなw
単体では無いんだなw

962 :デフォルトの名無しさん:04/11/25 07:29:10
LB_DIRのことか?

963 :デフォルトの名無しさん:04/11/25 07:37:18
>>962
おお!それそれ!
なるほどリストボックスだったんか・・・
SHBrowseForFolderとどっちがいいかな?

964 :デフォルトの名無しさん:04/11/25 07:50:31
>>936
ワラタ

965 :デフォルトの名無しさん:04/11/25 09:48:35
コンボボックスのオプションで
HTMLのOPTGROUPの様なものはありますか?

966 :デフォルトの名無しさん:04/11/25 15:20:56
コマンドラインやD&Dで渡されたファイル名を全部取り出すには
GetCommandLine() の返り値を全部解析するしかないですか?

またコンソールプログラムの場合はmain() の argc, argv でいいんですか?

967 :デフォルトの名無しさん:04/11/25 15:27:58
Win2K、VB6で開発を行なっています。
NetUserGetLocalGroupsを使ってUserの所属するグループを取得しようとしているのですが、
同じUser名でドメインの違うユーザーの区別はどうすれば良いのでしょうか?

NetUserEnumでUser名を列挙すると、"UserName"、"VUSR_USERNAME"と区別されているよう
なので、返された名前をNetUserGetLocalGroupsに渡してみたのですが"VUSR_USERNAME"の
方で関数が失敗してしまいました。


968 :デフォルトの名無しさん:04/11/25 15:34:57
MSDNに
<DomainName>\<UserName>
て書いてるけど

969 :デフォルトの名無しさん:04/11/25 15:57:48
>>966
NT系ならCommandLineToArgvWがつかえる。

970 :デフォルトの名無しさん:04/11/25 16:12:02
>>968
ああ、本当だ。吊ってくる..(´・ω・`)ショボーン
グループは取得できました。ありがとうございました。

それと、USR_USRERNAMEは何の関係も無かったです。

971 :デフォルトの名無しさん:04/11/25 16:20:39
WriteFileにてテキストファイルを上書きするとき、
元々書いてあった文字列より短いものを上書きすると、
前の内容が残っているようです。

↓こんな感じになります。
ファイルの文字列「あいうえお」
上書きする文字列「OK」
更新後のファイル文字列「OKうえお」

解決法を賜りたいです。

972 :デフォルトの名無しさん:04/11/25 16:30:34
>>971
SetEndOfFile

973 :971:04/11/25 16:33:01
>>972
ありがとうございます。
それを調べてみます。

974 :デフォルトの名無しさん:04/11/25 17:16:15
Windows XP 64-bit Edition上で32bitアプリから64bitアプリが
CreateProcess()で起動可能か検証したことのある方。
できましたでしょうか?

975 :デフォルトの名無しさん:04/11/25 17:18:28
>>969
ありがとうございます。

976 :デフォルトの名無しさん:04/11/25 18:06:05
例えばWindowsの検索を選んで、検索したいファイル名やフォルダを探すため、
エディットボックスのハンドルを得ようとしますよ。
その際、僕はVC++のSpyとか言うのを使って、子ウィンドウとなっているそれが
上から何番目になってるか調べてChildWindow(?)とかいう関数を使ってGW_NEXT
で順々にハンドルをとる、面倒で馬鹿な事やってるんですが、
これ以外にいい方法はありませんか?


なんかわかりにくいですが、要は一発で
検索のような入り組んだアプリケーションの、エディットボックスのハンドルを得たいんです。
無理でしょうか?

977 :デフォルトの名無しさん:04/11/25 18:15:35
>>976
ウィンドウクラスで検索して、GetDlgCtrlIDでコントロールIDを取得して
目的のものかどうか判断するってのはどうでしょう?

978 :デフォルトの名無しさん:04/11/25 18:59:12
前の方に出ていたOpenProcessToken()とCreateProcessAsUser()を使ってサービスからログオンユーザーの
デスクトップでアプリを実行させようと思ったんですが、ログオンユーザーのプロセスハンドルの取得
方法が分かりません。どうやってアカウント名からプロセスハンドルを引っ張ってこればよいですか?


979 :デフォルトの名無しさん:04/11/25 20:36:03
CreateWindowExでリストボックスを作っているのですが、
コレは・・・高さが文字の高さの整数倍にしかならないみたいなんですけど、
ウィンドウの幅にぴったり合わせるにはどうしたらいいでしょうか?
今はMoveWindowでウィンドウに合わせようとしています。

980 :デフォルトの名無しさん:04/11/25 20:50:47
>>978
LogonUser( "UserName", NULL, "Password", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
& hToken );
でトークン作ったほうが簡単。

981 :デフォルトの名無しさん:04/11/25 22:13:36
>>980
その方法だとパスワード引っ張って来るのに、gina.dllに細工するとかちょっと仕掛が必要ですよね?
ちょっち、難易度が高い気がするです。

各アカウントのパスワードをユーザーに開示してもらうっていうのも現実的ではないですし…困り
ました。


982 :デフォルトの名無しさん:04/11/25 22:33:37
winsta0のプロセスと同じアカウントである必要はなしです。
適当な実行権があればCreateProcessAsUserはwinsta0\Default上に起動しますが。
(つかSIDからトークンにするやり方わからん)

983 :デフォルトの名無しさん:04/11/25 22:58:54
だから>>732だっつってるのに。
このスレだけで三度目だぞその質問

984 :デフォルトの名無しさん:04/11/25 23:04:02
ああ方法が分からないって言ってるのか。
現在ログオンしてるユーザーでいいんだろ?
だったら現在走行中のプロセス列挙してどれでもOpenProcessすればいい
どのプロセスもwinlogonが作成したトークンを引き継いでるはずだから
(Terminal Serviceや「ユーザーの切り替え」や「別のユーザーとして実行」は
考慮してないが)

985 : ◆Manna2uCLg :04/11/25 23:13:33
ちょっくら次スレたててきますよ。

986 : ◆Manna2uCLg :04/11/25 23:17:15
すまん、立てられなかった。orz

↓代わりによろしく

987 :デフォルトの名無しさん:04/11/25 23:27:49
まかせろ

988 :デフォルトの名無しさん:04/11/25 23:34:19
Win32API質問箱 Build25
http://pc5.2ch.net/test/read.cgi/tech/1101393155/

989 :デフォルトの名無しさん:04/11/25 23:34:52
ほれ
http://pc5.2ch.net/test/read.cgi/tech/1101393155/

990 :デフォルトの名無しさん:04/11/26 08:34:43
>>978
これじゃダメなんかい?
ttp://support.microsoft.com/default.aspx?scid=kb;ja;173687

991 :デフォルトの名無しさん:04/11/26 13:05:36
>>990
それだと権限がLocalSystemのままだから危なくない?
ってリンク先にも書いてるけど

992 :979:04/11/26 15:26:50
もう一つ質問です。
リストボックスの文字色を変えるにはどうしたらいいんでしょうか?
エディットボックスの場合には、WM_CTLCOLOREDITをつらまえて
SetTextColorで変更できたのですが、
リストボックスの場合は、WM_CTLCOLORLISTBOXをつらまえて
SetTextColorをやっても変更されません。
フォントの種類は変更できました。

リストボックスの文字色は、部分的にではなく、
全体としての文字色を変えたいです。
検索してオーナードローが出てきたのですが、
オーナドロー時にSetTextColorをやっても変更できませんでした。
よろしくお願いします。

993 :デフォルトの名無しさん:04/11/26 15:31:31
>>992
    [SetWindowPos]
∀・)っ[カスタムドロー]

994 :デフォルトの名無しさん:04/11/26 17:04:00
>>992
UIの部分だけVBで作るっていう手もあるけど・・・

995 :デフォルトの名無しさん:04/11/26 17:15:11
指定したファイルが更新された場合に通知してくれる
APIがあったと思うんですが、関数名なんでしたっけ?

誰かご存知の方ご教授願います

996 :デフォルトの名無しさん:04/11/26 17:52:43
FindFirstChangeNotification?

997 :979:04/11/26 18:24:29
ありがとうございます。

>>993
それで頑張ってみます。

>>994
VBは触ったことがないので分かりません。
ごめんなさい。

998 :デフォルトの名無しさん:04/11/26 18:32:54
リストボックスはカスタムドローできない。
できるのはリストコントロール。

999 :デフォルトの名無しさん:04/11/26 18:41:35
>>996
これです。ありがとうございました!

1000 :デフォルトの名無しさん:04/11/26 18:47:36
1000

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

250 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)