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


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

Win32API 質問箱
1 名前:デフォルトの名無しさん :2001/06/03(日) 23:02
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。

Win32API以外の質問については >>2 を参照。

2 名前:デフォルトの名無しさん :2001/06/03(日) 23:03
 すれ立てるまでもない質問はここで 第2刷
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=990082077
 VC++初心者質問スレ
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=984812029
 C++Builder相談室
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=969458279
 C言語なら、オレに聞け! <2>
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=979529893
 なぜC++はあんなに難しいのか?
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=982758107
 C#相談室
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=977112364
 鬱だ氏のうDirectX
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=966655286
 Java相談室 Part2
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=980858322

3 名前:デフォルトの名無しさん :2001/06/03(日) 23:04
コンテキストメニューをWinZipみたいにオーナードローするにはどうやったらいいすか?

4 名前:デフォルトの名無しさん :2001/06/04(月) 01:50
よくわかんねーけど、
http://piza.2ch.net/test/read.cgi?bbs=tech&key=973187725
こっちじゃできないの?

5 名前:デフォルトの名無しさん :2001/06/04(月) 02:19
1は最近来たのか?>>4が正しいよな

しかしギコ猫の相談スレが、スレ立てるまでも…に駆逐された
例もあるし、はてさてどうなるかな。ま、頑張ってくれ

