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

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

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では大昔からできたよ

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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)