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


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

Win32API質問箱 Build22
751 名前:デフォルトの名無しさん :04/09/11 14:29:10
別でいいよ。

752 名前:デフォルトの名無しさん :04/09/11 14:31:49
実際にWin64の質問が増えてからでいいって。
今までほとんど無いんだから今のところ現状維持で。

753 名前:デフォルトの名無しさん :04/09/11 14:41:47
ただ単に「WindowsAPI質問箱」にするだけじゃ駄目なん?

754 名前:デフォルトの名無しさん :04/09/11 14:49:50
それじゃWinFXも入る予感

755 名前:デフォルトの名無しさん :04/09/11 14:58:02
俺の持ってるWindowsプログラミングに関する唯一の本は
パラメータの型としてSIZE_Tとなってるところが、全てDWORDです。
そろそろ新しい版を買えことかな。AdvancedWindows3edです。

756 名前:デフォルトの名無しさん :04/09/11 14:58:57
( ´_ゝ`)フーン

757 名前:デフォルトの名無しさん :04/09/11 15:25:01
マウスボタンをLR同時押しするとWM_*BUTTON〜メッセージが来ないマウスと、
両方通知されるマウスがある。
ハード依存なのか、それともドライバなのかなぁ。
何か情報ないでしょうか?

758 名前:デフォルトの名無しさん :04/09/11 15:26:28
どっちもありうる

759 名前:757 :04/09/11 15:42:00
ドライバだった。
同時押し時にホイールとして機能するようになってたよorz

760 名前:デフォルトの名無しさん :04/09/11 18:29:07
Cのウィンアプリで、コールバックを使わずに組むのはダメなのでしょうか。
以下のプログラムのような感じなのですが。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1086258254&res=6

うまく言えないのですが、タイトルの時は、タイトルの処理だけに当たり
フィールドの時は、フィールドの処理だけとしたいのです。
普通のやり方だと、グローバル変数、static変数を
使わなければいけない所もでてきてしまいます。
手続き型っぽくしたいのです。

761 名前:デフォルトの名無しさん :04/09/11 18:46:09
ウィンアプリはイベントドンブリが基本だから、
注文したカツどんがすぐ出てくるとは限らないぞ

762 名前:デフォルトの名無しさん :04/09/11 19:18:46
>>760
ゲーム進行用のスレッドを作ってそこであれこれやるのじゃだめか?

763 名前:760 :04/09/11 19:35:53
>>761
詳しくお願いします。

>>762
スレッドが難しくて分からないです。
眼で追いやすい手続きっぽいのがいいです。

764 名前:デフォルトの名無しさん :04/09/11 19:48:04
>>755
DEPなんて影も形もなかったころから将来PAGE_EXECUTEをサポートする
プロセッサが現れるかもしれないからちゃんとVirtualProtectしておけと
書いてありましたね。

765 名前:デフォルトの名無しさん :04/09/11 20:30:50
LR同時押しは依存症

766 名前:デフォルトの名無しさん :04/09/11 20:44:48
>>764
あれはいい本だ。ところで
ttp://www.wintellect.com/about/instructors/richter/prog_apps.aspx
に第4版の訂正が載っていて、
「DLL の注入と API フック」の章では
オリジナルでは単に WriteProcessMemory だけだったが、
VirtualProtect で PAGE_EXECUTE_READWRITE を設定しろと書いてある。

この訂正の理由が DEP 関係なら理解できるんだけど
> The sample fails to hooks some applications.
「一部のアプリで失敗する」っていう理由がよく分からない。
同じ環境でも成功するアプリと失敗するアプリがあるの? なんで?

767 名前:デフォルトの名無しさん :04/09/11 22:52:46
WS_EX_CLIENTEDGEのスタイルを指定したときの内側の枠の幅はどうやれば取得できるのでしょうか?
EDITとかに好みのフォントを設定した後、最適な高さにリサイズしたいのですが、
GetTextMetricsではフォントグリフの高さしか取得できず、ウインドウをその高さにリサイズすると
当然文字が欠けてしまいます。

768 名前:デフォルトの名無しさん :04/09/11 22:57:15
化けるわけないじゃん

769 名前:デフォルトの名無しさん :04/09/11 23:34:48
>>767
GetWindowRect()
GetClientRect()
ClientToScreen()
これらを使えばスタイルが変わってもプロシージャの使いまわしが化膿。

770 名前:デフォルトの名無しさん :04/09/12 00:19:59
透過転送を使いたいがためだけにイメージリストを使うのってアリですか?

771 名前:デフォルトの名無しさん :04/09/12 03:14:14
SendInput関数・INPUT構造体について質問です。
これを使用したいのですが、なぜかコンパイルエラーに
なってしまいます。ヘッダにしっかりと定義の記述があるのですが、
「error C2065: INPUT' : 定義されていない識別子です。」
のようなエラーになってしまいます。user32.libなども、
読み込む設定になっています。

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

環境
winxp vc6.0 sp6

772 名前:デフォルトの名無しさん :04/09/12 03:40:19
>>771
#if (_WIN32_WINNT > 0x0400)

773 名前:デフォルトの名無しさん :04/09/12 03:41:29
>>771
_WIN32_WINNT

774 名前:773 :04/09/12 03:42:03
すまん、かぶった

775 名前:デフォルトの名無しさん :04/09/12 03:55:54
_WIN32_WINNT 0x0500 と定義してあります。
それでも、ダメなようです。

変数の.を打ち込んだときに、リストは出てきます。
(インテリジェンス機能?)

それでも、コンパイルが通らないんです…。

776 名前:デフォルトの名無しさん :04/09/12 04:04:43
>>775
ヘッダのインクルードより前に#defineしてるか?

777 名前:760 :04/09/12 08:49:46
>>760の書き方はなぜいけないかまだ分かりません。

HandleTitleの所のメッセージチェックの所に、
DispatchMessage(&msg);を書いて、
WndProcにif(game == Title)を条件に、
そのメッセージチェックを書けば同じ処理になると思うのですが。

DispatchMessageが、ただWndProcに行くだけと考えているので
そう書いたのですが、他にも何か処理をしているのでしょうか。

778 名前:デフォルトの名無しさん :04/09/12 08:58:47
モードレスダイアログをたくさん開いているとき、
IsDialogMessage(hwnd)をダイアログの数だけ実行するのですか?
それともNULLとかを指定すれば自動ですべてのウインドウに適用されるのでしょうか?

779 名前:デフォルトの名無しさん :04/09/12 12:29:53
>>777
世の中にはメッセージキューにたまらないで直接WndProcへ行くメッセージもあるからな。
(つまりGetMessageからじゃ取り出せない)

780 名前:デフォルトの名無しさん :04/09/12 12:43:51
>779 に先に簡潔に書かれちゃったけど,どうせ書いたから書き込んじゃえw

>777
きみはゲームで使うウィンドウを作るために RegisterClass(Ex) でウィンドウクラスを登録するだろうから
どうしても WndProc コールバック関数を書く必要がある。

それに上等なゲームなら欠かせないいくつかのメッセージは SendMessage() で送られて来る。
それらはメッセージキューにポストされるものではなく,つまり GetMessage()〜DispatchMessage() を
通過せず直接コールバックを呼ぶもののはず (だよね?少なくとも,今の時点では致命的な間違いではないはず)。
例えば WM_MOUSEACTIVATE,WM_CAPTURECHANGED,WM_ERASEBKGND,それに WM_(QUERY)ENDSESSION。
(他にも SendMessage で送られて来るものは多数)
マルチタスク環境にてユーザに親切なゲームを作りたいなら,これらのメッセージも的確に処理するべき。

781 名前:デフォルトの名無しさん :04/09/12 13:06:07
>760==777
ゲームで使う色々な変数だが,グローバル変数を使うのがいやなら
構造体にまとめて SetWindowLong() で GWL_USERDATA にでも入れておけばいい。
WndProc の中で GetWindowLong() で取り出すんだ。

入れるタイミングは,そうだね,WM_NCCREATE でどうだ。
 if (msg == WM_NCCREATE) {
  SetWindowLong(hwnd, GWL_USERDATA, (LONG)new GameData());
  return 0;
 }

破棄するのは WM_DESTROY でもいいだろう。
 if (msg == WM_DESTROY) {
  GameData *gameData = (GameData *)GetWindowLong(hwnd, GWL_USERDATA);
  delete gameData;
  SetWindowLong(hwnd, GWL_USERDATA, 0); // 安全のためにな
  PostQuitMessage(0);
  return 0;
 }

GameData が,必ず適切に処分しないといけない特殊なリソースを使っているならば
WM_ENDSESSION でも delete gameData; を忘れてはいけない。
少なくとも WM_DESTROY は送られて来ないからね。
 (確か WM_CLOSE すらも送られて来なかったような。。。)

782 名前:デフォルトの名無しさん :04/09/12 13:38:37
>>776
神!!!!!!!!

…というより、こんな基本的なことを忘れていたモレは
いったいなんなんだろうかと小一時間。

マジで反省してきます。スレ汚しすいません。

783 名前:760 :04/09/12 13:52:37
ありがとうございます。

>>779
そうだったのですか。それだと、あのやり方だとダメですね。

>>780
同じく、あの方法だと、より詳しく知っていないと危険ですね。

所で思ったのですが、myProg.lpfnWndProcをTitleの時ならTitleWndProc、
Fieldの時ならFieldWndProcと、ゲームルーチン切り替え時に一緒に変えれば、
コールバック先を変える事が出来るのでしょうか。
それなら、TitleWndProcにタイトルの事だけ書くことが出来、
自分の考えに近いものが出来そうなのですが。

>>781
知らないやり方でした。勉強してみます。

ただ、うまく組めば、キャラクターのHPとかのデータを、
ローカル==autoで置いて置けるので、何か悔しかったもので。

アイテムのデータとかは、グローバル、staticになるので、
その方法が使えそうです。

784 名前:デフォルトの名無しさん :04/09/12 14:26:53
MCIを使ってオーディオプレーヤーを作成してますが、
ミュートのプログラムの作り方がよくわかりません。
教えてください

785 名前:デフォルトの名無しさん :04/09/12 14:36:27
よく考えるとスレタイの「API質問箱」ってわかりにくいタイトルだよな.
テンプレに「Win32APIとはなんぞや」ぐらい書いてあった方が良いかもね.
このページへの直リンでもいいけど.
http://black.sakura.ne.jp/~third/system/winapi/win1.html



786 名前:デフォルトの名無しさん :04/09/12 14:41:31
宣伝はやめてください。

787 名前:デフォルトの名無しさん :04/09/12 14:53:56
>>786
リンク張らなければいいだけでしょ


788 名前:デフォルトの名無しさん :04/09/12 14:56:29
今、785にリンク貼ったこと自体が宣伝ですね。

789 名前:デフォルトの名無しさん :04/09/12 14:57:21
Win32APIが何かわからん奴はそもそもここに来ないだろ。

790 名前:デフォルトの名無しさん :04/09/12 15:00:05
>>783
> 所で思ったのですが、myProg.lpfnWndProcをTitleの時ならTitleWndProc、
> Fieldの時ならFieldWndProcと、ゲームルーチン切り替え時に一緒に変えれば、
> コールバック先を変える事が出来るのでしょうか。

SetWindowLongPtr(hwnd, GWLP_WNDPROC, FieldWndProc);でできる。

791 名前:760 :04/09/12 15:24:57
>>790
ありがとうございます。やってみます。

792 名前:デフォルトの名無しさん :04/09/12 17:39:54
>>786
いやなら見なきゃいいだけでしょ。

793 名前:デフォルトの名無しさん :04/09/12 18:43:13
Web上のテキストファイルをファイルに保存したいのですが、
URLからメモリに取り込むところがわかりません。
CreateFileもURLでは無理みたいなので、どうしたらいいでしょうか。

794 名前:デフォルトの名無しさん :04/09/12 18:46:04
FileMappingを使ってプロセス間通信を行いたいのですが、
テンポラリファイルを作らないでファイルマッピングを行う場合最大サイズを指定しなければなりません。
状況によってこのサイズが極端に変わるのですが、
目いっぱい大きくとって4Gとか指定してもいいのでしょうか。

795 名前:デフォルトの名無しさん :04/09/12 19:11:12
>>793
ttp://nienie.com/~masapico/api_sample_inet04_c.html

796 名前:デフォルトの名無しさん :04/09/12 19:12:42
>>792
宣伝必死ですね

797 名前:デフォルトの名無しさん :04/09/12 23:30:39
リッチエディットコントロールについて質問です。
「文字列」という単語をマウスで前方からゆっくり選択していくと「文」「字列」という風に、
1文字づつ選択されずに一気に2文字や3文字が選択される事がよくあります。
これはリッチエディットのバグ(仕様)なんでしょうか?
それとも何か設定を与えると回避できるものなんでしょうか?
ワードパッドでも確認できます。

798 名前:デフォルトの名無しさん :04/09/12 23:36:50
クソ仕様

799 名前:デフォルトの名無しさん :04/09/12 23:43:32
>>797
IEでもなるよね。イライラする。

800 名前:797 :04/09/12 23:48:02
最悪ですね。
エディットコントロールを拡張するか自作するか。
いや、今日はもう寝よう…。

801 名前:デフォルトの名無しさん :04/09/12 23:49:55
ワードパッドでは「単語を自動選択」のチェックで動作を変更できるから
方法はありそうな気がする

802 名前:797 :04/09/12 23:55:46
>>801
そういやMFCのサンプルでワードパッドのソースコードありましたね。
ちとダイヴしてきます。

803 名前:デフォルトの名無しさん :04/09/13 00:31:30
ツリービューに LVS_EX_CHECKBOXES オプションを付けてチェックボックスを表示させたのですが
チェックボックスがチェック/解除されたタイミングを知るにはどうすればいいのでしょうか?
WM_NOTIFYにそれらしいメッセージは飛んできませんでした。
WM_NOTIFYのNM_CLICK等を拾って自分で変更があったかを確認してやるしかないのでしょうか?

804 名前:797 :04/09/13 00:56:20
原因がつかめました。
ECO_AUTOWORDSELECTION
リッチエディットにこのオプションフラグが設定されているとテキスト選択に不具合が出るようです。

フラグが立っているようならばフラグを下げてやればいいですね。
SetOptions(ECOOP_AND, ~(DWORD)ECO_AUTOWORDSELECTION);

>>801
ヒントありがとうございました。

805 名前:デフォルトの名無しさん :04/09/13 01:00:38
>>803
http://www.codeproject.com/listctrl/listcheckbox.asp
WM_NOTIFYでLVN_ITEMCHANGEDが通知されるのを捕まえる

806 名前:803 :04/09/13 01:55:53
>>805
感謝感謝!!

807 名前:デフォルトの名無しさん :04/09/13 09:32:00
MCIを使ってオーディオプレーヤーを作成してますが、
ミュートのプログラムの作り方がよくわかりません。


808 名前:デフォルトの名無しさん :04/09/13 09:33:40
そうですか

809 名前:デフォルトの名無しさん :04/09/13 09:39:35
ワロタ

810 名前:デフォルトの名無しさん :04/09/13 10:04:35
スタートメニューの終了オプションや、他のアプリケーションが
スタンバイ移行の要求をした場合に、それを止める方法は無いの
でしょうか?

電源プロパティのアイドルタイマーによるスタンバイ移行は、
SetThreadExecutionStateで止めることができるようですが、
↑のスタンバイ要求は止められないようです。

どなたか教えていただけないでしょうか。

811 名前:デフォルトの名無しさん :04/09/13 10:37:53
WM_POWERBROADCASTを処理する

812 名前:デフォルトの名無しさん :04/09/13 10:42:23
>>811
ありがとうございます。WM_POWERBROADCASTに関連したMSDNを
見てきてがんがります。

813 名前:デフォルトの名無しさん :04/09/13 13:59:03
入力デバイスが接続されたのを関知したいのですが、デバイスインターフェイスGUIDであるところの
GUID_CLASS_INPUTの定義がどこにあるのか判らず、困っています。
誰か教えてください。


814 名前:デフォルトの名無しさん :04/09/13 14:09:15
GUID_CLASS_INPUTでIncludeディレクトリをぐぐる

815 名前:デフォルトの名無しさん :04/09/13 14:12:54
>>814
その「ぐぐる」の使い方は始めてみた

816 名前:デフォルトの名無しさん :04/09/13 14:14:38
grepすると書こうと思ったら反射的に「ぐぐる」になってしまったorz

817 名前:813 :04/09/13 16:28:57
>814
残念ながら見つかりませんでした。
Webでもググってみたんですが情報が全然ありません(辛うじてDDK関連の情報があるのみ)。
悲しいのでしばらく寝込みます。

818 名前:デフォルトの名無しさん :04/09/13 16:45:21
>>817
うん、DDKに入ってるヘッダ(hidclass.h,poclass.h)に定義されてる

819 名前:デフォルトの名無しさん :04/09/13 16:49:31
>>813
DDKのhidclass.hにて(゚∀゚)ハケーソ!!


820 名前:デフォルトの名無しさん :04/09/13 17:53:21
ウィンドウについてるスクロールバーの端っこの部分(三角が書いてあるところ)
っていつ描画されるんですか?

821 名前:デフォルトの名無しさん :04/09/13 17:57:29
描画すべきとき

822 名前:デフォルトの名無しさん :04/09/13 18:01:42
もしくは、スクロールバーの端の部分を再描画する方法・APIを教えてください。
SetScrollInfoだと端っこは再描画してくれません。

823 名前:デフォルトの名無しさん :04/09/13 18:14:53
>>822
ぜんぜん検証してないテケトーな意見だが、
ウィンドウごと再描画すればいいんじゃね?

824 名前:813 :04/09/13 19:11:15
>818,819
ありがとうございます。しかしDDKってWebで配布してないんですよね…
ググったときにヘッダファイルが引っ掛かっていたので、それを使ってみることにします。

825 名前:デフォルトの名無しさん :04/09/14 00:12:47
CreateThreadで作ったスレッド内ではCランライム関数を使ってはいけないそうですが、
newや__try __catchやSTLも使えないんでしょうか。
だめな場合wsprintfの1024バイトの壁を破る簡単な方法ってありませんか。
_beginthreadexにするのは他人が作ってる部分なので無理なんです。

826 名前:デフォルトの名無しさん :04/09/14 07:56:01
>825
s(n)printfするためだけにもう一個自分で_beginthread(ex)してスレッド作れば?

827 名前:デフォルトの名無しさん :04/09/14 09:37:22
>>825
>だめな場合wsprintfの1024バイトの壁を破る簡単な方法ってありませんか。

1行ごとに処理するとかなんとかして、そこを改善した方がヨサゲ・・・

828 名前:デフォルトの名無しさん :04/09/14 10:17:49
>>825
CreateThread()を使ってるアフォに_beginthreadex()を使うよう説得する。
CreateThread()と_beginthreadex()は引数の並びが同じなので、変更は楽。
(ただし、スレッドに渡す関数の型が違うのでキャストする必要がある。)
この仕様変更を受け入れるよう、きつく催促することをお薦めする。

829 名前:デフォルトの名無しさん :04/09/14 10:28:53
>>825
どうあってもだめな場合は、Shlwapi.hの関数群を使う。
MSDNをStrCpy StrCat などでググってみれ。

ん?それ以前に、wnsprintf()は本当にstdio.hのを使ってるのか?
同じ名前の関数が、Shlwapi.hもあるぞ。確認しる。
これらはIEのコンポーネントの一部だ。

830 名前:デフォルトの名無しさん :04/09/14 12:17:23
>>825
スタティック変数が他スレッドからの呼び出しで破壊される等の深刻な問題ではなく、
リソースリークを起こすだけなので気にしないで使っちゃうってのもまぁありかも。

リソースが深刻なほど少ない環境や、長期間連続稼動させてる環境で使用される
のなら考え物ですが。

831 名前:デフォルトの名無しさん :04/09/14 12:48:26
頭のゆるい人があらわれた!

832 名前:デフォルトの名無しさん :04/09/14 19:38:51
('A`)ヒロシです…