6 名前:デフォルトの名無しさん :2001/06/04(月) 17:33
あっちは雰囲気がいやだからあえてこっちに書き込む(w

>>3
普通にHMENUでオーナードローできない?

7 名前:デフォルトの名無しさん :2001/06/04(月) 17:37
クリップボードの変更ってどうやったらわかるの?
常駐秀丸とか。

まさか、タイマー使って監視してるんじゃないよね…。

8 名前:デフォルトの名無しさん :2001/06/04(月) 17:39
>>7
SetClipboardViewer

>>4-5
あっちの576が書いてるように、こっちはWin「32」APIってことにしておけ(w

9 名前:デフォルトの名無しさん :2001/06/04(月) 17:55
IE コンポーネントってどうやって使うんですか?

10 名前:デフォルトの名無しさん :2001/06/04(月) 18:14
>>9
http://fukuoka.cool.ne.jp/manabu/tech/2_webbrowser1.htm

11 名前:デフォルトの名無しさん :2001/06/04(月) 18:16
エクセルのようなソフトはどうやって作ればいいのですか?
マジレスを希望します

12 名前:デフォルトの名無しさん :2001/06/04(月) 18:21
>>3
http://www.codeguru.com/shell/CascadingMenus.html

13 名前::2001/06/04(月) 18:26
>>12
先9です

14 名前:デフォルトの名無しさん :2001/06/04(月) 19:24
>8
あれはどう見てもネタ

15 名前:デフォルトの名無しさん :2001/06/04(月) 20:04
>>10
Win32API をきぼー

16 名前:デフォルトの名無しさん :2001/06/04(月) 22:50
>>15
あれを参考にすればできると思うのだが…。

17 名前:デフォルトの名無しさん :2001/06/04(月) 22:55
>>15
IWebBrowser2を使えばできる。

18 名前:17 :2001/06/04(月) 22:55
VC持ってるなら、CWebBrowser2のソース見れば?汚いけど。

19 名前:デフォルトの名無しさん :2001/06/05(火) 02:07
SendMessage関数のメッセージ(EM_UNDOとかあるけど・・)は、
どうやって仕様を知ることが出来るのですか?
誰か教えてください。お願いします。

20 名前:デフォルトの名無しさん :2001/06/05(火) 05:02
とりあえず、http://msdn.microsoft.com 逝っとけ。

21 名前:デフォルトの名無しさん :2001/06/05(火) 11:11
>>18
Windows95APIバイブルの2巻にいっぱい載ってる

22 名前:21 :2001/06/05(火) 11:12
>>18じゃなくて>>19だ。

23 名前:デフォルトの名無しさん :2001/06/05(火) 11:24
エクセルのようなソフトはどうやって作るんですか?
教えてください。

24 名前:デフォルトの名無しさん :2001/06/05(火) 11:45
とりあえず向こうを使い切らないか?
http://piza.2ch.net/test/read.cgi?bbs=tech&key=973187725

25 名前:デフォルトの名無しさん :2001/06/05(火) 14:18
他のプロセスのデフォルトヒープ領域の開始位置とサイズ、
拡張ヒープ領域の開始位置とサイズをすべて取得するのはどうやるの
自分の取得方法なら分厚いAPIマニアルに書いてあるけど相手のを
取る方法はどこにもない

26 名前:デフォルトの名無しさん :2001/06/05(火) 23:31
>>25
ハッカー級でないと難しいかも。

そのプロセスに潜り込んで、中から調べればいいだけ。
漏れならそうする。

マジで外から調べようとするなら、
たぶん、Native API を使わなきゃダメ。

27 名前:25 :2001/06/06(水) 12:17
DBxSTANDみたいなツールを作りたいんですけど・・・だめですかー

28 名前:デフォルトの名無しさん :2001/06/06(水) 14:07
>>25
グローバルフックを仕込んで、DllMain の PROCCESS_ATTACH の
時に調べると良いのでは?

29 名前:26 :2001/06/06(水) 14:53
>>28
他に Debug API を使うという手もある。
Guest 権限ではダメだが。

30 名前:デフォルトの名無しさん :2001/06/06(水) 17:09
OwnerDraw の ComboBox では CB_SETCURSEL は機能しないのでしょうか?
リストの項目が必ず先頭から表示されてしまいます。
直前に選択した項目をリストメニュー中で反転表示したいだけなのですが…

31 名前:デフォルトの名無しさん :2001/06/06(水) 17:24
とりあえず向こうを使い切らないか?
http://piza.2ch.net/test/read.cgi?bbs=tech&key=973187725

32 名前:デフォルトの名無しさん :2001/06/09(土) 01:01
>>30
オーナードローの描画範囲矩形が渡されてない。。とか?
それだけではよくわかりません。

33 名前:デフォルトの名無しさん :2001/06/29(金) 01:44
SetWindowsHookEx をラップするクラスを作ろうとして鬱になった。
コールバックにthisを渡す方法がない。無理だわ...

34 名前:デフォルトの名無しさん :2001/06/29(金) 02:23
フックプロシージャは他プロセスから呼ばれることすらあるから根本的に
不可能と思われ

35 名前:デフォルトの名無しさん :2001/06/29(金) 23:46
それって関係あるんだろうか?
コールバックで自分の処理が終わった後 postProc に委譲するでしょ?
これをどっから持ってくるかが問題なんだよなあ
グローバルな関数を動的に生成できないってのが癪だよ。
結局スタティック関数を抱えたクラス(のインスタンス)を動的に生成
することでしのいだが...

36 名前:デフォルトの名無しさん :2001/06/30(土) 12:29
ファイルの移動を目的として、
MoveFile(SrcFile, DestFile);
を使ったのですが、この関数が必ず失敗してしまいます。

同じ動作をさせようと思い、
CopyFile(SrcFile, DestFile, FALSE);
DeleteFile(SrcFile);
としてみたところ、CopyFile()は成功しますが、DeleteFile()が失敗します。

これはどうしてなんでしょう。
どうか解決策を教えてください。

37 名前:デフォルトの名無しさん :2001/06/30(土) 12:37
>36
削除したいファイルを別のアプリで開いたりしてない?
関数が失敗したあとにGetLastError()の返値を調べてみては。

38 名前:36 :2001/06/30(土) 13:07
>37
GetLastError()で調べてみたところ、
「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」
ということでした。

でも、削除したいファイルを別のアプリで開くというようなことはしていません。
(削除したいファイルはドラッグ&ドロップで得る形になっていますが関係あるのでしょうか)

39 名前:デフォルトの名無しさん :2001/06/30(土) 13:38
>>38
誰も使ってなければそのメッセージはでない。
ドラッグ含めて調べなおせ。

40 名前:36 :2001/06/30(土) 14:09
ドラッグ&ドロップでなければ、目的のファイルに対するDeleteFile()ができるようです。
ドラッグって、他のプロセスがファイルを使ってることになるんですかね。

41 名前:36 :2001/06/30(土) 19:34
誰か、教えてください〜〜〜〜〜〜〜〜〜

42 名前:デフォルトの名無しさん :2001/06/30(土) 20:34
うぜえよ。
ちゃんとDragFinish()やってるか?
どうせやってないとかそんなことだろ?

43 名前:デフォルトの名無しさん :2001/06/30(土) 21:22
他の窓下にある、キャプションの無い特定のアイテムのハンドルを得るには
どうしたら宜しいのでしょうか。

44 名前:デフォルトの名無しさん :2001/06/30(土) 21:32
Win98上で試してみた。DragFinishやる前でも削除できる。
つか、普通に作ってれば削除できる。自分でハンドル開いてたり
とか、きっとそういうレベルだな。クソの予感

45 名前:デフォルトの名無しさん :2001/06/30(土) 21:46
>>36
デバッグ中なんかで途中終了したときに、ファイルをつかみっ放しに
したりしてることもある。
ドラッグ自体は確かにデスクトップだかなんかのプロセス管理下だが
放せば終わり。そんだけ

46 名前:デフォルトの名無しさん :2001/06/30(土) 21:48
>>43
Spy を使う

47 名前:36 :2001/06/30(土) 21:50
DragFinishを使う場所の確認はいろいろやってみましたが、状況は特にかわりません。

>自分でハンドル開いてたりとか
んなことしてないよ。それくらいのことなら自分で気づくさー

48 名前:デフォルトの名無しさん :2001/06/30(土) 21:51
>>43
FindWindow(親探し) -> EnumChildWindows(子列挙)
-> GetWindowLong/GetClassLong(ターゲット判定)
ではだめかい。

49 名前:デフォルトの名無しさん :2001/06/30(土) 21:58
>>36
NTor2000で削除権が無い

50 名前:43 :2001/06/30(土) 22:02
>>48 有り難う御座います〜
早速。。と言いたい所ですが、今ちょっと試せない(残リソースが無いw)ので、
後で試してみます。

51 名前:36 :2001/06/30(土) 22:24
>49
たしかにWin2kなんですが、アドミニストレータでログインしてるんで削除権はあるんじゃないんかなぁ。
ほんとにいろいろ考えてもらってありがたいのですが、全然解決できない・・・

WM_DROPFILESを捕まえてDragQueryFile()でファイル名を得る。
そのファイル名に対しDeleteFile()、そしてDragFinish()。

と単純なことなんですが、ダメダメです。

52 名前:デフォルトの名無しさん :2001/06/30(土) 22:29
>>36
リソース掴みは調べたの会。アイコンが表示されていると
掴まれて足りする。本気でやるなら、使用中プロセス置換か
稼動プロセス停止(ほとんどすべて止める)を考えないといけない。

使用中プロセス置換を考えるなら、各ドライブ毎に
テンポラリフォルダを用意し、そこに*ドライブをまたがないように*
削除したいファイルをMoveする。また、移動前には移動先チェックを
常にし、移動先のファイル名が既にある場合には他のファイル名に
移動先名を変えること。削除タイミングはマシン起動時か、次回AP
起動時の最初の方で削除を試みる。リブートをはさまないと失敗する
確率は高いからできればリブート後に削除すること。
ポイントは使用中でもドライブをまたがない移動、もしくは、リネーム
はできる、削除タイミングに注意かな。
もちろんこれでもwin386.swpとか署名付きドライバ(2000以降)など
できないものも当然あるが、普通のものなら大抵使用中でもできる。

53 名前:デフォルトの名無しさん :2001/06/30(土) 23:09
>>51
>そのファイル名に対しDeleteFile()、そしてDragFinish()。
ガイシュツだけど、これは順序が逆では?

54 名前:デフォルトの名無しさん :2001/06/30(土) 23:13
>>51
Administrator でログオンしてるんなら、
誰が捕まえてるか、さっさと調べりゃいいじゃん。

こういうの、使うとかsa。
http://www.sysinternals.com/ntw2k/freeware/handle.shtml



どうせ結果は…。

55 名前:36 :2001/07/01(日) 00:22
たびたび申し訳ないです。

>53
順序入れ替えてもダメでした。

>54
試してみたら、自分自身がファイルのハンドル握っているようでした。
なんでhDropを解放したあとでもファイル操作がダメなんだろ・・・

ああ、俺ってバカだなー

56 名前:デフォルトの名無しさん :2001/07/01(日) 00:47
ていうかファイル操作をシェルにやらせればいいんじゃないの?
SHFileOperationでさ。

57 名前:50 :2001/07/01(日) 00:51
>>48
まだ実装し終わってませんが、とりあえず逝けそうです。
有り難うございました。

58 名前:デフォルトの名無しさん :2001/07/01(日) 00:51
WM_DROPFILES 内のコーディングを全部ココに出すしかない

59 名前:57 :2001/07/01(日) 01:27
ハンドルはしっかり得られたのですが、また詰まりました;

ListViewのハンドルを得られたので、ListView_GetItemText
で、得られたリストから項目を吸い出そうとした所、対象のソフトから
「モジュールCOMCTL32.DLLのアドレス〜に対する書き込み違反〜」
等とシステムエラーを吐かれてしまいました。。一体何が。。。

60 名前:デフォルトの名無しさん :2001/07/01(日) 01:34
>>59
・該当行アイテムが存在ない
・該当列サブアイテムが存在ない
・バッファが十分でない
ハンドルが正しいかどうかは ShowWindow(hXxx, SW_HIDE); とか試してみる

61 名前:59 :2001/07/01(日) 01:44
>>60
HIDEしてみたら、しっかり隠れたのでハンドルは確かな様です。。。
バッファはとりあえず足りなくてもTextMaxで切り捨てで。
アイテムはおもむろに 16行の4列とか指定してみたんですが、
これが不味んですかね。。;
リストは12項目で1000個程あるのでとりあえず適当で良いかなと
思ったのですが。

62 名前:59 :2001/07/01(日) 01:51
DeleteItemは通る様です。。が、同じ番号にGetItemTextを送ると
やはりエラーが。。。解らんTT

63 名前:デフォルトの名無しさん :2001/07/01(日) 01:56
エディットボックスで右クリックをしたときに
メニューを表示しないようにしたいのですが、どうすればいいのでしょうか?
出来れば、サブクラス化しないでやりたいのですが・・・

64 名前:デフォルトの名無しさん :2001/07/01(日) 02:11
>>55
"新規プロジェクト"で単純なWin32 Applicationで以下のところだけ追加して
ビルドしてそれでもだめなら諦めろ。とりあえず俺のとこでは期待とおりに動いた。
つか、自分で切り分けもできないのはだめだめだぞ。

-- InitInstanceに追加
DragAcceptFiles(hWnd, TRUE);

-- WindProcに追加
case WM_DROPFILES:
  int   i, iExitLoop;
  HDROP  hDrop;
  UINT  uFileNo;
  char  szFileName[MAX_PATH];
  char  szMsg[1024];

  iExitLoop = FALSE;
  hDrop = (HDROP)wParam;
  uFileNo = DragQueryFile((HDROP)wParam, 0xFFFFFFFF, NULL, 0);
  for(i = 0; i < (int)uFileNo; i++) {
    DragQueryFile(hDrop, i, szFileName, sizeof(szFileName));
    switch( MessageBox(hWnd, szFileName, "Delete", MB_YESNOCANCEL) ) {
      case IDYES:
        if( CopyFile(szFileName, "c:\\file.obj", FALSE) == FALSE ) {
          MessageBox(hWnd, szFileName, "Copy failed", MB_OK);
          break;
        }

        if( DeleteFile(szFileName) == FALSE ) {
          wsprintf(szMsg,
             "File: %s GetLastError: %ld",
             szFileName, GetLastError());
          MessageBox(hWnd, szMsg, "Delete failed", MB_OK);
        }
        else {
          MessageBox(hWnd, szFileName, "Delete Success", MB_OK);
        }
        break;
     case IDNO:
        break;
     default:
        iExitLoop = TRUE;
   }

   if( iExitLoop == TRUE ) break;
  }

  DragFinish(hDrop);
  break;

65 名前:デフォルトの名無しさん :2001/07/01(日) 02:17
>>64
もとい。「標準的な"Hello,world"アプリケーション」でした。

66 名前:デフォルトの名無しさん :2001/07/01(日) 02:29
>>59
他のAPのリソースになんでもアクセスできると思うなよ。
http://hp.vector.co.jp/authors/VA003525/tips8.htm

つーか、なんで漏れはこんなとこで油売ってんだろ。自分の勉強しよ。

67 名前:↑そうそう、えらそーに言うほどのことでもない学生は勉強しな :2001/07/01(日) 03:10
>>62
別プロセスの場合はこうやんだってさ
http://nt.sakura.ne.jp/~miwaki/progtips/process/sharedmemory.shtml

68 名前:59 :2001/07/01(日) 03:18
>>66
有り難うございますーー まさにコレですね。  しかし。。でるふぁい;

調度今、逆ギレて他のソフトの小判ざめ辞めて諸々1から作ってやろうと
思い立った所だったのですが、幸いWin98なのでやはり小判ざめで
逝く事にします^;;
#長い事書けませんでした;

69 名前:59 :2001/07/01(日) 03:54
CreateFileMappingと言うAPI初めて使うんですが、何やっても
第一引き数がキャスト出来んと叱られてしまいます;
(HANDLE)0xffffffff>'void *' から 'int'
0xffffffff>const unsigned int' から 'void *'
一体何なんだ。。(;´Д`)

70 名前:59 :2001/07/01(日) 03:57
すみません解決しました。 逝ってきます。

71 名前:デフォルトの名無しさん :2001/07/01(日) 04:10
>>63
サブクラス化なしでは無理しょ

72 名前:ちゃんと読もうな。>>67 :2001/07/01(日) 04:56
君がえらそーに紹介したのと同じ技法だよ。
それと君は勉強をやめてしまったのか。ま、いいけどな。

73 名前:63 :2001/07/01(日) 12:09
ガーン、そうなんですかー、
なんか、うまいやり方はないかなぁと四苦八苦してみたんですが
結局サブクラスなんですねー・・・・
どうもありがとうございました。

74 名前:デフォルトの名無しさん :2001/07/01(日) 15:45
MP3を再生させる事の出来るAPIってあるんでしょうか?

75 名前:デフォルトの名無しさん :2001/07/01(日) 15:47
>>74
コーデックがインストールされてればmciで再生可能。

76 名前:デフォルトの名無しさん :2001/07/01(日) 17:10
>>72
誰も訂正なんかしていない。VC版でNT付き
ちゃんと読め、というヤツはたいがい自分が読んでない。
>他のAPのリソースになんでもアクセスできると思うなよ。
この逆説的な言い方が幼いというだけ。なんか自分で自分に言い聞かせてる
みたいだ。アンタ自信が初発見だったんじゃないの?
俺もよく答えているが、自信ないヤツほど高圧的なんだよね。
なぜエバる? ま、エバって答えりゃ有難みが増すからかな。
第三者から見ると鬱陶しいので事実を素直に答えといて下さい。じゃ

77 名前:76 :2001/07/01(日) 17:19
>72
どーでもいーね
わりわり、怒るな

78 名前:デフォルトの名無しさん :2001/07/01(日) 21:14
ウィンドウの縁からクライアント領域までのオフセットを取得するには
どうすればいいのでしょうか。
どなたかご存知の方、教えて下さい。宜しくお願い致します。

79 名前:知ってる範囲では :2001/07/01(日) 21:23
ClientToScreenとGetWindowPosを組み合わせるとか、
GetSystemMetricsでウィンドウ枠の幅を得るとか,,,,,,

80 名前:72 :2001/07/01(日) 21:23
そうか。今度から気をつけるよ。
あと、素直に答えなかったのは検索すればすぐ
見付かったからだ。すぐに人に聞くのではなく
もう少し調べて欲しかった。そんだけ。

81 名前:78 :2001/07/01(日) 21:37
>>79
こんな API があったんですね。不勉強でお恥ずかしい限りです。
早速やってみます。ありがとうございました。

82 名前:36 :2001/07/01(日) 23:55
よーく探したら、やはり閉じ忘れのファイルハンドルがありました。
考えてくれた方々、どーもありがとー。

てうか、ごめん。

83 名前:デフォルトの名無しさん :2001/07/03(火) 13:04
GetClientRect+ClientToScreen
AdjustClientRectEx
WM_NCCALSIZE
なども調べてみよう

84 名前:デフォルトの名無しさん :2001/07/08(日) 12:24
あがれや

85 名前:デフォルトの名無しさん :2001/07/12(木) 20:48
exeやdllが使用中かどうかを他プロセスから調べるにはどうしたらいいのですか?

86 名前:デフォルトの名無しさん :2001/07/12(木) 20:53
>>85
そのファイルの名前を変更しようとして失敗すれば使用中。
成功したら元に戻すのを忘れずに。

87 名前:デフォルトの名無しさん :2001/07/12(木) 20:56
>86
あたまいーねー

88 名前:デフォルトの名無しさん :2001/07/12(木) 22:39
あんまり頭良くないと思う
exeやdllがCD-ROM上にあったり読み取り専用で共有されてたり
アクセス権の関係で読取専用だったりしたらどうするつもりなんだろう

89 名前:デフォルトの名無しさん :2001/07/13(金) 01:25
>>88
なんのために使用中かどうか調べるのか、その目的によっては
Read Onlyも「使用中」とみなしてよいのではないか?

90 名前:デフォルトの名無しさん :2001/07/14(土) 01:21
ダイアログをリソース使わないで、動的に作りたいと思います。
でもCreateDialogIndirectの構造体の作り方がよく分かりませんでした。
テンプレートの詳しい解説サイト無いですか?

91 名前:デフォルトの名無しさん :2001/07/14(土) 05:15
>>89
質問の条件だけじゃ漠然としすぎてるね。
実際に使ってみてエラーが出るかどうか調べるのが一番確実なような。

92 名前:デフォルトの名無しさん :2001/07/14(土) 11:15
>90

DialogBoxIndirect()のサンプルがあるから参考にしてくれ。
http://www.hinaiji.com/quixel/002/

あとはMicrosoft(米国)で下の言葉を検索すればいろいろ見つかるぞ。
http://search.microsoft.com/us/default.asp

CreateDialogIndirect
DialogBoxIndirect
DLGTEMPLATE
DLGITEMTEMPLATE

93 名前:90 :2001/07/15(日) 00:03
>92
なんかえらく難しそうですね・・・。
リソース→メモリイメージ変換ツールというのが見つかったので、
それも参考にしてやってみます。ありがとうございました。

94 名前:デフォルトの名無しさん :2001/07/16(月) 22:04
すみません、超初心者な質問ですが気になったので教えてください。
CもC++もWinプログラムも始めたばかりなのですが、
グローバル変数ってありますよね、
どこかのスレで「グローバル変数作りまくるのはダメ」
とか書いてあったので考えてしまったのですが、
例えばある構造体型の変数(オブジェクト?)をグローバルで
宣言してたとして、それをローカルに変え、かつ常に
内容を保存したままにするのは、Windowsプログラムでは
可能なんでしょうか?
DOSのコードならばMain関数内で宣言して使えばいいわけ
でしょうけれど、WindowsだとWinMainだけでなく
ウインドウプロシージャ(ウインドウ関数)がありますよね?
ここに制御が行ったとき、変数は失われたりしないのでしょうか?
バカな質問ですみませんが、よかったら教えてください

95 名前:デフォルトの名無しさん :2001/07/16(月) 22:29
>94
ちょっと質問の意味が正確にわからないんだが、main()だろうがWinMain()だろうが、プログラムのルールはC/C++と同じ。
だから、ローカル、グローバルの違いもC/C++言語の本に書いてあるとおり。

WinMain()とプロシージャーで同じ変数を使いたいときは、グローバル変数にすれば、両方で使える。
グローバル変数を使いたくなければ、補足ウィンドウデータ(WNDCLASSEX構造体のcbClsExtraやcbWndExtra)を使ってWinMain()からプロシージャーに値を渡す。

プロシージャー内で同じ変数を使い続けるにはグローバル変数かstatic変数を使う。

というか、C/C++を勉強するなら、DOSプログラムから始めた方がいいと思うが。
いきなりAPIは難しい。

96 名前:94 :2001/07/16(月) 22:40
なるほど、ありがとうございます。
やはりグローバル変数を使うのが基本なのですね。
要は使い分けでしょうか。

>いきなりAPIは難しい
よく言われるんですが、Winで作りたいものがあるので
根性でやってます(汗笑
C/C++の基本的なことにも毎回辞書を引いたりしてるので
遅々として進みませんが・・・。

97 名前:デフォルトの名無しさん :2001/07/16(月) 23:33
Globalの使用を肯定すんなよ>>95
アホスレの1ならしょうがないけど。
ローカル関数内でのstatic変数も使うな。>>96
WindowsのコールバックにはGet/SetWindowLong使え。

98 名前:デフォルトの名無しさん :2001/07/17(火) 03:50
>>97
>WindowsのコールバックにはGet/SetWindowLong使え。

WM_CREATE のハンドラでは CreateWindow から戻る前に呼ばれるわけ
だけど、そこでは GetWindowLong できないよね。シンプルな解決法ある?

99 名前:デフォルトの名無しさん :2001/07/17(火) 04:31
ヘルプのCreateWindowの最後に渡す引数を参照>>98
WM_CREATEで受け取ったら、それをSetWindowLongしとく。

100 名前:デフォルトの名無しさん :2001/07/17(火) 04:53
100!

101 名前:デフォルトの名無しさん :2001/07/17(火) 10:55
>>97
他スレで議論があったらしいけど、
杓子定規に「○×は使うな、△□を使え!」って論法は危険だと思うぞ。

特に学習の途上なら、
その人のスキルに応じた段階を踏んでいくべきじゃないだろうか。

>>94 はまず、メッセージ駆動によるプログラミングを収得することが目的なわけだから、
初めの一歩としては、それ以外の要素はすべて捨ててもいいと思う。

自分で作ったウィンドウクラスから複数のインスタンスを作るとき、
「なるほど、グローバル変数じゃ、無理だな」と気がつくはず。
そのとき、次の段階へ進めばいいだけ。

102 名前:デフォルトの名無しさん :2001/07/17(火) 13:24
>>97
グローバル使うなって、MSDNのサンプルでも思いっきり使ってると
思うけど?
自分の考えが正しいと信じるのは勝手だけど、人に押し付けようと
すんなよ。

103 名前:デフォルトの名無しさん :2001/07/17(火) 14:42
DLLをあるアプリケーションの起動と同時にそのアプリに
読み込ませたいんですけど、どうやったらできますか?

ちなみにMEです。NTならやり方わかるんですけど…。

104 名前:デフォルトの名無しさん :2001/07/17(火) 18:27
アプリの起動と終了を監視するプログラム組みたいんですけど
これってAPIで出来ますか?
ちなみに使っている言語はCです。

105 名前:104 :2001/07/17(火) 18:45
OSはNT4.0WSです。

106 名前:デフォルトの名無しさん :2001/07/17(火) 19:02
Win98&VisualC++6使ってますが、ウィンドウの内側の
サイズってどうやって指定しますか?
外枠を含めた全体のサイズしか指定できなくて、
今はタイトルバー分だけひしゃげてます。

VBだとありますよね…

107 名前:デフォルトの名無しさん :2001/07/17(火) 19:16
タイトルバーやウィンドウ枠の分も含めてサイズ指定すればよい。
それぞれのサイズはGetSystemMetricsで取得できる。

108 名前:デフォルトの名無しさん :2001/07/17(火) 19:52
>>103
インポートライブラリをリンクするだけ。

109 名前:デフォルトの名無しさん :2001/07/17(火) 19:54
>>104
フックを使えばできると思われ

110 名前:デフォルトの名無しさん :2001/07/17(火) 20:19
WindowBlindsのSKIN
を使用してウインドウに貼り付けたいのですが
タイトルバーやスクロールバーのところはどうやったら
変えることができるのでしょうか?

111 名前:デフォルトの名無しさん :2001/07/17(火) 21:01
>>108
あるアプリってかいてあるから、自作アプリじゃなくて既存のアプリじゃない?
それなら、フックとかを使うべし。

112 名前:デフォルトの名無しさん :2001/07/17(火) 21:09
>>104
フックを使うなら
SetWindowsHookEx()
GetModuleFileName()
あたりで検索してみろ。

113 名前:デフォルトの名無しさん :2001/07/18(水) 00:46
WindowBlindsを起動

114 名前:クロネコ :2001/07/18(水) 04:22
>>106

SetRectで希望のサイズを設定して
AdjustWindowRectExがお手軽。

115 名前:デフォルトの名無しさん :2001/07/18(水) 09:01
>>112
了解でございます。

116 名前:デフォルトの名無しさん :2001/07/18(水) 14:12
>>114
メニューが2段とか3段のときはどうするん?

117 名前:デフォルトの名無しさん :2001/07/18(水) 14:37
>>116
WM_NCCALCSIZEを投げる

118 名前:デフォルトの名無しさん :2001/07/19(木) 05:05
ちょっとスレの主旨から外れるんですが、
マルチスレッドって、スレッド関数が終了してもプロセス終了または
手動でCloseHandleを呼び出さないとハンドルが解放されませんよね。
これってもしかしてWindowsのマルチスレッドの弱点?
同じスレッドを繰り返し作ったり終了したりしてたら
ハンドルの分微妙にメモリ消費が増えていく・・・?

119 名前:デフォルトの名無しさん :2001/07/19(木) 05:13
ナニイッテンノ?>118

120 名前:デフォルトの名無しさん :2001/07/19(木) 05:23
マルチスレッドプログラミングって本、
買うなり、借りるなりしなさい。>118

121 名前:デフォルトの名無しさん :2001/07/19(木) 05:32
流出ログ一覧直リン!
http://members.nbci.com/zmkanamoe/success/PC-Success.cab 3.08MB 約170ファイル
http://members.nbci.com/zmkanamoe/success/eleven-jp.zip 110KB イレブン
http://members.nbci.com/zmkanamoe/success/coconuts.zip 24KB ココナツ
http://members.nbci.com/zmkanamoe/success/SONY.zip 1.55MB ソニー

イレブンはアダルトグッズ購入者

122 名前:118 :2001/07/19(木) 07:22
すみませんアホなんでよくわからないんですが、
1つだけ教えてください。
ExitThread()で終了してからもう一度同じ関数のスレッドを開始したら
同じハンドルは返りませんよね?
「同じスレッド関数は何回も呼び出さないのがセオリー」
ってことですか?

123 名前:デフォルトの名無しさん :2001/07/19(木) 08:08
>>122
むしろ、同じハンドルが返る(=一つの関数から一個しかスレッド作れない)
としたら非常に困ると思うのだが。

124 名前:デフォルトの名無しさん :2001/07/19(木) 10:20
>>122
スレッドハンドルにしてもスレッド ID にしても、
同時に複数開いている(または存在している)ときは、
それらは必ず異なる値になる。

しかしこれらは同じ番号(ハンドルや ID)が再利用されることがあるので、
運が悪ければ、直前に閉じたばかりのスレッドと同じ ID やハンドルが、
再び割り付けられる場合がある。


だから、たとえば ID なら
「ある時刻に同時に存在しているスレッドを識別する番号」
という程度、ハンドルなら
「ある時刻に同時に開いているスレッドを識別する番号」
という程度に考えた方が良い。

ちなみに「ハンドル」と「ID」の違いに気をつけること。

125 名前:106 :2001/07/19(木) 20:15
>>107 >>114
ありがとー。AdjustWindowRectEx使うよ。

126 名前:デフォルトの名無しさん :2001/07/19(木) 23:22
>118
スレッドのハンドルは2つ作成されるよ。生成したスレッドに渡るやつと、
beginthreadexを呼んだ方と。その2つをCloseHandleすれば本当に削除される。
beginthreadの方は呼出し側のハンドルは勝手にクローズされる。
詳しくは、やっぱり本参照ってことで。

127 名前:デフォルトの名無しさん :2001/07/20(金) 00:19
初歩的な質問で申し訳ないのですが、WindowsでDirectDrawを使わないで
ダブルバッファリングを実現するにはどのようにしたら良いのでしょうか?

HDC hBitmapDC;
HDC hMemDC;
HDC hDC;

hDC = GetDC(hWnd);
hMemDC = CreateCompatibleDC(hDC);
hBitmapDC = CreateCompatibleDC(hDC);
SelectObject(hBitmapDC,g_Bitmap);

BitBlt(hMemDC,0,0,100,100,hBitmapDC,0,0,SRCCOPY);
BitBlt(hDC,0,0,100,100,hMemDC,0,0,SRCCOPY);

DeleteDC(hBitmapDC);
DeleteDC(hMemDC);
ReleaseDC(hWnd,hDC);

こんな風に書いて出来ると思ったんですが何も表示されませんでした。

128 名前:デフォルトの名無しさん :2001/07/20(金) 00:33
MSDNサンプル参照>127

129 名前:デフォルトの名無しさん :2001/07/20(金) 00:53
>>128
ううー、どこにあるのでしょうか・・・
ヒントだけでも教えてもらえませんか
ダブルバッファで検索したらDirect3DとDAOくらいしかヒットしませんでした。

130 名前:デフォルトの名無しさん :2001/07/20(金) 01:31
>>129

無理せず基本からやりなおせって。

131 名前:デフォルトの名無しさん :2001/07/20(金) 20:06
サスペンド・スタンバイになろうとしているのを検知する方法ってある?

132 名前:デフォルトの名無しさん :2001/07/20(金) 20:23
>>131
WM_POWERBROADCAST

133 名前:デフォルトの名無しさん :2001/07/20(金) 20:23
WM_POWERBROADCAST

134 名前:デフォルトの名無しさん :2001/07/20(金) 20:52
>>127
hMemDC に適当な bitmap を SelectObject させとかなくちゃだめ。
メモリDC は初期状態だと 1x1 ピクセル、depth=1 の
ビットマップしか持っていないから。

hBitmap = CreateCompatibleBitmap(hDC, size_x, size_y);
SelectObject(hMemDC, hBitmap);

とかやってみな。

135 名前:デフォルトの名無しさん :2001/07/20(金) 22:54
SetPixelで画面を描画していくのと、DIBのビットマップを
作って、そっちのデータに直接書き込むのとどっちの方が
能率いいと思いますか。

136 名前:デフォルトの名無しさん :2001/07/20(金) 22:56
>>135
そりゃ描画内容にもよるだろ。

137 名前:135 :2001/07/21(土) 00:00
>>136
フラクタルの画像をかこーと思ったんですが、
一点づつ打っていくのでDIBのほうがいいでしょうか>

138 名前:127 :2001/07/21(土) 00:02
>>134
できました!!
どうもありがとうございました。

139 名前:デフォルトの名無しさん :2001/07/21(土) 00:31
>>137
SetPixelは遅いと思われ

140 名前:デフォルトの名無しさん :2001/07/21(土) 00:42
DIBに変換して直接メモリ操作が良いと思う。>137
これって他にDirectX使う以外で良い方法ある?

141 名前:デフォルトの名無しさん :2001/07/21(土) 01:21
>>137
前に俺がカオス画像書いたときは、描画スレッドを別に作って、
演算しつつDIBに描画し、WM_TIMERで10msごとにBitBltして表示した。
もちろんDIBに対してクリティカルセクションかけてたけど。

142 名前:デフォルトの名無しさん :2001/07/22(日) 23:31
Win2k+VC6.0でCreateHardLink使うとリンクエラーになるけどなんで?
あるいはハードリンクはるコマンドラインツールってない?

143 名前:デフォルトの名無しさん :2001/07/22(日) 23:43
>>142
VCのSPは何?

144 名前:デフォルトの名無しさん :2001/07/23(月) 00:27
windowsのハードリンクって何?unixのアレ?
いつのまにやらそういう事ができるようになったのか

145 名前:デフォルトの名無しさん :2001/07/23(月) 00:55
NTでは大昔からできたよ

146 名前:デフォルトの名無しさん :2001/08/08(水) 22:01
シロートながらふとやってみたくなったのですが、
WinMainとウインドウプロシージャを自作クラス内でやるのって
難しいんでしょうか?

クラス定義
→クラス内でWinMainとプロシージャを宣言
→中身を定義
→グローバルでクラスオブジェクト宣言
→WinMain呼ばれる(コンストラクタから呼べるかな?
ってな感じでいけるのかなぁ。
生WinAPI使って全部丸々オブジェクト指向、ってのは
知識浅いと無理でしょうか?
どうかアドバイスお願いします。

147 名前:デフォルトの名無しさん :2001/08/08(水) 22:21
>>146
WinMain は OS 側から呼ばれるエントリポイントなので、自分で定義
したクラスから呼び出そうとか考えない方が良い。

実際には直接 OS が WinMain を呼ぶわけではなくて、その前にスター
トアップルーチンが介在しているので、これを自分で書けば不可能では
ないと思うけど、労多くして益なしだからやめいた方が良い。MFC など
のクラスライブラリでも WinMain を介さないフレームワークって見た
ことないし。

ウィンドウプロシージャに関しても呼び出し規約が決まっていて、隠し
パラメータとして this を渡す必要があるメンバ関数は登録できない。
ただし、こっちは抜け道があって

1. SetWindowLong で GWL_USERDATA に this ポインタを格納してお
  き、ウィンドウプロシージャでは GetWindowLong で this を取得
  し、メンバ関数を呼び出す。
2. thunk を使って、this ポインタを埋め込むウィンドウプロシージャ
  を動的に作成する。

なんて方法で解決できる。後者は ATL で使われている。

ところで Win32 API を使ってプログラムを組みたいということなら、
一からフレームワークを作るよりも ATL/WTL を使うことを薦めます
けどね。

148 名前:146 :2001/08/08(水) 22:21
うが!
APIスレあるのに古いやつageてしまった・・・・
申し訳ないですすみませんごめんなさい
でもsageでいいのでレスください(ぉ

149 名前:146 :2001/08/08(水) 22:31
あ、レスありがとうございます!
やっぱ難しいのですか・・・う〜ん・・・・・・
ただせっかく書いてもらったし興味は残るんで
コピペしといて勉強してみます。
どうもありがとうございます。
ただATLとかは名前しか知らないんで・・・・
その辺も調べる必要ありってことですね。
ひとまずやってみます、ありがとうございます!

150 名前:デフォルトの名無しさん :2001/08/08(水) 22:47
自分のexeのpathを取得する方法は?(GetCurrentDirectoryは×)

151 名前:デフォルトの名無しさん :2001/08/08(水) 22:51
>>150
GetModuleFileName

152 名前:デフォルトの名無しさん :2001/08/08(水) 22:54
せっかくだからこっちを新しいスレにするか?
もう一つの方は800越えてるしな

153 名前:150 :2001/08/08(水) 23:35
>>151
Thanks!

154 名前:デフォルトの名無しさん :2001/08/08(水) 23:37
マルチモニタ環境でも画面の大きさ(縦幅・横幅)を簡単に取得する方法は?

155 名前:デフォルトの名無しさん :2001/08/08(水) 23:40
SERVLETやJSPとかで掲示板を作る場合、件数ごとにページを振り分けたいのですが
やり方教えてください。

156 名前:デフォルトの名無しさん :2001/08/09(木) 01:09
>>150
_argv[0]

157 名前:156 :2001/08/09(木) 01:10
スマン
ここAPIスレだったね
逝ってきます

158 名前:デフォルトの名無しさん :2001/08/09(木) 12:32
>>154
DirectX

159 名前:デフォルトの名無しさん :2001/08/09(木) 15:03
>>158
DirectX以外で取得する方法は無いの?

160 名前:デフォルトの名無しさん :2001/08/09(木) 15:32
>>159
レジストリに訊く

161 名前:デフォルトの名無しさん :2001/08/13(月) 07:00
「簡単に」ってのが何を意味してるのかいまいちわからんけど
モニタを列挙する正攻法じゃだめなの?

162 名前:loop :01/09/06 16:41 ID:ljbSNkmM
質問です。アイコンの変更についてですが、エクスプローラ表示時の
アプリケーションのファイル名の左につく小さなアイコンを変更したいのですが、
どうすればいいのでしょうか。
hIconSmやhIconはちゃんと設定しているのですがエクスプローラ表示時だけ
表示されません。

163 名前:デフォルトの名無しさん :01/09/06 16:51 ID:8jSOa11w
私も質問。

"HelloWorld!!" と表示するだけのコンソールアプリ(c:\HelloWorld.exe)
があり、これを

CreateProcess( NULL, "c:\HelloWorld.exe > c:\temp\HelloWorld.txt", … )

としてみたのですが、リダイレクトの結果のファイルが
作成されていません。他のコマンドでもためしてみても
同じなのですが、 CreateProcess でこういう使い方は
出来ないのでしょうか?

164 名前:163 :01/09/06 16:55 ID:8jSOa11w
書き忘れ。

一応、CreateProcess 自体は 1 が戻ってきているので
成功しているのだとは思うのですが。

165 名前:163 :01/09/06 16:57 ID:8jSOa11w
修正

"c:\HelloWorld.exe …" ではなくて、
"c:\\HelloWorld.exe …" としてます。

何度も申し訳ない。

166 名前:デフォルトの名無しさん :01/09/06 17:00 ID:vbslDp7I
>>163
CreateProcessに渡すコマンドラインはシェルを経由しないのでリダイレクト効かない。
出力リダイレクトは、あらかじめCreateFileかなんかで作ったファイルハンドルを
STARTUPINFO構造体に放り込め。

167 名前:163 :01/09/06 17:03 ID:8jSOa11w
>>166
なるほど!!

実に明快な回答に感謝。

168 名前:デフォルトの名無しさん :01/09/06 17:14 ID:zzHUNAwk
>>163
ライブラリ関数の system() 使えば?

169 名前:デフォルトの名無しさん :01/09/06 17:23 ID:vbslDp7I
まあsystemとかWinExecExとかShell_Executeはシェル経由だから面倒はない。
どうしてもCreateProcessである必要があるなら話は別だけどね。

170 名前:デフォルトの名無しさん :01/09/06 20:55
WinExecExとかShell_Executeって何?
ありもしないAPIデッチ上げてんじゃねーよ

171 名前:デフォルトの名無しさん :01/09/07 11:48
ReadFileScatter

WriteFileGather
のサンプルコード、誰か書いてくれませんかー?
members.tripod.com/~masapico/api_WriteFileGather.html
のコードコピペしたら、コンパイルが通らない・・・
オレのへなちょこ技術じゃ太刀打ちできんエラーだったし。
(VC++6.0)

172 名前:デフォルトの名無しさん :01/09/07 17:47
>162
EXEファイルのアイコンを変更したいってこと?
hIconSmやhIconは直接関係ないよ。
EXEファイルの中でリソース番号の一番小さいアイコンがファイルのアイコンとして表示される。

173 名前:デフォルトの名無しさん :01/09/08 03:39
他人のPCのレジストりぶっ壊したいんだけど、
効率良い方法無い?

174 名前:デフォルトの名無しさん :01/09/08 04:08
ありません。

175 名前:デフォルトの名無しさん :01/09/08 08:41
format c:

176 名前:デフォルトの名無しさん :01/09/08 11:47
バット持ってきて物理破壊

177 名前:デフォルトの名無しさん :01/09/08 12:03
住所を調べて最寄りの米軍基地にスクランブル指令。
B-117からピンポイント爆撃してもらおう!

178 名前:デフォルトの名無しさん :01/09/08 16:31
>>173
PC使わせてもらって手作業で。

179 名前:デフォルトの名無しさん :01/09/09 00:07
B-117ってなんれすか?【ピュア】

180 名前:デフォルトの名無しさん :01/09/09 00:40
117なんて爆撃機はないど〜
戦闘機と混同してないか?
F-117てのならいるけど。

B-2爆撃機
http://www.af.mil/photos/images/bombers_b2_0004.jpg

F-117戦闘機
http://www.af.mil/photos/images/fighters_f117_0010.jpg

181 名前:デフォルトの名無しさん :01/09/09 14:12
FindWindow, FindWindowNext 及び

GetWindowRect, SetWindowRect
(だったっけ?でなければ WM_MOVE メッセージ)

これらの命令は Win2K でも利用できますか。

182 名前:デフォルトの名無しさん :01/09/09 14:20
>>181
FindWindowNext?そんなのあったか?
知らなかった...

183 名前:デフォルトの名無しさん :01/09/09 14:34
>>181
なぜMSDNを読まないのですか?

184 名前:デフォルトの名無しさん :01/09/09 14:54
>>FindWindow, FindWindowNext
GetTopWindow 及び GetNextWindow の間違いでしたスマソ

>>183
その MSDN ヘルプ(?)のファイル名を教えてください。
検索してみます。

185 名前:デフォルトの名無しさん :01/09/09 15:08
>>184
ハァ?

186 名前:デフォルトの名無しさん :01/09/09 15:10
どこで聞けばいいのか解らないので、ここで質問。

関数を量産できないかなぁ?

普通窓のラッパークラスって、ウィンドウクラスにラッパークラスの static なメッセージプロシージャを登録するように作るよね。
でもって、メッセージプロシージャから、C++ のクラスのインスタンスにメッセージを投げるって形になるよね。

で、これって

  メッセージキュー -> ウィンドウクラス -> static_MsgProc -> それぞれの窓クラスの MsgProc

って流れになるけど、もし関数のインスタンスを量産できたなら、

  メッセージキュー -> ウィンドウクラス -> それぞれの窓クラスの MsgProc

って出来るから嬉しいかな?っていうだけなんだけど。

なんか既にありそうだけど、とりあえず挑戦してみるのも良いかと思ってソース書き出したんだけど、

int size = sizeof (srcfunc);
f = malloc (size);
memcopy (f, srcfunc, size);

f (〜〜〜);

って方式でやろうとしたら、size が取れなくって引っかかったのだー。

解る人おしえてください。

187 名前:186 :01/09/09 15:12
いま、このすれ 1 番上にあるから必要ないけど注意引いて欲しいので age。

188 名前:デフォルトの名無しさん :01/09/09 15:14
>>184
君はどんな環境で開発してるんだい?
それを言ってくれれば直ぐ解決すると思うが。

189 名前:デフォルトの名無しさん :01/09/09 15:21
>>187
closureについて勉強するといい

190 名前:184 :01/09/09 15:22
>>188
Delphi6 で開発中。ちなみにAPIヘルプはついていません。

191 名前:デフォルトの名無しさん :01/09/09 15:26
>>190
Delphiじゃあ仕方が無いね
MSDNはオンラインでも参照できるから、そこへ行くといいよ

192 名前:186 :01/09/09 15:30
あ、ゴメン、オイラも環境書いてなかった。

VCです。

>>189
closure って BC じゃなかったっけ?とりあえず、今からgoogle逝ってみる。

193 名前:デフォルトの名無しさん :01/09/09 15:32
>>184
ttp://www.microsoft.com/JAPAN/developer/library/jpuipf/_win32_gettopwindow.htm
ほれ
MSDNライブラリのonline版は
ttp://www.microsoft.com/japan/developer/library/default.asp

194 名前:デフォルトの名無しさん :01/09/09 15:39
>>190
Personal 版ダウンロードしたけど英語版のヘルプファイルは入ってたよ

195 名前:184 :01/09/09 15:39
>>191,193

どうもありがとう。
勉強してきます。

196 名前:デフォルトの名無しさん :01/09/09 16:09
>>186

http://www.asahi-net.or.jp/~HA3T-NKMR/vcl3-1.htm

こういうこと?

197 名前:デフォルトの名無しさん :01/09/09 18:09
サンクスです。うーん、なんか難しい‥‥。

198 名前:デフォルトの名無しさん :01/09/09 19:03
WNDCLASSEX 構造体の hCursor メンバの設定に LoadImage() を使ってみました。

W.hCursor = (HCURSOR)::LoadImage( NULL, MAKEINTRESOURCE(OCR_NORMAL),
    IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE);
すると,生成したウィンドウ上でのカーソルの形状が設定されない気がします。
例えばウィンドウの枠にカーソルを合わせると,双方向な矢印の
カーソル(ウィインドウをリサイズする時のアレ)が表示されます。
そのままクライアント領域にカーソルを移動させると,カーソルがいつもの
カーソルにならず,双方向な矢印カーソルのままでいます。

MSDN Online には確かに LoadCursor ではなく LoadImage を使えと書いています。使い方,間違ってますか?

199 名前:198 :01/09/09 19:14
はあぁっ (;´Д`)
hIcon に LoadImage 使ってると
CreateWindow が失敗するし (;´Д`)(;´Д`)(;´Д`)

200 名前:デフォルトの名無しさん :01/09/09 19:56
http://msdn.microsoft.com/library/en-us/winui/hh/winui/winclass_9z8y.asp

> To assign a cursor shape to a window class, load a predefined
> cursor shape by using the LoadCursor function and then assign
> the returned cursor handle to the hCursor member of the
> WNDCLASSEX structure.

と書いてあるように読めるが気のせいか。

201 名前:デフォルトの名無しさん :01/09/09 20:38
↓のソフトウエア―の最小化ボタンの隣についている

▽ボタンをつけるにはどのようなマクロを指定したらよいのでしょうか?
あるいは下記のソフトの作成者の自前なのでしょうか?
わかる方がおられましたらご教授よろしくお願いします。

http://homepage1.nifty.com/cosmic/software/iconstarsmain3.png

202 名前:デフォルトの名無しさん :01/09/09 20:48
>>201
自前です。

203 名前:デフォルトの名無しさん :01/09/09 20:50
>202
自前だとすれば、タイトルバァにBMPを描画して
独自にメッセージを設定しているということですか?

204 名前:デフォルトの名無しさん :01/09/09 21:34
>>203
WM_NC〜系のメッセージをフック。

205 名前:デフォルトの名無しさん :01/09/09 21:49
WM_LBUTTONDOWNの時に座標が

▽ボタンの範囲内であればウィンドウをタイトルバーのみにするのではないのですか?
それとも202にある「自前」というのがネタで、何らかのマクロを設定すれば

▽ボタンをつけられるのでしょうか?

とは言っても↓のソフト以外であのようなボタンがついているのを見たことが無いので自前しかないのかな。
http://homepage1.nifty.com/cosmic/software/iconstarsmain3.png

206 名前:205 :01/09/09 21:52
すんません。マウスフックでしたね。

207 名前:デフォルトの名無しさん :01/09/09 22:09
>>205-206
ネタか?
タイトルバー内のクリック自体はWM_LBUTTONDOWNじゃ拾えない。
だからたとえば左ボタンならWM_NCLBUTTONDOWN、ボタンの表示は
WM_NCPAINTを引っかけろってことなんだけど。

208 名前:デフォルトの名無しさん :01/09/09 22:11
>>192
VC なら ATLWIN.H の CWndProcThunk が求めるものだと思うぞ。最初はダミーの
ウィンドウプロシージャを登録しておいて、後で this を潜り込ませるような thunk を
作って差し替えてる。

209 名前:205 :01/09/09 22:36
ありがとうございました。

210 名前:デフォルトの名無しさん :01/09/10 03:05
タイトルバーを右クリックしたときに独自のポップアップメニューを
表示させたいのですが、WM_NCRBUTTONDOWNで処理させようと
しても、無視されているのか普通にシステムメニューが表示されて
しまいます。
どう処理すべきなのでしょうか?

211 名前:デフォルトの名無しさん :01/09/10 04:06
システムメニューを書き換える>210

212 名前:デフォルトの名無しさん :01/09/10 08:03
>>186
http://mentai.2ch.net/prog/kako/957/957341074.html

の79にサンク(小さな関数を作る事でオブジェクトポインタとメソッドの2つを取得する手法)
の例がある

213 名前:デフォルトの名無しさん :01/09/10 12:04
Windows で kill( pid, SIGINT ) みたいなことってどうやったら
良いのでしょうか?

214 名前: :01/09/10 12:08
アルバイト版「もうバイトできる自信がない」の1へ

復活したぞ!早く戻って来るように。

215 名前:デフォルトの名無しさん :01/09/10 12:22
>>213
GenerateConsoleControlEvent

216 名前:198 :01/09/11 20:59
あー,レスついてるー・・・

>>200さん
んー,確かに,いろんなところで LoadIcon とか LoadCursor とかを
使ったサンプルが沢山あるんだけど,
http://www.microsoft.com/japan/developer/library/jpuipf/_win32_loadicon.htm
http://www.microsoft.com/japan/developer/library/jpuipf/_win32_loadcursor.htm

ってな感じで LoadImage を使えって書いてあったもので
ちょっとチャレンジしてみたんスよー。
どうも失敗気味っすねー。。。

217 名前:デフォルトの名無したんハァハァ :01/09/16 01:12
しつもんー。

マルチメディアファイル入出力 (mmio系)の API って通常のファイル入出力 API と何がちがうん?

218 名前:デフォルトの名無しさん :01/09/16 11:26
>>217
MSDN読んでもわからなかったら首吊って死ね。

219 名前:デフォルトの名無しさん :01/09/16 14:15
ぐは。

ってか、わかんなかったから聞いてるんだよ。
API バイブル見たけどやっぱり和下欄。

220 名前:デフォルトの名無しさん :01/09/16 18:06
親フォルダが違う2つのファイルのシェルコンテキストメニューの生成方法を教えて。
特にGetUIObjectOfに渡すパラメータの設定がわかりません。
親フォルダが同一の場合はわかるけど。

221 名前:デフォルトの名無しさん :01/09/16 18:59
>>216
LoadImage()後にCopyCursor()

222 名前:デフォルトの名無しさん :01/09/16 23:26
age

223 名前:デフォルトの名無しさん :01/09/17 13:02
GetVersionEx
なのですがWindowsXPはどう返してくるのですか?
また何どのへんを調べれば発売前のOS情報をえられますか?

224 名前:217 :01/09/17 14:01
>>217-219
やぱーりわかんない。おしえてくらはい。

225 名前:デフォルトの名無しさん :01/09/17 14:10
>>224
首吊って死ね

226 名前:デフォルトの名無しさん :01/09/17 18:03
>>217

http://www4.big.or.jp/~yofune/

227 名前:デフォルトの名無しさん :01/09/17 18:08
http://www2u.biglobe.ne.jp/~hole/

228 名前:nanasisan :01/09/17 18:13
>>227
スレと無関係。つーかブラクラに近いモノがあるな。

229 名前:デフォルトの名無しさん :01/09/17 18:22
>>226
たのしい?
vcppML見てる奴には言われなくてもまるわかりだし。

よふねもそれぐらい覚悟してたでしょ。

230 名前:デフォルトの名無しさん :01/09/18 00:56
WindowsのHelloWorld!程度なものを書いてます。
で、プロシージャに送られてくるHWNDと、CreateWindowの返値である
ウィンドウハンドルが別の物なのですが…これはどうしてなのでしょうか?

231 名前:デフォルトの名無しさん :01/09/18 01:34
>>230
ソース書いてみろ

232 名前:230 :01/09/18 01:58
>>231
長くて申し訳ありませんが宜しくお願いします。エラー処理は省きました。
これのhWndの値と、wndProcの引数のハンドルが違うんです

HWND hWnd
const char* const className = "test";

int APIENTRY WinMain( HINSTANCE inst, HINSTANCE pre_inst, LPSTR cmd, int scmd ){
  WNDCLASS wc;
  wc.style = 0;
  wc.lpfnWndProc = static_cast<WNDPROC>(wndProc);
  wc.cbClsExtra = 0;
  wc.cbWndExtra = 0;
  wc.hInstance = 0;
  wc.hIcon = LoadIcon( NULL, NULL );
  wc.hCursor = LoadCursor( NULL, IDC_ARROW );
  wc.hbrBackground = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
  wc.lpszMenuName = NULL;
  wc.lpszClassName = className;

  RegisterClass(&wc);

  hWnd = CreateWindow(
      className, className, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
      100, 100, static_cast<HWND>(0), static_cast<HMENU>(0), 0, static_cast<LPVOID>(0) );

  ShowWindow( hWnd, SW_SHOWDEFAULT );
  UpdateWindow( hWnd );


  MSG msg = { 0,0 };
  while(GetMessage(&msg, NULL, 0, 0)){
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }

  return msg.wParam;
}

233 名前:nanasisan :01/09/18 11:34
>>232
それはそういうもんだと思うけど。
どっちのハンドルを使っても問題なく処理できたよ。
テストしたのはSetWindowText()だけど。
ウインドウへのハンドルをあらかじめ複製してくれてるような感じ。

明確な資料は忘れたんで探してくれ。

234 名前:232 :01/09/19 00:22
>>233
ありがとうございます、そういうもんなんですね。
ちなみにサブクラス化の関係でプロシージャ側のハンドルを使って色々やる必要があったんです。
もう一度MSDNのウィンドウズハンドラの辺りを良く読んでみます。

235 名前:デフォルトの名無しさん :01/09/19 00:41
RegSetValueExでレジストリに書くとき
char* の文字列はWin98,NTで問題なく書けるけど
wchar_t* の文字をWin98でも書きたいときとかどうすればいいの?
バイナリで書くしかない?Win98がUnicode対応してないから厳しいんだけど。

236 名前:210 :01/09/19 22:34
遅レスで申し訳無いのですが、システムメニューを
書き換えるとタスクバーを右クリックしたときのメニュー
なども変わってしまいますよね。
「タイトルバーを右クリック」の時だけ違うメニューにする
にはどうすればいいでしょうか?

237 名前:デフォルトの名無しさん :01/09/20 00:15
>236
WM_NC〜

238 名前:210 :01/09/20 01:28
ダイアログボックスではダメということはあるのでしょうか?
例えば、ダイアログプロシージャ内で

case WM_COMMAND:
  switch(LOWORD(wParam)){
    case WM_NCRBUTTONDOWN:
      MessageBox(hDlg,(LPCSTR)"ノチー",(LPCSTR)"(・Θ・)",MB_OK);
      break;
   (以下略)

のように記述したとしても全く無視されてしまうのですが…。
(実際にはこの部分にTrackPopupMenuで独自のメニューリソースを
 表示させたい)

239 名前:デフォルトの名無しさん :01/09/20 11:33
>>238
お前そもそもWM_COMMANDの使い方が間違ってる

240 名前:210 :01/09/20 13:39
>239
おっしゃるとおりでした。
なんで、WM_COMMANDの下に書いてるんだ、俺は…。鬱駄。

241 名前:sage :01/09/20 23:43
ほのぼのage

242 名前:デフォルトの名無しさん :01/09/21 00:53
VBで乱数を連続で取得するとなぜか数字が近いっす。
んで、それを解消するのにWINAPIのSleep使ったら?って
言われたんすけど、いかように?
乱数を取得するまえにsleepをはさんだらよろしか?
sleep(1)
myvalue = int((43 *rnd) + 1)
こんなん?初心者でスマソ

243 名前:デフォルトの名無しさん :01/09/21 02:19
>>242
randomizeじゃないのかなぁ?
asleepは関係ないと思われ

244 名前:潜伏中 :01/09/21 11:19
>>242
アプリケーションの起動時に時刻を元にRandomize(乱数を初期化)すると良い。
Sleepでスリープさせても後で得られる乱数値は何も変わらないぞ。

具体的には Randomize (Time) を事前に実行させておけばOK。

245 名前:デフォルトの名無しさん :01/09/22 19:46
グローバルフックをしたいのですが、データの共有にメモリマップトファイルを使っています。
それで他のプロセスにDllがインストールされた時、マップトファイルのオープンに
失敗した時の処理はどうすればいいのでしょうか。知りたいのは、
・例外を出した場合、誰がそれを補足するのか?
・CallNextHookExを呼ばなくても、せいぜい何かのアプリが働かなくなるくらい
ですむのか(OSが内的に使用してないか)
ですが、お願いします。

246 名前:デフォルトの名無しさん :01/09/22 20:13
>>245
例外を投げても、それを補足する奴がいないから、
デフォルトのハンドラが呼ばれると思う。
早い話が、逝ってヨシ。

たとえ自分が働けなくなっても、CallNextHookEx を呼んでおかないと、
たぶんシステムの挙動がおかしくなる。

そもそも、共有メモリをオープンできなかったときの処理を質問されても、
「そんなこと、知るわけねーだろっ!」としか言いようが無いぞ。

共有メモリのオープンに失敗するかもしれないという心配から
開放されたいのなら、たとえば共有セクションを作るとか、
探せばいろいろ方法があるだろ。

247 名前:245 :01/09/22 21:30
246さん、ありがとうございます。
共有セクションですか、分かりました。調べてみます。
フックプロシージャがフックハンドルを引数として受け取ってくれるか
帰り値をノンゼロにすればCallNextHookしてくれるとかだと便利なんだけどなあ。

248 名前:246 :01/09/22 21:40
>>247
グローバルフックの場合、CallNextHookEx に渡すフックハンドルには、NULL を与える。
無理矢理フックハンドルを渡すと、確か失敗する。

共有セクションを作りたいなら、リンカの /SECTION オプションか、
定義ファイルの SECTIONS を調べてみれ。

249 名前:242 :01/09/22 23:14
>>243,244
ありがとうです!
やってみます。

250 名前:デフォルトの名無しさん :01/09/22 23:26
>>248
むかしNULLを渡したら挙動がおかしくなったことがあったけど
グローバルフックでもちゃんとフックハンドル渡さないと駄目


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