MCIを使ってオーディオプレーヤーを作成してますが、
ミュートのプログラムの作り方がよくわかりません。

('A`)ヒロシです…

833 名前:デフォルトの名無しさん :04/09/14 19:59:37
>>832
もうそのネタ飽きた

834 名前:デフォルトの名無しさん :04/09/14 20:34:55
MCIでのミュートはボリュームを下げろ。

835 名前:デフォルトの名無しさん :04/09/14 20:58:24
>>825
CreateThread でつくったスレッドで使っちゃいけないのは、
Cライブラリ関数の中でも、
内部的にグローバル変数を使用している一部だけ。
sprintf は問題なし。new や try〜catch も使っていい。
それに、たとえ問題になる関数を使っても >>830 の通りなので、
常駐アプリでもない限り構わないんじゃない?

836 名前:デフォルトの名無しさん :04/09/14 21:07:46
>>835
スレッド毎に独立した errno を TLS に割り当てる必要があるから、
実質ほぼ全ての C ライブラリ関数がダメだったと思う。
もちろん処理系次第だけど。

837 名前:835 :04/09/14 22:22:05
>>836
errno か、確かに言われてみれば…。
なるほど、835は取り下げます。
でもさすがに try〜catch は問題ないよね?

838 名前:デフォルトの名無しさん :04/09/14 22:41:24
ダメだって書いてあるんだからtry catchは使うべきではないだろ
__try __exept __finallyで代用するのがいいんじゃないの?

839 名前:760 :04/09/14 22:49:13
>>760です。
C+ウィンアプリを、static、グローバル変数を使わず、
手続き型っぽく作りたいと言っていたものです。
以下のプログラムはどうでしょうか。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1086258254&res=7

>>760のでは、>>779-781で、送られてこないメッセージがある等の
ご指摘を受けたのですが、そういう致命的なエラーはあるでしょうか。

>>783>>790のコールバック先を切り替える方法では
うまく出来なく、新しい方法を考えていました。

840 名前:デフォルトの名無しさん :04/09/14 22:49:56
OLE DragDropで、アプリケーション内でのドロップと
外部アプリケーションへのドロップで動作を変えたいのですが
この場合って適当なクリップボードフォーマットをでっち上げるのと、
フラグかなんかで場合分けするの、どっちがいいんでしょうか?

841 名前:825 :04/09/15 01:37:28
皆さんレスありがとうございます。

最初は少しぐらいリークしてもいいかと思ったんですが、呼び出し毎に
新スレッド生成・終了して蓄積されていくのでちゃんと対応することにしました。
スレッド生成元を変えてもらうのは不可能なのが困りものです。

一番変更が少なそうに思いますので、sprintf系については教えていただいた
Shlwapiのを使うことにしてみます。MSDNをちょっと読んだ感じではサービスでも
使えそうですし。

842 名前:825 :04/09/15 01:46:59
>>841 のつづきです。

__try, __except の使用はOKなのでしょうか?
libcmt.libとかをつけないとリンク時にエラーが出るので、もしかしたら
Cランタイムの一部なのかと不安だったのですが、機能的にはふつうの
ランタイム関数とは趣が異なるので大丈夫なんでしょうか。

C++のtry, catchはlibcmt.libなしでもリンクは通ったのですが、
なんか不安なのでnewやSTLも合わせて使用をやめておきます。

843 名前:デフォルトの名無しさん :04/09/15 03:53:21
>839 いろいろ考えるなあきみは (;´Д`) 発想の方向はちょっと間違えているけど、
きみのような人は嫌いじゃない。

たとえば WM_PAINT の時、DefWindowProc で何をやられているか、怖いな。
そのコードだと、WM_PAINT も一度 DefWindowProc を抜けた後に
きみ自身の WM_PAINT 処理を行う事になるよね。
しかし、1度の WM_PAINT で 2 度以上 BeginPaint() をしてはいけない。
さもないと思うようには描画されない。もれは経験済みだw
# いや、DefWindowProc が何をやっているか知らないから、何ともいえないけど。

そもそも、きみのコードはすでに手続き型ではなく
普通の (でも下手に喘いでいる分、滑稽な) イベントドリブンに見える。
そんなきみに漏れが一番すすめるソリューションは、大まかにこんな感じのなんだ。

LRESULT CALLBACK
WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
 if (g_scene == BATTLE) HandleBattle(hwnd, msg, wParam, lParam);
 else if (g_scene == SELECT_ITEM) SelectItem(hwnd, msg, wParam, lParam);

 return DefWindowProc(hwnd, msg, wParam, lParam);
}

HandleBattle や SelectItem の中身は >839 のコードからメッセージポンプを外したもの。
あ、HandleBattle から SelectItem を呼び出すんじゃないよ。
代わりに g_scene = SELECT_ITEM; と書く。

844 名前:デフォルトの名無しさん :04/09/15 08:11:16
自前のウインドウクラスライブラリで、ダイアログを実装しようとしているのですがうまくいきません。
下のようにすると、ダイアログを閉じたときに、
なぜか親ウインドウが他の関係ないウインドウ(エクスプローラから起動したらエクスプローラウインドウの下、VisualStudioでデバッグするとVisualStudioウインドウの下)に隠れてしまいます。
TopMost属性をもたせてから解除する方法を試しましたが、一瞬ちらつきます。APIのDialogBoxより不自然です。
どうすればいいのでしょうか。


int WND::ShowDialog()
{
EnableWindow(m_hParent,false);
bool m_EndDialog=true;

MSG msg;
while (GetMessage(&msg, NULL, 0, 0) && m_EndDialog == true)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Hide();
EnableWindow(m_hParent,true);
return DialogResult;
}

845 名前:760 :04/09/15 08:52:46
>>840
ありがとうございます。

>WM_PAINT の時、DefWindowProc で何をやられているか、怖いな。
>1度の WM_PAINT で 2 度以上 BeginPaint() をしてはいけない。
そういえば。逆に、WM_PAINTが来た時、BeginPaint〜EndPaint、
DefWindowProc、両方ともを行なわなかった時も、おかしくなりますよね。

では、以下のはどうでしょうか。
while((getMsgRtn = GetMessage(&msg, NULL, 0, 0)) > 0)
{
  TranslateMessage(&msg);

  if(msg.message == WM_KEYDOWN && ...)
  {
    *item = selectItem;
    break;
  } else if(msg.message == WM_PAINT) {
    ・・・
  } else
    DispatchMessage(&msg);
}

>漏れが一番すすめるソリューションは、大まかにこんな感じのなんだ。
こういうタイプのも考えていました。
ただ、これだと、SelectItemに行くとき、HandleBattleのキャラデータが、
ローカルに置いておくと当然分からないから、グローバルでないといけません。

HandleBattleにキャラデータがあり、SelectItemへ行く時、スタックに積んで、
戻り値(参照渡し)でどのアイテムか戻ってくる形にしたいのです。

846 名前:760 :04/09/15 09:16:08
又は、>>845のDispatchMessageに行かないのがダメなら、
以下のならどうでしょう。DispatchMessage(WndProc)に変数(useMessage)を
渡せないから、g_useMessageとグローバル変数を使ってしまいますが。

while((getMsgRtn = GetMessage(&msg, NULL, 0, 0)) > 0)
{
  g_useMessage = 0; //まだゲームルーチンでメッセージを使っていない
  TranslateMessage(&msg);

  if(msg.message == WM_KEYDOWN && ...) {
    g_useMessage = WM_KEYDOWN;
    *item = selectItem;
    break;
  } else if(msg.message == WM_PAINT) {
    g_useMessage = WM_PAINT;
    ・・・ }

  DispatchMessage(&msg);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  if(!g_useMessage) return 0;

  switch(msg)
  {
    case WM_DESTROY: PostQuitMessage(0); break;
    default: return(DefWindowProc(hWnd, msg, wParam, lParam));
  }
  return (0L);
}

847 名前:デフォルトの名無しさん :04/09/15 09:26:52
>>846
結局普通のWndProcの使い方に近づいていってるなw
なんかゲームのデータ保持しときたいならWindowに持たせときゃいいじゃないか。
邪推だけど、意地でもWindosAPIなんかわかってやるもんかって感じがする。

848 名前:デフォルトの名無しさん :04/09/15 09:54:12
最初から読んでないけど、シーン管理クラス作ってループ回すのとどう違うんですか。

849 名前:760 :04/09/15 10:19:29
>>847
>結局普通のWndProcの使い方に近づいていってるなw
始めのやり方から妥協してきているんですかね。

>ゲームのデータ保持しときたいならWindowに持たせときゃいいじゃないか。
>>781のやり方に近いですかね。
ただ、Cのコンソールプログラムを長くやってきたせいか、変数のスコープとかに
すごくこだわっていて、使う事がない場所からは、見えないようにしたいのです。

>意地でもWindosAPIなんかわかってやるもんかって感じがする。
確かにそうですね。必要最低限なもの以外(メッセージの部分など)は、
長くやってきたコンソールっぽく書きたいというのがありました。

ただ、逆に言うと、猫、創作プログラミングの町などの一般的な書き方は、
C言語(標準C)のセオリーから大きく離れすぎていると思います。

850 名前:デフォルトの名無しさん :04/09/15 10:27:23
>離れすぎていると思います。

どうしてそう思うか説明できますか?
それが出来ないのなら多分あなたの感覚の方がおかしいです。

851 名前:760 :04/09/15 10:34:04
>>848
C++は殆ど分かりません。ローベルさんの所で少しかじったぐらいです。
ただ、ググってソースを見てみた所、何となくその意味は分かりました。

うまく言えませんが、自分がコンソール風で行こうとしているのに対し、
猫とかの一般の書き方をしつつ、スコープ等も考慮するという感じでしょうか。

852 名前:760 :04/09/15 10:44:50
>>850
セオリーと大きく書きすぎたほどの事ではないかも知れませんが、
やはりstatic、グローバル変数です。標準Cでは使う事が殆ど無いですから。
一般の書き方だと、使わないと組めないと思いました。
>>845のやり方が大丈夫なら、ひとつも使わずに組めると思います。

853 名前:デフォルトの名無しさん :04/09/15 10:51:36
わからんな。
いや、わかるか。
こんなことする暇がないからC++ができたんだな。
納得したぞ。

854 名前:デフォルトの名無しさん :04/09/15 10:56:47
>>852
グローバル・スタティック変数なんて、
Windowsのプログラム書いてても滅多に使わないけどな・・・

普通は構造体を確保して、
そのポインタをSetWindowLongでウィンドウに関連付けるとかじゃね?

>猫、創作プログラミングの町などの一般的な書き方
サンプルはわかりやすくするために、
これらの手順を省いてるだけだと思われ

855 名前:デフォルトの名無しさん :04/09/15 10:59:19
>>854
C++ならそうかもしれんが、
Cだと('A`)マンドクセからけっこう使っちゃいそう。
っていうか実際使う。

856 名前:760 :04/09/15 11:05:33
>>845のやり方が正しいかまだ分かりませんが、何かためしに作ってみます。
そんな致命的なエラーが出るとは思わないので。

>>853
WinSDKプログラムは、C++で作る事を前提に作られているんですかね。

>>854
>サンプルはわかりやすくするために、
>これらの手順を省いてるだけだと思われ
それもあると思います。

>>855
その通りです。

857 名前:デフォルトの名無しさん :04/09/15 11:10:22
エクスプローラのReBarの枠やフォルダツリービューの枠のように
WS_EX_CLIENTEDGEよりもずっと薄いエッジを持ったウインドウを作るにはどうすればいいのですか

858 名前:844 :04/09/15 11:36:04
サムワンヘルプミー

859 名前:デフォルトの名無しさん :04/09/15 11:37:12
ノーバディヘルプユー

860 名前:デフォルトの名無しさん :04/09/15 11:53:13
普通にDialogBox使えよ

861 名前:デフォルトの名無しさん :04/09/15 12:49:38
>>860
リソースエディタで作ったウインドウではないので、DialogBoxでは駄目なんです。
.NETのクラスライブラリのような感じなんです。

862 名前:デフォルトの名無しさん :04/09/15 12:59:22
Hide()は何やってるの?

863 名前:デフォルトの名無しさん :04/09/15 12:59:57
>>857
ナントカSTYLE_FLAT

864 名前:デフォルトの名無しさん :04/09/15 13:08:11
>>862
ShowWindow(m_hwnd,SW_HIDE);
こうです。m_hwndはダイアログウインドウのハンドルです。

865 名前:デフォルトの名無しさん :04/09/15 13:16:02
>>861
だったらDialogBoxIndirect使え。
.NETのクラスライブラリみたいなやつとかどうでもいいことは言うくせに
肝心の関連しそうな周辺コードを一切出さないのは何のつもりだ?

866 名前:デフォルトの名無しさん :04/09/15 13:36:59
不謹慎かもしれませんが、教えてください。

もし仮に年号が新たに変わった場合、
GetDateFormatでその新しい年号を取得するためには、
どのようにすれば良いでしょうか?

867 名前:デフォルトの名無しさん :04/09/15 13:43:23
>>866
WindowsUpdateするしか無いんじゃないの?

868 名前:デフォルトの名無しさん :04/09/15 13:55:29
>>844
Hide() するまえに親を Enable するとどうなります?

869 名前:デフォルトの名無しさん :04/09/15 14:01:00
>>864
SetWindowPos(m_hwnd, NULL, 0, 0, 0, 0,
SWP_HIDEWINDOW | SWP_NOACTIVATE |
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER);

870 名前:デフォルトの名無しさん :04/09/15 14:06:29
>>865
すみません本当にすみません
>>868
ご助言ありがとうございました
>>869
そうやるとできました。本当にどうもありがとうございました。

871 名前: ◆FIcNi4f8js :04/09/15 14:09:04
>>859
三人称単数現在のsは?

872 名前:デフォルトの名無しさん :04/09/15 15:23:12
すいません、
CreateWindowExでWS_EX_CLIENTEDGE付きのスタティックコントロールを作って
みたのですが、この境界線の幅というのは、どうやって変えれば良いのでしょう
か?
具体的には、もっと細い境界線にしたいのですが、宜しくお願い致します。

873 名前:デフォルトの名無しさん :04/09/15 16:12:33
回答を無視して繰り返し質問する奴には教えない

874 名前:デフォルトの名無しさん :04/09/15 16:38:24
>>871
その言い方、あなたは抄録か忠一ですね

875 名前:872 :04/09/15 16:53:40
>>873
数スレ前まで遡ってみましたが、回答らしきものが見当たらなかったので質問
したのですが…


876 名前:デフォルトの名無しさん :04/09/15 18:36:14
>>875
>>863のことじゃない?


877 名前:デフォルトの名無しさん :04/09/15 19:06:26
マウスの移動範囲を制限できるAPIがあったと思うのですが
名前が思い出せません。どなたかご存知内でしょうか?

878 名前:デフォルトの名無しさん :04/09/15 19:13:51
ClipCursor

879 名前:デフォルトの名無しさん :04/09/15 19:47:26
>>877
http://www.google.co.jp/search?q=%E3%83%9E%E3%82%A6%E3%82%B9+%E7%A7%BB%E5%8B%95%E7%AF%84%E5%9B%B2+%E5%88%B6%E9%99%90&hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&sourceid=mozilla-search

880 名前:デフォルトの名無しさん :04/09/15 21:56:02
内容的には結局C#じゃなくてWinAPIなので、ここで質問させてもらいますね。

C#から任意のプログラムを最小化したりタスクバーから消したいのですが、
SendMessage(hWnd, Msg, wParam, lParam);をC#で書き直して
こんな感じでmyProcの内容を最小化させることが出来ました。
WindowsAPI.SendMessage(myProc.MainWindowHandle, WindowsAPI.WM_SYSCOMMAND,WindowsAPI.SC_MINIMIZE, -1);

myProcのアイコンをタスクバーからも消したいんですが、そのための関数はどんなものがありますか?
CreateWindowExというのを見つけましたが、これはWindowを作るときのものだから、僕の目的では使えませんよね。

881 名前:デフォルトの名無しさん :04/09/15 22:01:01
TerminateProcess

882 名前:872 :04/09/15 22:12:17
>>876
ええっ

ぐぐることも出来無いようなレスが回答だったんですか…

本当に分からなくて困ってるんですが、もうすこしヒントを頂けませんか?

883 名前:デフォルトの名無しさん :04/09/15 22:19:26
VC++三日目の初心者です、APIとMFCの違いも感覚でしか理解していません
いくらでもたたいてくれて結構です
画像を加工して保存がしたいのですが
HDCで保持するのとDIBデータを扱う2つがあるのですが
この2つについての、違いをご教授願いたいのです。


884 名前:デフォルトの名無しさん :04/09/15 22:26:04
>>883
DIB も DDB も HDC で管理する点では同じだ。
読み込みは LoadImage でできるが、書き込みは自分で関数書くことになる。
詳しく説明しようとすると、ここにまんまソース晒すことになるんでやめとくが、
キーワード出しとくから、がんばってみな。

BMP形式のファイルは先頭から
BITMAPFILEHEADER 構造体
BITMAPINFOHEADER 構造体
色値の配列(型は色数によって異なる)
という形式になっている。

ファイルの取り扱いはAPIならCreateFile、MFCならSerializeかCFileだ。

885 名前:デフォルトの名無しさん :04/09/15 22:44:22
>>880を要約すると

CreateWindowExにWS_EX_TOOLWINDOWを渡すのは、
外部から操作するのには使えなさそうだから、別の方法を教えてください

ということです。お願いします。

886 名前:デフォルトの名無しさん :04/09/15 22:48:14
HideWindow?

887 名前:デフォルトの名無しさん :04/09/15 23:17:10
>>885
SetWindowLongで出来るのかどうかオレにはわからない。
あとはアレだな、最小化アイコン専用のウィンドウを
つくって、本物ウィンドウと連携させるとか。

888 名前:デフォルトの名無しさん :04/09/15 23:52:15
プロセスを終了することなく親ウィンドウを閉じて作り直すこのって
どうゆう手順になりますか?

889 名前:デフォルトの名無しさん :04/09/15 23:55:54
>>888
あなたの定義で、親ウインドウとは?

890 名前:デフォルトの名無しさん :04/09/15 23:58:36
>>888
そういうことが出来る造りにしておく。
他プロセスのウィンドウの話なら、基本的に無理。

891 名前:デフォルトの名無しさん :04/09/16 00:02:45
>>889
最初に開いたウィンドウのことです。

>>890
自プロセスでやるならどういった準備が必要になるのでしょうか?

892 名前:デフォルトの名無しさん :04/09/16 00:08:15
>>891
つまり、あなたのアプリではあらゆるウインドウが全て
WM_DESTROY に対して PostQuitMessage を発行するわけか

893 名前:デフォルトの名無しさん :04/09/16 02:01:13
>>882
Googleだけが調べる方法じゃないでしょ。

WS_EX_CLIENTEDGEが定義されているヘッダファイルから、なんとかFLATを
GREPするとか。

894 名前:デフォルトの名無しさん :04/09/16 02:33:22
アプリの多重起動を防ぐ為にCreateMutexするところまではわかったんですが
Mutexの名前をシステム内で一意にする方法はありますか?

適当な名前を引数にすると他のアプリと衝突しそうな気がするんですが・・

895 名前:デフォルトの名無しさん :04/09/16 02:49:01
GUID使うとかは?

896 名前:デフォルトの名無しさん :04/09/16 02:59:41
>>895
みんながそうしているならそれでいいんだがね

897 名前:デフォルトの名無しさん :04/09/16 07:18:11
exeへのフルパス

898 名前:デフォルトの名無しさん :04/09/16 08:35:07
リストビューについてなんですが、
もしかして隠しカラムを設定できますか?
MSDN見ても書いてないから無理なのかなぁ

LVCOLUMNのcxに0設定して擬似的にするしかありませんね?

899 名前:デフォルトの名無しさん :04/09/16 08:42:06
むかつく

900 名前:デフォルトの名無しさん :04/09/16 08:44:35
>>897
>>896

901 名前:デフォルトの名無しさん :04/09/16 09:01:36
空から星が落ちてきて直撃しそうで怖いんですがどうしましょう?

っていう質問と似てるな。

902 名前:デフォルトの名無しさん :04/09/16 09:05:46
゚・(つд`)・゚・

903 名前:デフォルトの名無しさん :04/09/16 09:20:21
とりあえず日本語(全角文字)使っとけ、くそども。
「ぬるぽ....」でもなんでもOK。バックスラッシュ以外はすべてOK。
Windowsは内部的には文字列リソースをUnicodeで持つので、
海外のアプリと衝突することはかなり回避できるはずだ。

904 名前:デフォルトの名無しさん :04/09/16 09:28:51
>Windowsは内部的には文字列リソースをUnicodeで持つので、

これと

>海外のアプリと衝突することはかなり回避できるはずだ。

これは何の関係があるの?


905 名前:デフォルトの名無しさん :04/09/16 09:29:46
というかほんとに適当に16文字くらい使えば衝突しないと思うけど。
何を指定したって確率の問題じゃないですかー。

906 名前:デフォルトの名無しさん :04/09/16 09:32:28
完全に回避することができない。たんなる確率の問題だから、星の直撃の心配
と同じ。偶然の一致を避けるような工夫をできるだけするしかない。ながーい文字列
とか、exe のフルパスもかなりいい感じだと思うけどな

907 名前:デフォルトの名無しさん :04/09/16 09:43:18
でも、exeのフルパスだとコピーされたら多重起動ができる。
抜け道が簡単に出来ちゃうからダメだと思うよ。
大型アプリなら問題ないかもしれないけど…

908 名前:デフォルトの名無しさん :04/09/16 09:48:11
>>907
セキュリティーに関連するような大事なハンドルを
デフォルトSID(=NULL)で作成する時点で駄目駄目でしょ。
親プロセスが全ての重要ハンドルを作成し、
明確に子プロセス以外アクセスできないようにするのが普通だと思う。

909 名前:デフォルトの名無しさん :04/09/16 10:09:09
>>908
Mutex作る時に使うオブジェクトの名前が違う事になるから、
違うハンドルを作ってしまうって事では?
これについてはセキュリティ関係ないのでは…?

910 名前:デフォルトの名無しさん :04/09/16 10:19:20
>でも、exeのフルパスだとコピーされたら多重起動ができる。

そうだね。VBのだとそういう振る舞いをするんだそうだ。

lihvwdghwelkihvwrhweruhakjabhojwejjw

こういう文字列を使った場合、偶然に一致するアプリがあるかも、って心配は
まぁ、したけりゃしてもいいけどな。

911 名前:デフォルトの名無しさん :04/09/16 11:13:42
>>896 >>900
こっちがユニークなら、皆どうだろうと関係ないんじゃない?

912 名前:デフォルトの名無しさん :04/09/16 11:16:02
ユニークかどうかはほかが同じことしてないかどうかに関係する

913 名前:デフォルトの名無しさん :04/09/16 12:23:41
悪意を持って多重起動の判断を混乱させようとしているのでない限り
「GUIDに見える(けどuuidgenで生成したものではない)文字列」とか
「他のexeのフルパスに見える文字列」
をわざわざ使うとは思えないんだけど

914 名前:デフォルトの名無しさん :04/09/16 13:02:06
悪意か善意かは問題ではない。ある演算なり、一定の規則(フルパスやGUIDもこれに入る)
を採用して文字列を取得した場合と、まったくでたらめな文字列の場合、一致する確率が
どっちが低いか、を考えるべき。exe のフルパスの場合は、異なるアプリ間で偶然一致する
のは考えづらいけど、他のディレクトリにコピーされた同じexeが二重起動される。これは
かなり現実的な問題ではある。

915 名前:デフォルトの名無しさん :04/09/16 13:06:38
そもそもなんで多重起動を抑止したいのかって理由にもよるだろ。

916 名前:デフォルトの名無しさん :04/09/16 13:08:15
二重起動を抑止したい理由と、名前付き Mutex の名前がユニークかどうかは関係ない

917 名前:デフォルトの名無しさん :04/09/16 13:09:28
>>892
PostQuitMessageをスローしないだけで済むのですね(^^;
どうもでした。

918 名前:デフォルトの名無しさん :04/09/16 14:25:19
>>914
本当にまったくでたらめじゃ確かに一致しない確率は最高だろうけど
自分の別インスタンスとも一致しないから多重起動の判定に使えない。
最低でも多重起動のチェックができる程度の何らかの規則は
導入しなくてはならない。問題はその規則が(他の規則を採用している
かもしれない文字列も含めて)偶然一致する可能性をどれだけ
減らせるか。

919 名前:デフォルトの名無しさん :04/09/16 14:39:55
>自分の別インスタンスとも一致しないから多重起動の判定に使えない。

何いってるの?

920 名前:デフォルトの名無しさん :04/09/16 14:41:21
>>918

すこしは頭使えよ

921 名前:デフォルトの名無しさん :04/09/16 14:42:24
>>918はGUIDを毎回生成するとでも勘違いしてるんじゃないのか

922 名前:922 :04/09/16 15:04:56
IHTMLDocument等のHTMLに関わる
インターフェイスを使用しています。
現段階では、ActiveXのWebBrowserから
IHTMLDocumentを取得しているのですが、
ブラウザを介さず、
URLまたはHTMLテキストから
直接IHTMLDocumentを
取得したいのですが、
そのあたりの方法があれば教えて下さい。

923 名前:デフォルトの名無しさん :04/09/16 15:08:44
簡単なのは WinInet のAPI使うのだな。ググルといっぱいサンプルが見つかるはず。

924 名前:デフォルトの名無しさん :04/09/16 15:09:35
>直接IHTMLDocumentを取得したいのですが、

あっ、勘違い、すまん

925 名前:デフォルトの名無しさん :04/09/16 15:13:23
SetTimerで、引数のID所で0、又は既に使われているIDを指定すると、
戻り値で空いているIDが返ってきて、それを使うという事を出来るのでしょうか。

926 名前:デフォルトの名無しさん :04/09/16 15:15:58
どこをどう読めばそうゆう解釈が

927 名前:925 :04/09/16 15:20:07
>>926
ありがとうございます。やっぱできないのですね。
その方法が使えれば、IDをEnumなどに定義しておかなくても、
ちょこっと使いたいときに楽かなと思いまして。

928 名前:デフォルトの名無しさん :04/09/16 16:18:12
>>893
うそ教えるな。問題のスタイルはCCS_*だから、標準的なスタイルには用意されてなくて
自前で描画するしかない。

929 名前:デフォルトの名無しさん :04/09/16 16:34:31
>>922
mfc スレでちょっと前に (レス720前後) 同じ質問にと答えた記憶あるんだけど、
あれじゃあうまくいかなかった?


930 名前:デフォルトの名無しさん :04/09/16 19:26:24
ローカルにあるプロセス間で通信をするのに今はソケットを使っているのですが
帯域がボトルネックになっているので改善方法を探しています。

名前つきパイプやメモリマップドファイルを使うことでパフォーマンスの向上は
のぞめますか?ストリームのようにデータを転送するのでメモリマップドファイル
にする場合は何かの方法で同期を取る必要があると思います。

931 名前:デフォルトの名無しさん :04/09/16 19:39:57
そのままにしておいた方が、ポテンシャル高くて後々おいしいような。

932 名前:デフォルトの名無しさん :04/09/16 19:49:54
ボトルネックになってるんだったらしゃーないような。
でも、プロセス巻通信がそんなに頻繁に起こるならいっそプロセス統合した方がよくないか?

933 名前:デフォルトの名無しさん :04/09/16 21:58:05
.NET Framework 1.1を使うアプリを公開したいのですが、
.NETのCLRがインストールされているか調べるにはどうしたらいいですか?

934 名前:デフォルトの名無しさん :04/09/16 22:10:45
>>933
漏れは VS .Net のウィザードで作ったインストーラプロジェクトの
インストーラでチェックしてるけど、API でチェックしたいってこと?

935 名前:933 :04/09/16 22:51:59
>>934
そうです。

936 名前:デフォルトの名無しさん :04/09/16 23:42:33
レジストリを見るんじゃないの

937 名前:デフォルトの名無しさん :04/09/17 13:01:15
VC++6.0を使っています。
iphlpapi.hをインクルードしたいのですが
このファイルが無いようです。
どこから拾ってくればよいでしょうか?

938 名前:デフォルトの名無しさん :04/09/17 13:07:23
>>937
>>2

939 名前:デフォルトの名無しさん :04/09/17 16:20:34
>>934
レジストリ見るプログラムは何で作るの?
CLRに対応してるか確認するプログラムは
CLRを使う.NETじゃ書けないってことなのかな.
.NETって面倒だね.

940 名前:デフォルトの名無しさん :04/09/17 16:40:17
…( ゚Д゚)ポカーン

941 名前:デフォルトの名無しさん :04/09/17 17:18:58
駐在型ソフトだと、タスクバーから表示を消して、タスクトレイにアイコンを表示していますよね?
これをするにはどうしたら良いですか?

942 名前:デフォルトの名無しさん :04/09/17 17:24:33
駐在型?

943 名前:デフォルトの名無しさん :04/09/17 17:26:32
ウインドウを消してタスクトレイにアイコンを登録する。

944 名前:デフォルトの名無しさん :04/09/17 19:08:21
そのウィンドウの消し方教えてくださいよー ヽ(`Д´)ノ ウワワーン

945 名前:デフォルトの名無しさん :04/09/17 19:09:38
DestroyWindow

946 名前:デフォルトの名無しさん :04/09/17 19:17:25
ShowWindow

947 名前:デフォルトの名無しさん :04/09/17 20:39:07
ウインドウ非表示の方法ぐらい
知っててくださいよー ヽ(`Д´)ノ ウワワーン

948 名前:デフォルトの名無しさん :04/09/17 21:10:47
スタートボタンで終了したり、ShowWindow でウィンドウを消したりさせるマイクロソフトが悪い

949 名前:デフォルトの名無しさん :04/09/17 21:18:22
馬鹿は何でもMSのせいにするからなぁ w

950 名前:デフォルトの名無しさん :04/09/17 21:25:11
なんでもすぐ人のせいにするのは無能の典型

951 名前:デフォルトの名無しさん :04/09/17 21:43:15
>>950
勧告陣に言ってくださいw
次スレ〜たてて

952 名前:テンプレ1 :04/09/18 04:00:01
- 過去スレ
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
(★は「いやー ごめんなさい。」に巻き込まれた模様

953 名前:デフォルトの名無しさん :04/09/18 11:31:50
難民のあれか・・・。
どこかにミラーが残ってないかな?

954 名前:デフォルトの名無しさん :04/09/18 14:14:10
part15のログなら1000まで持ってるが

955 名前:デフォルトの名無しさん :04/09/18 14:25:23
part16のログなら1000まで持ってるが

956 名前:デフォルトの名無しさん :04/09/18 14:28:06
( ´_ゝ`)フーン

957 名前:デフォルトの名無しさん :04/09/18 14:32:39
part22のログなら1002まで持ってるが

958 名前:デフォルトの名無しさん :04/09/18 14:38:02
ウィンドウのどの位置にマウスポインタがあるか調べる方法を教えてください。
調べると、GetCursorPosをして、ClientToScreenで変換するとあったのですが、
ウィンドウの位置でなく、ディスプレイの位置のなのか、正しく調べられません。


959 名前:デフォルトの名無しさん :04/09/18 14:51:08
>>958
そこはClientToScreenじゃなくてScreenToClientじゃないか。

960 名前:958 :04/09/18 14:55:48
>>959
ホントだ。逆の方を使っていました。
ありがとうございました。

961 名前:デフォルトの名無しさん :04/09/18 15:07:52
自分がつくったステータスバー(CreateStatusBarで作成)は、マウスを
うえにのせてもなにもメッセージをうけとったり、送信したりしないのに、
そのへんのアプリケーションのステータスバーはwm_nchittestを送信した
あとにいろいろやっています。それもどのアプリも大体共通した動作。
(メッセージのやりとりはspy++で見ました)

自分がつくったステータスバーにおいてもこれを実現するためには何を
すればいいのでしょうか?

962 名前:933 :04/09/18 16:12:05
933です。
%windir%\system32\mscoree.dllのバージョンが1.1以上だったら
.NET Framework1.1がインストールされているされていると考えてよいのでしょうか。
Win32APIな話題からそれていますが、ほかの環境ではどうなのか知りたいのでお願いします。(当方WinXPSP2)

963 名前:デフォルトの名無しさん :04/09/18 16:21:39
>>961
サブクラス化しなさいよ

964 名前:デフォルトの名無しさん :04/09/18 16:43:36
パート15と16持ってる人いる?
うpってもらえれば、>>1のテンプレに追加して書いたり

965 名前:デフォルトの名無しさん :04/09/18 16:46:23
そのファイルだけコピーされてたらどうすんの?

966 名前:デフォルトの名無しさん :04/09/18 16:47:19
>>964
両方あるけど、Janeのログだから手を加えないとだめだよね?

967 名前:デフォルトの名無しさん :04/09/18 16:50:52
>>964
うぷろだにうぷっただけじゃすぐ消えちゃうよ

968 名前:964 :04/09/18 16:54:10
2ch系のどっかのサイトが、基本的に消さないとかいう方針のうpロダがあったんだけど…
たしか、FLASH系サイトをまとめてるやつ

>>966
HTML化したほうがよさげ。
ttp://tatsu01.at.infoseek.co.jp/

969 名前:デフォルトの名無しさん :04/09/18 17:05:08
ほい。
ttp://up.isp.2ch.net/up/87d091951909.zip

当然すぐ繋がらなくなるから、誰か転載よろしく。

970 名前:964 :04/09/18 17:42:02
15
ttp://saba.haiiro.info/uploader/file/0587.html
16
ttp://saba.haiiro.info/uploader/file/0588.html

使おうと思ってた、with2chはお休み中だった(つд`)

971 名前:ほんたま :04/09/18 19:33:36
WideCharToMultiByteを使って、unicodeをsift-jisに変えると、漢字などはちゃんと変換されるんですが、半角英数を変換すると文字化けするんですが…?
みなみなさまがた〜教えてくだされ〜♪

972 名前:デフォルトの名無しさん :04/09/18 19:39:20
沢村の新コテか

973 名前:デフォルトの名無しさん :04/09/18 19:50:31
文字化けするんですが…?

ってのはどこが質問なのかな
まあ、普通はそんなことにならないので答えようも無いが。

974 名前:ろろ :04/09/18 20:34:31
>>971さん
WideCharToMultiByte のオプションがまずいのではないかな?
どんなふうに呼び出しているの?

975 名前:デフォルトの名無しさん :04/09/19 01:28:31
プッシュボタンコントロールの外観を、
テキストではなくBMPにすることはできますでしょうか?

976 名前:デフォルトの名無しさん :04/09/19 01:59:23
出来ます。

977 名前:デフォルトの名無しさん :04/09/19 02:05:03
>>976
ありがとうございました。頑張ってみます。

978 名前:ほんたま :04/09/19 02:11:11
>>975
おみゃ〜よ、オナードローボタンにすればいいよ。
つくりかたは「猫でも…」に書いてあるよ。自分じわかる?
>>974
WideCharToMultiByte(CP_ACP,0,(unsigned short *)pctext,tempsize2,temptext,tpsize2-1,NULL,NULL);
というふうに呼び出しています。
pctextとtemptextはchar型の文字列です。
まずファイルのunicode文字をpctextに1字1字バイナリコピーします。
半角英数の「OK」なら「4F 00 6B 00」というのがその値です。
この時点で、pctextの内容を画面に表示してみると、unicode文字なのにすでに「ok」と表示されます。
でもこれを上のapiを使ってsift-jisに変換してからtemptextを表示すると、何故か「?」と文字化けして表示されるのです。
漢字や半角カタカナを変換する場合はまったく問題ないのですが…?

979 名前:デフォルトの名無しさん :04/09/19 02:18:52
S-JISのコードページはCP_ACP?

980 名前:デフォルトの名無しさん :04/09/19 02:18:55
そうですか。

981 名前:デフォルトの名無しさん :04/09/19 02:38:11
自己解決しました。

982 名前:ほんたま :04/09/19 02:38:58
「ok大下容子」という文字列の場合、
変換前のunicode文字列を表示すると「ok'Y・Nケ[P[」になり、
変換後のsift-jisを表示すると「?大下容子」になります。
つまり半角英数は変換前のほうがちゃんと表示され、漢字は変換後にちゃんと表示されます…?
みなみなさまがた〜教えて〜♪

983 名前:デフォルトの名無しさん :04/09/19 02:53:41
だから、普通はそんなことにならないから。
というわけで、終了

984 名前:デフォルトの名無しさん :04/09/19 02:55:56
>>978
tmpsize2, tpsize2 とかの実際の値はどーなってる?
WideCharToMutiByte() の返り値は?

日本語 Windows なら CP_ACP で問題はないです。


985 名前:ほんたま :04/09/19 02:59:54
勘違いでした。
エヘ♥

986 名前:デフォルトの名無しさん :04/09/19 03:04:15
他のアプリのボタンを押したいのですが
ツールバーの中にあるボタンのウィンドウハンドルはどうやったら取得できますか?

987 名前:デフォルトの名無しさん :04/09/19 03:05:05
wchar_t unitext[] = L"ok大下容子";
std::vector<char> tmp;
tmp.resize(::WideCharToMultiByte(CP_ACP, 0, unitext, -1, NULL, 0, NULL, NULL));
::WideCharToMultiByte(CP_ACP, 0, unitext, -1, &tmp[0], tmp.size(), NULL, NULL);

もんだいねぇけど。

988 名前:デフォルトの名無しさん :04/09/19 03:05:35
>>986
ありません

989 名前:デフォルトの名無しさん :04/09/19 03:09:49
ないですか
座標で押すのかな
位置が変わったりしないんだろうか


990 名前:デフォルトの名無しさん :04/09/19 03:13:11
あります

991 名前:デフォルトの名無しさん :04/09/19 03:19:08
>>989
座標からアイテムの情報が分かるから、
それを拾ってツールバーの親にメッセージを投げてやればいい。

992 名前:デフォルトの名無しさん :04/09/19 03:23:44
thx
そのやりかたであたってみます


993 名前:デフォルトの名無しさん :04/09/19 03:29:55
どうやってテキストを表示していますか?UTF-16LEだと最初の1オクテットには
oとkが含まれているので0x00を無視するような方法で出力してればokって文字列が
最初に見える。
そうじゃないのに「ok'Y・Nケ[P[」っていうのが見えるならファイル読み込みの部分
で「4F 00 6B 00」を「4F 6B」にしちゃってる。

994 名前:デフォルトの名無しさん :04/09/19 03:37:32
wifstreamを使ってないとか
ifstreamでバイナリモードにせずに読んでるとか
そんなとこじゃないの


995 名前:デフォルトの名無しさん :04/09/19 03:46:45
しかし沢村は相変わらずのズレっぷりだな

996 名前:デフォルトの名無しさん :04/09/19 04:00:35
次スレまだ〜?

997 名前:デフォルトの名無しさん :04/09/19 04:02:04
まだ

998 名前:デフォルトの名無しさん :04/09/19 04:02:20
埋めちゃうよ?

999 名前:デフォルトの名無しさん :04/09/19 04:09:06
だめ

1000 名前:デフォルトの名無しさん :04/09/19 04:09:35
1000


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