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


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

Win32API質問箱 Build29
751 名前:デフォルトの名無しさん :2005/03/26(土) 22:15:37
>>749
詳細キボン

752 名前:デフォルトの名無しさん :2005/03/26(土) 22:17:26
そうだな、リソースなんて概念に縛られてるようじゃ今時やってられん

753 名前:デフォルトの名無しさん :2005/03/26(土) 22:26:20
>>751
どうしてもそれが必要になった事があってAPを
2000とXPでテストして客先に、提出したのよ。
(一応98とかは、サポート外だった)
そんでもって客の都合で、たまたまAPを98で動かしてみたら
落ちたって言うから、調べてみたらそいつが原因だったってわけ。

754 名前:デフォルトの名無しさん :2005/03/26(土) 22:39:40
>>753
CreateWindowExなんて良く使うAPIでバグがあるんならもっと話題になってもいいようなもんだが
ググっても見つからんし、信用できんな。

755 名前:デフォルトの名無しさん :2005/03/26(土) 22:59:07
>>753
そんな話は初めてだし普通にEx使って何の問題も出たことないよ。
別のところに問題あったのが偶然致命傷にならずに動いてて
最終的にExの部分で発現しただけでは?

756 名前:デフォルトの名無しさん :2005/03/26(土) 23:00:17
2000系では落ちないけど9x系では落ちる……。
十中八九、>749のアプリケーションのバグだな。

だから俺はMeが手放せない。些細なバグでも落ちてくれる。

757 名前:デフォルトの名無しさん :2005/03/26(土) 23:07:00
CreateWindowはCreateWindowExを呼び出すマクロだった気が

758 名前:デフォルトの名無しさん :2005/03/26(土) 23:10:27
マクロになってるね。

759 名前:デフォルトの名無しさん :2005/03/26(土) 23:19:46
>>723
EDITSTREAM の構造体の callback に ReadFile(), WriteFile() を普通は
書いていると思いますが、例えが、WriteFile() の代わりに、格納先のメモリ
に MoveMemory() して、メモリのポインタをそのバイト進めるという処理を
続ければ、メモリに書き出した内容が置かれます。(GlobalReAlloc() すれば
どんどん書けます)
rtf の仕様は、ヘルプで出てくるのを見た憶えがあります。
また、MSword があれば、拡張子を .rtf にして書き出せば、どんな風に出て
来るかわかるでしょう。同じ内容を .txt でも書き出せば、対比できます。
文字を着色するだけなら、色指定と文字の格納の方法だけわかれば、txt->rtf
は簡単なので、私はCのソースは、txt で読んで、rtf に変換して、画面へ
送りこんでいます。文字列が英字だけなら文字列はそのまま rtf に置かれます。

760 名前:720 :2005/03/26(土) 23:42:11
>>693, >>721
(続き)
アイコン・データの所在を例示すると、一般的なものは、Shell32.dll に多くあります。
今、win98 で見たら、大小 342 個(RT_ICON ベース)ありました。
RT_GROUPE_ICON が ico ファイルに対応していて、この中に要素のアイコンを示す index
があり、RT_ICON を参照するようになっています。
.bmp ファイルのアイコンは、ペイントにあり、MSword のは MSword, Excel のは
Excel にあります。以下同様。
で、.exe, .dll の中を見るには resource editor があれば容易だと思いますが、
VC++ のサンプルの PeFile にアクセス方法が載っています。MSN には、今や PeFile
はないようですが。
.ico ファイルに復元する個数が少ないなら、個々のアイコンの DIB には、
相対アドレスを参照する値はないので、バイナリ・エディタで、hex を切り出して、
自分で hex 編集して、バイナリに戻せば、.ico ファイルにできないことはないで
しょう。
(しかし、決まりきったアイコンを使うだけなら、ExtractIconEx(),
ExtractAssociatedIcon() などの API を使うのが、早道です。)

761 名前:デフォルトの名無しさん :2005/03/27(日) 00:13:50
>>745
SetLastError(0xffffffff);
CreateWindowEx(〜);
GetLastError();とすると失敗するときはffffffff、成功するときには57が常に表示されます。
(その0x57をFomatMessageに通すと「パラメータが正しくありません。」となります)

ちなみにCreateWindowExに渡すインスタンスハンドルをEXEのものからDLLのモジュールハンドルに変えたらこれでも成功しました。
ただ、これだったらDLL内でGetModuleHandle(NULL);する方にします。
DLL内のクラスにはDLLのインスタンスハンドルを指定しろとMSDNには書いてあるのが気がかりですが。

762 名前:720 :2005/03/27(日) 00:32:03
>>760
忘れたので。
Shell32.dll は Windows フォルダにあるままでは、使用中で読めないことが
あるので、コピーを作って、開きます。

763 名前:デフォルトの名無しさん :2005/03/27(日) 00:32:03
嫌ならwindows使うな

764 名前:デフォルトの名無しさん :2005/03/27(日) 00:32:18
>>761
C Magazineの2004年12月号 125ページをみるべし

765 名前:デフォルトの名無しさん :2005/03/27(日) 00:37:05
>>761
ウィンドウクラスは、インスタンスハンドルとクラス名で特定される
ということを知ってるか?

766 名前:デフォルトの名無しさん :2005/03/27(日) 02:34:27
>761
CreateWindowEx()をいつ呼んでいるのかが気になるのだが…

767 名前:デフォルトの名無しさん :2005/03/27(日) 03:52:07
>>761
RegisterClassに渡すインスタンスは、プロシージャのアドレスを解決するためのものだから
DLLにプロシージャを書いてるならDLLのインスタンスハンドルを渡すべし。

CreateWindowは実際に動いているプログラムのインスタンスを渡すべし。
Win32のコントロールとかDLLに入っててもCreateWindowにはプログラムのインスタンスを
渡してるでしょ、それと同じ。
要するにGetModuleHandle(NULL)だなー。

768 名前:デフォルトの名無しさん :2005/03/27(日) 06:53:59
漏れの古いプロジェクト見るとWinNT/2000/XP系用と
Win98/Me系用でReleaseが分かれていた。
あたりまえといえばそうなんだが、確かソースは同じで
コンパイルオプションかリンクオプションか何か変えないと
Win98/Me系でCreateWindowExがまともに動かんかったと記憶してる。


769 名前:デフォルトの名無しさん :2005/03/27(日) 07:09:41
>>768
自分の管理してるソースだろがw
知らない間に妖精さんが書いたとか言うなよ。

CreateWindowExそのものじゃなくて、顧問コントロールを使うときの
マクロ切り替えだったんじゃないの?
今、思いつくだけでもバルーンチップ。

770 名前:デフォルトの名無しさん :2005/03/27(日) 08:54:02
>>767
> RegisterClassに渡すインスタンスは、プロシージャのアドレスを解決するためのものだから
> DLLにプロシージャを書いてるならDLLのインスタンスハンドルを渡すべし。

コレマジっすか?

771 名前:デフォルトの名無しさん :2005/03/27(日) 09:45:48
>>770
ウソ。サブクラスするときにはインスタンスハンドルを渡さないだろ。

EXEとDLL、あるいは複数のDLLが同一のクラス名でRegisterWindow()
したときに(一般にそれらの作り手は別であるので、名前が被る可能性は
十分にある)、CreateWindow()で目的のクラスを確実に指定するには、
クラス名だけでなくインスタンス固有の値も一緒に指定する必要がある。
逆にいうと、インスタンスハンドルにはクラスを特定するための意味しかない。
実際、インスタンスとして無効な値を渡しても動くしな。

772 名前:デフォルトの名無しさん :2005/03/27(日) 10:07:17
>>771
NT系ならCreateWindowのインスタンスハンドルは無視すると書いてある。

773 名前:デフォルトの名無しさん :2005/03/27(日) 11:50:15
>>769
いや、妖精ではないが、何年も前のものなのでもう忘れた。
昨日の自分は明日の他人だ。

774 名前:デフォルトの名無しさん :2005/03/27(日) 12:48:38
DLLをロード/アンロード/ロードしたりすると、
インスタンスハンドル変わる時があるから、
偶発的なバグになって苦労するよ

775 名前:デフォルトの名無しさん :2005/03/27(日) 12:52:58
>>772
どこに?

776 名前:デフォルトの名無しさん :2005/03/27(日) 12:56:24
人に聞く前にMSDNぐらい見ようぜ。

777 名前:デフォルトの名無しさん :2005/03/27(日) 13:48:47
>>776
すまん、古いのを見てた。
MSDNもわざわざ間違いを追記することないのにな。

778 名前:デフォルトの名無しさん :2005/03/27(日) 13:50:57
MSDN見る前に人に聞こうぜ。そのほうが早いよ。

779 名前:デフォルトの名無しさん :2005/03/27(日) 14:39:39
人に聞くまえにMSDN見ようぜ。そのほうが早いよ。

780 名前:714 :2005/03/27(日) 14:42:48
>>759
thx.
コールバック関数にくるのはReadFile特注のデータじゃないのね。少しわかってきた。

RTF先頭の
{\rtf1\ansi\ansicpg932\deff0\deflang1033\deflangfe1041{\fonttbl{\f0\fswiss\fprq2\fcharset0 Tahoma;}}
とかいうヘッダみたいなのはそのまま使えばいいものなのかな?

781 名前:714 :2005/03/27(日) 15:41:07
http://www.users.gr.jp/ml/archive/viewer.aspx?name=vb&no=1848
↑ここに書いてあることって正しいよね?日本語はエスケープしたほうがいいと思うけど

782 名前:デフォルトの名無しさん :2005/03/27(日) 15:44:25
コンソールアプリでタイマを使いたい場合は、どの関数を用いればいいのでしょうか。
ある処理を一定の間隔で繰り返すようなプログラムを作りたいのですが・・・

783 名前:デフォルトの名無しさん :2005/03/27(日) 15:51:53
>>773
今日はどっち?

784 名前:デフォルトの名無しさん :2005/03/27(日) 15:54:21
>>782
コンソールアプリでって言うのはメッセージループもなし?だとしたら
タイマは使えないよ、WM_TIMERを処理できないわけだから。

785 名前:デフォルトの名無しさん :2005/03/27(日) 15:55:08
SetTimerでHWNDにNULLを指定してlpTimerFuncに特定のコールバック関数を指定したら
ウィンドウやWM_TIMERの受け皿がなくてもできるかもしれない。
と思ったけどMSDNに「WM_TIMER メッセージを処理する代わりに TimerProc 関数を使う場合も、呼び出し側スレッド内でメッセージをディスパッチ(転送)する必要があります。」
って書いてあるから多分無理。。。

786 名前:デフォルトの名無しさん :2005/03/27(日) 16:00:08
マルチメディアタイマなら使えるんじゃない?

787 名前:デフォルトの名無しさん :2005/03/27(日) 16:20:33
>>786
ありがとうございます。
これってコンソールから割と簡単に使えるものなんでしょうか。
Windowsのプログラミングにあまり詳しくないもので・・・
あまり実用例がないものならGUIに乗っけてつくろうかなと思います。

788 名前:デフォルトの名無しさん :2005/03/27(日) 16:47:47
GUIアプリとしてスケルトンを作って、AllocConsoleでコンソールを開き、メインウィンドウを
不可視にしたうえでWM_TIMERを受け取るとか。


789 名前:デフォルトの名無しさん :2005/03/27(日) 17:04:39
別に
while(1){
func();
Sleep(1);
}
みたいにすれば良いと思うが。

790 名前:デフォルトの名無しさん :2005/03/27(日) 17:09:37
>>788
なんか複雑そうですが、
timeGetTime()というのがコンソールから使えそうなので、これにしようと思います。
あとついでなのですが、コンソールではSleep関数は使えるのでしょうか。
コンソールってWindows上ではスレッドで動いてるのかな?
どうもWindowsは単純プログラマではわからんことが多い・・・

791 名前:デフォルトの名無しさん :2005/03/27(日) 17:11:52
>>790
スレッドで動いてるって何だろう…何も特別なことをしなければ
シングルスレッドで動いてるよ。もちろんマルチスレッドにも出来る。
コンソールアプリだろうとGUIアプリだろうと同じ。

792 名前:デフォルトの名無しさん :2005/03/27(日) 17:11:53
>>789
それも使う予定ですが、どうしても相対時間を測りたい部分があるので。

793 名前:デフォルトの名無しさん :2005/03/27(日) 17:23:45
>>791
シングルスレッドというのは、windowsの他のプログラム(例えばWORDとか)と
基本的に同じってことでしょうか。
Windowsにしろ処理の流れは一本だから、どっかで無限ループなどに陥ったら
全体がとまってしまうのではないかと心配なんですけど。

794 名前:デフォルトの名無しさん :2005/03/27(日) 17:26:56
マルチプロセス

795 名前:デフォルトの名無しさん :2005/03/27(日) 17:28:19
MSWORDはマルチスレッドだが

796 名前:デフォルトの名無しさん :2005/03/27(日) 17:40:12
DLLのプログラミングで自分自身のパスを知るにはどうしたら良いですか?

797 名前:デフォルトの名無しさん :2005/03/27(日) 17:48:32
>>796
DllMain() に渡されるインスタンス ハンドルを、
GetModuleFileName() に指定する。

798 名前:デフォルトの名無しさん :2005/03/27(日) 17:51:15
>>796
DllMainに渡されるモジュールハンドルをGetModuleFileNameでいいんじゃね?
DllMainって自分で書く機会ってあんまりないよね。

799 名前:798 :2005/03/27(日) 17:51:56
>>797
ケコーン

800 名前:796 :2005/03/27(日) 18:01:28
>>797-799
謝謝

801 名前:759 :2005/03/27(日) 18:36:01
>>780-781
何年も前にやったので、細部はよく憶えていないけど、いいみたい。
漢字(shift-JIS)は、自分は下記の format で、1バイト目、2バイト目を書き出している。
"\\\'%02x\\\'%02x"  // 結果は、\'xx\'yy という形なる。

細かいことですが、unicode の漢字で、第1バイトと第2バイトとか逆転しているケースとか
あるようだけど、対応してません。(ソースを見たら、コメントに書いてあった)

802 名前:デフォルトの名無しさん :2005/03/27(日) 19:19:46
HRESULTとLRESULTの違いってなんですか?

803 名前:デフォルトの名無しさん :2005/03/27(日) 19:22:51
さあね

804 名前:デフォルトの名無しさん :2005/03/27(日) 19:35:21
>>802
http://msdn.microsoft.com/library/en-us/winprog/winprog/windows_data_types.asp
HRESULTはCOM関数・インターフェイスの戻り値に使われる使われるLONGからのtypedef
LRESULTはメッセージの戻り値に使われるLONG_PTRからのtypedef

805 名前:デフォルトの名無しさん :2005/03/27(日) 20:13:06
HRESULTはビットごとに意味があるよ

806 名前:714 :2005/03/27(日) 20:19:49
>>801
日本語はそのエスケープであってるんだ。安心。
というわけでワードパッドで出力したファイルと照らし合わせて研究中。
いろいろありがとう。

807 名前:デフォルトの名無しさん :2005/03/27(日) 20:52:23
>804-805
レスありがとうございます
MSDNライブラリってこういうのも載ってるんですね
日本語のページ見難くて見つけられなかった;

808 名前:デフォルトの名無しさん :2005/03/27(日) 21:07:33
>>807
日本語のページが見づらいのと英語のページで見つけられないってのは別物だぞ

809 名前:デフォルトの名無しさん :2005/03/27(日) 23:22:34
俺だと日本語のページは見づらい以前に文字化けして読めない……。
どうしても英語のほうを読むしかない

810 名前:デフォルトの名無しさん :2005/03/28(月) 00:15:05
encode

811 名前:デフォルトの名無しさん :2005/03/28(月) 02:08:48
>>783
今日の自分は、
1)過去の自分が他人に見える
2)未来の自分からみると他人に見られる存在
っていう意味だろ?

812 名前:809 :2005/03/28(月) 03:59:44
>>810
いや、エンコードは一通り試したつもりなんだ。
参考までに、他の人が正常に見れる場合の文字コードを教えてくれ

813 名前:デフォルトの名無しさん :2005/03/28(月) 08:05:20
ただのShift JISだがもしかしてIEでしか見れないようにしているとかの罠があるんじゃないか?

814 名前:デフォルトの名無しさん :2005/03/28(月) 09:25:03
便乗すると、漏れの場合は文字化けというか、左側のフレーム内が意味不明になります。
こんな感じ。これが普通?

□MSDN ?????
□????????
□???? ??? Embeaded ??
□.NET ??

米国サイトなら普通に読めるんだけどね。

815 名前:デフォルトの名無しさん :2005/03/28(月) 09:28:18
IEの言語設定は?

816 名前:814 :2005/03/28(月) 09:45:59
日本語(自動設定)またはShift-JISです。
IEとFirefoxでエンコードをあれこれ試したけど、
右側部分はS-JISでないと文字化けするし、左側は設定に関係なく読めないみたいです。

817 名前:デフォルトの名無しさん :2005/03/28(月) 09:49:43
IEのバージョンは?
IE6ならWin98でも読めたがIE4だと化けるねー。

818 名前:814 :2005/03/28(月) 09:58:48
OSはWin-XPで、IEは6.0.2900.2180.xpsp_sp2.rtm...なのにorz
米国サイトじゃないと出てこない情報もあるみたいだし、日本語版はあきらめました。

819 名前:デフォルトの名無しさん :2005/03/28(月) 10:12:41
自動選択のチェックを外して、Shift_JISにするとどうなる?
IEの自動設定はバグだらけなので、自社サイトも読めない可能性がある。

820 名前:デフォルトの名無しさん :2005/03/28(月) 10:12:51
「フォントキャッシュの破損」なんかじゃないよね?

821 名前:デフォルトの名無しさん :2005/03/28(月) 10:13:31
バグだらけという表現は適切ではないか。とにかく挙動はおかしい。

822 名前:デフォルトの名無しさん :2005/03/28(月) 10:15:54
再インスコ

823 名前:デフォルトの名無しさん :2005/03/28(月) 10:19:30
自分の作ってたプログラムで、CreateWindow の hinstance を指定する部分で、NULL を
指定していたことに今日気付きました。けど、普通に動いていました。
もし、NULL にしていたままだとして、どんなバグが出ると予想できますか?
よろしければ、ご教授ください。

824 名前:デフォルトの名無しさん :2005/03/28(月) 10:39:41
hInstanceの部分は2000/XPでは無視されたはず。
9xで不具合が出るかも知れんけど具体的には知らん。

825 名前:デフォルトの名無しさん :2005/03/28(月) 10:49:11
なるほど、確かに自分は Windows2000 を使っております。
はじめて知りました。ありがとうございました!

826 名前:デフォルトの名無しさん :2005/03/28(月) 11:35:07
リッチエディットにC++のstd::stringに入っているRTFを読ませようとして
コールバック関数を組もうとしたんだけど、
具体的にどうしたらいいのかわからない(テキストの末尾に来たときの*pcbの処理とか、string.substr()とか)
んで、誰かわかる人いない?

827 名前:デフォルトの名無しさん :2005/03/28(月) 11:36:39
いる

828 名前:デフォルトの名無しさん :2005/03/28(月) 11:38:42
>>814
俺も。
Firefoxで見られない。

829 名前:デフォルトの名無しさん :2005/03/28(月) 17:29:57
bmpファイルの特定の範囲を読みこむ関数ってありますか?
LoadImageで読みこんだイメージの特定の範囲をコピーでもいいんですが

830 名前:デフォルトの名無しさん :2005/03/28(月) 18:21:17
複写の BitBlt(), 表示の SetDIBitsToDevice(), StretchBIBits() には
部分の指定が可能だが、読むときに一発てのはないんじゃない?
bitmap data のところを、ま、1行ずつ読んで、対象外のところは読み飛ばす
とか出来るが。

831 名前:デフォルトの名無しさん :2005/03/28(月) 18:28:25
>>829
ない。

832 名前:829 :2005/03/28(月) 19:07:23
あいうえお
かきくけこ

↑こういうBMPファイルから「あ」とか「く」を取り出して表示したかったんですが
こういうのはどうやってるんですか?


833 名前:デフォルトの名無しさん :2005/03/28(月) 19:16:32
LoadImageしたHBITMAPをCompatibleDCにSelectDCして、
BitBltすれば解決とかそう言う話?

834 名前:デフォルトの名無しさん :2005/03/28(月) 19:21:20
>>832
メモリデバイスコンテキストはわかりますか?

835 名前:デフォルトの名無しさん :2005/03/28(月) 19:25:27
BMPファイルなんて単純な形式だから、
ファイルフォーマット調べて書き出せばいいんでない?
2時間もあれは出来ると思うけど。

836 名前:デフォルトの名無しさん :2005/03/28(月) 20:09:24
>>833をやった方がはやい

837 名前:デフォルトの名無しさん :2005/03/28(月) 21:14:27
質問です。DeleteObject(NULL)は安全ですか?

838 名前:デフォルトの名無しさん :2005/03/28(月) 21:26:11
>>837

ヘルプ見ると

戻り値
 関数が正常に終了した場合は、 TRUEを返します。
 指定されたハンドルが有効でない場合や現在デバイス コンテキストに選択されている場合は、 FALSEを返します。

とあるが、はて

839 名前:デフォルトの名無しさん :2005/03/28(月) 21:27:32
>>837
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_1vsk.asp

NULLについて書かれてないし、MFCのソース見てもNULLチェックしてるから
やらないほうが無難だと思う。


840 名前:デフォルトの名無しさん :2005/03/28(月) 21:30:17
GetFileSizeで4Gバイト以上のファイルサイズを取得したいのですが、
なぜか下位DWORDが1バイト多く返ってきます。
この場合、どこが問題なのか教えてください。

841 名前:840 :2005/03/28(月) 21:40:24
なんか、WinXPProSP2でファイルのプロパティを見ても1バイト多いです……


842 名前:デフォルトの名無しさん :2005/03/28(月) 21:43:51
>834
CreateCompatibleDCでメモリに描画したりはなんとかできます

あい
かき

というBMPファイルを読みこんでBitBltで描画しようとすると
「き」だけ描画することはできるんですが


き  とか  「かき」 見たいになって 「あ、い、か」だけ描画することが出来ません;

BitBlt(コピー先のデバイス、コピー先で描画したい座標X、同上Y、コピー先の幅、コピー先の高さ、コピー元のデバイス、
       コピー元のx?、コピー元のy?、オプション)までは理解しているんですが?の部分がよくわかりません
x、yで点を指定してそこからコピー元の画像をコピーするみたいなんですが
これで「あ、い、か」は抽出できますか?
読みづらくてすみません;


843 名前:840 :2005/03/28(月) 21:47:05
すみません、プログラム以前のイージーミスでした。忘れてください。

844 名前:デフォルトの名無しさん :2005/03/28(月) 21:48:42
何でわざわざコピー元座標引数を無視するんだよ。

845 名前:デフォルトの名無しさん :2005/03/28(月) 21:59:14
「あ」 の左上座標と縦横サイズがわかれば「あ」だけコピーできるでしょ

846 名前:デフォルトの名無しさん :2005/03/28(月) 22:00:33
コピー元の座標引数って上記のコピー元のx?、コピー元のy?
以外にあるんですか?

847 名前:デフォルトの名無しさん :2005/03/28(月) 22:04:02
複数回BitBltを実行するという発想がないような予感

848 名前:デフォルトの名無しさん :2005/03/28(月) 22:06:08
FAQでしょうが教えてください。

今までFreeBSDやCygwinでプログラムを作ってきたのですが
Windows NativeのGUIアプリケーションを作りたくなったので
(TkをインストールしてとかJavaをインストールしてとかは説明がめんどい)
Win32APIを入門しようかと思いました。

んで、
http://wisdom.sakura.ne.jp/system/winapi/win32/index.html
を読んでいるのですが
http://wisdom.sakura.ne.jp/system/winapi/win32/win2.html
の目的プログラムの作成でWin32 Applicationを選ぶとあるのですが
うちのVisualC++.Netにはありません。
Win32プロジェクトを選ぶといろいろ記述されたファイルが作成されてしまいます。

できるだけ素の状態からはじめたいのですがどのようにすればよいでしょうか ?

もっと言うとMeadowやxyzzyでソースを書いて、gccでコンパイルみたいな感じで
使いたいです。

ぐぐったのですがいい検索キーワードが思いつきません。
教えてください。

849 名前:デフォルトの名無しさん :2005/03/28(月) 22:08:30
>>848
Meadowやxyzzyでソースを書いて、clでコンパイルすれば解決。

850 名前:デフォルトの名無しさん :2005/03/28(月) 22:23:11
>>848
「空のプロジェクト」って選んでる?

851 名前:デフォルトの名無しさん :2005/03/28(月) 22:28:31
>>848
何がやりたいのかいまいちよくわかりませんが。
VisualC++6.0とVisualC++.Netでは最初の選択画面が少し違うからそのせいで戸惑っているのかな?と思います。

メニューの
[ファイル] -> [新規作成] -> [プロジェクト]を選択
作るプロジェクトを択するダイアログがでるのでその左側から
[VisualC++ プロジェクト]のフォルダを開くと
Win32コンソールプロジェクト
Win32プロジェクト
がでるのでWin32プロジェクト選んで後は適当に。

IDE使いたくないならnmake.exeってのがあるので適当にMakefile書いてガンガレ

852 名前:デフォルトの名無しさん :2005/03/28(月) 22:30:56
>847
あーそういう発想は無かったです;
だめだ私orz


853 名前:851 :2005/03/28(月) 22:31:40
ああ、
>>851
でWin32プロジェクト 選んだ後さらにダイアログが出る。
その左側の[アプリケーションの設定]っての選ぶと初期設定みたいのが選べるので
[空のプロジェクト]とかにチェックつけるとIDE用のプロジェクトやらソリューションだけの状態で
ソースは一切無しの状態になるっぽ

854 名前:デフォルトの名無しさん :2005/03/28(月) 22:48:20
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

855 名前:848 :2005/03/28(月) 22:55:06
みなさんありがとうございます。
空のプロジェクトを作ることが出来ました。

ですが、windows.hをインクルードするWinMainを使うサンプルが
コンパイルできません。


とりあえずIDE ? の作ってくれる雛型を土台にいろいろいじっていこうと思います。

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

856 名前:デフォルトの名無しさん :2005/03/28(月) 23:19:46
>>855
main()を使うようにコンパイルされてるんじゃない?
ならばコンパイラの設定や引数で指定してみれ。

857 名前:デフォルトの名無しさん :2005/03/29(火) 00:00:12
>>824
無視されないって言ってんべ。

858 名前:デフォルトの名無しさん :2005/03/29(火) 00:35:04
LoadIcon関数は将来サポートされなくなる可能性があるので
LoadImage関数を使うほうがいいと「猫」に書いてあったのですが本当ですか?

859 名前:デフォルトの名無しさん :2005/03/29(火) 00:38:31
>>858
MSDNを見ろ

860 名前:デフォルトの名無しさん :2005/03/29(火) 00:43:44
>>859
ゴメン

861 名前:デフォルトの名無しさん :2005/03/29(火) 02:03:44
ディスプレイが32bitカラーモードのときに
32bitアイコンに含まれる16色や256色のアイコンを選んで
描画する方法を知りませんか?

862 名前:デフォルトの名無しさん :2005/03/29(火) 02:17:59
知ってます

863 名前:デフォルトの名無しさん :2005/03/29(火) 02:22:27
>>861
僕はそのやり方を知らないけど、質問する時は念のために、
「もし知っているならそのやり方を教えてください」も追加した方がいい。

864 名前:861 :2005/03/29(火) 02:40:48
>>863
いえ、私は皆さんが方法を知っているかどうかを知りたかったのです。

865 名前:861 :2005/03/29(火) 03:04:47
864は偽者です。
>>863
忠告ありがとうございます。



866 名前:デフォルトの名無しさん :2005/03/29(火) 03:27:38
>>865
それで終わりかいっ!
実現方法は聞かないのかよw

867 名前:デフォルトの名無しさん :2005/03/29(火) 03:28:44
ごめん、wと!は逆の方がしっくりくるので脳内変換よろ

868 名前:861 :2005/03/29(火) 03:57:21
>>866
いや揚げ足を取られやすい質問の仕方だっただけで
こちらの意図は伝わってると思ったので…

ちなみに32bitアイコンのリソースを直接読みこんで
つまりアイコンファイルのフォーマットを解析して
ビットマップ情報から表示みたいな方法ではなく
もっとスマートな描画方法があるのなら教えてほしいのです。

869 名前:デフォルトの名無しさん :2005/03/29(火) 04:05:33
>>868
>>699-717


870 名前:デフォルトの名無しさん :2005/03/29(火) 07:49:08
>>868
explorer のような tree view でファイルを表示するのを、自分もやっていて
最近知ったのですが、tree view に付ける ImageList の生成のときに 16x16 に
するか、32x32 にするか、指定できますね。32x32 にすると tree view の行の
高さは高くなります。color depth も指定できます。
普通は、4 bit color のを使うか、8 bit color のを使うかは、モニタの指定に
従い、判別されるようです。該当するものがないときは、近いものが選ばれたり、
他のものから生成されるようです(ぼやけた絵になりますが)。
HICON を作るときや DrawIconEx() でも、サイズは指定しますが、depth は書く
必要がないのは、OS に任せろと言っているのか、サイズとdepthは、略リンクして
いるので、それに従うということではないかと想像しています。
古い MSDN サンプルに aniEdit, imagedit というのがあり、これ以降、新しい
資料がなさそうなので、ご覧になるといいかと思います。

871 名前:デフォルトの名無しさん :2005/03/29(火) 13:33:15
DefaltGateway,DNSServerを取得できる関数ってないですか?
IPアドレスとサブネットマスク、MACアドレスなどは取得できる関数はあったのですが。

872 名前:デフォルトの名無しさん :2005/03/29(火) 14:43:31
Win32_NetworkAdapterConfigurationクラスにあったような・・・

873 名前:デフォルトの名無しさん :2005/03/29(火) 17:55:07
>>871
GetAdaptersInfo

874 名前:861 :2005/03/29(火) 18:43:12
>>870
貴重なサンプルについて教えて頂いてありがとうございます。
仰る通り、何ビットのアイコンをロードするかはOSが判断しているようです。
MSDN で LookupIconIdFromDirectory の解説を見ると、
LoadIcon も LoadImage も現在の表示デバイスに合ったものを検索するとあります。

で、調べていて気がついたのですが、LoadImage のオプションで LR_VGACOLOR フラグを立てれば
16色に指定することだけはできるようです。でもその他の色数は指定できません。
結局、リソースから直接読み出す方法を試していたところ、以外と簡単にできてしまいました。
FindResource, LoadResource, LockResource, CreateIconFromResourceEx を使用する方法で
>>722 のリンク先に完全なサンプルがあります。

875 名前:デフォルトの名無しさん :2005/03/29(火) 22:31:38
DrawTextは、char型のポインタを指定しますが、
wchar_t(ワイド文字)に対応した文字列描画関数はありますか?

無いとしたら、ワイド文字をマルチバイト文字へ変換させてから描画しないといけないのでしょうか?

よろしくお願いいたします。

876 名前:デフォルトの名無しさん :2005/03/29(火) 22:37:40
>>875
MSDNより。

int DrawText(
HDC hDC, // handle to DC
LPCTSTR lpString, // text to draw
int nCount, // text length
LPRECT lpRect, // formatting dimensions
UINT uFormat // text-drawing options
);

LPCTSTR だが…?

877 名前:875 :2005/03/29(火) 22:43:19
>>876

「error C2664: 'DrawTextA' : 2 番目の引数を 'wchar_t *' から 'LPCSTR' に変換できません。」
LPCSTRとなってしまいます。

ソースコードでは、
::DrawText(m_hDC,pString,length,pRect,uFormat);
とDrawTextと指定してるんですが。。。
DrawTextA?

878 名前:デフォルトの名無しさん :2005/03/29(火) 22:48:26
#define UNICODE もしくは #define _UNICODE
直接wchar_t版使いたいなら、DrawTextWを呼べ。

879 名前:デフォルトの名無しさん :2005/03/30(水) 01:55:03
すみませんお聞きしたいのですが
HBITMAPを開放するのでDeleteObjectを読んでたのですが
MSDNによると

戻り値
・指定したハンドルが有効でない場合、またはデバイスコンテキストでそのオブジェクトが選択されている場合は、0 が返ります。

解説
・デバイスコンテキストで選択されている描画オブジェクト(ペンまたはブラシ)は削除しないでください。

とありますが、SelectObjectで選択されていても0以外の値を返すのですがHBITMAPの場合問題無いのでしょうか?


880 名前:デフォルトの名無しさん :2005/03/30(水) 02:11:57
普通は使い終わったらSelectObjectで選択解除してからDeleteObjectする
おそらくWindowsプログラミングの常識じゃないか?
SelectObjectしたまんま開放なんてありえない。

881 名前:デフォルトの名無しさん :2005/03/30(水) 02:27:33
>>877

// winuser.h

int DrawTextA(HDC hDC, LPCSTR lpString, int nCount, LPRECT lpRect, UINT uFormat);

int DrawTextW(HDC hDC, LPCWSTR lpString, int nCount, LPRECT lpRect, UINT uFormat);

#ifdef UNICODE
#define DrawText DrawTextW
#else
#define DrawText DrawTextA
#endif

882 名前:デフォルトの名無しさん :2005/03/30(水) 05:29:10
DDBビットマップの、透過表示に使う、マスク画像の作り方についての質問です。
今は、GetPixelで色を調べながら、SetPixelで描画みたいにしているのですが、
BitBltのラスタオペレーションの組み合わせで、うまい事出来ないでしょうか。
出来るなら、やり方を教えてください。

883 名前:デフォルトの名無しさん :2005/03/30(水) 09:09:58
プロセス間で、共有メモリを使ってBSTR型の文字列をやり取りする方法ないでしょうか?
文字列のサイズを気にせずにプロセス間で受け渡ししたいのですが・・・
やり方まで教えていただけると嬉しいです


884 名前:デフォルトの名無しさん :2005/03/30(水) 11:42:25
>>883
「やり取り」というものの詳細がいまひとつわからんが
メモリマップトファイルとかは調べた?

885 名前:デフォルトの名無しさん :2005/03/30(水) 12:02:57
>>882
ttp://www14.big.or.jp/~ken1/tech/tech9.html

886 名前:デフォルトの名無しさん :2005/03/30(水) 12:48:21
>>883
ウィンドウ間ならWM_COPYDATAで楽に出来る。

887 名前:デフォルトの名無しさん :2005/03/30(水) 13:01:06
>>883
ひょっとしたらWM_SETTEXTだけでOKだったりして

888 名前:デフォルトの名無しさん :2005/03/30(水) 13:06:51
888 そう鴨

889 名前:882 :2005/03/30(水) 13:55:39
>>885
出来ました。ありがとうございました。

890 名前:883 :2005/03/30(水) 14:31:56
>>884
すみません。
もうちょっと詳しく状況書かないといけませんでしたね。。
「やり取り」というのは、共有メモリを使って他プロセスにBSTR型の文字列を渡したり受け取ったりしたい、という意味です。
今まで、CreateFileMappingとMapViewOfFile使ってchar*で文字列の受け渡ししてました。
これをBSTRでやりたい・・という魂胆です
とりあえず、BSTRのポインタだけ渡すのは明らかにダメだったので、実体全部を・・などと考えているんですが・・
ここでのプロセスで動かしてるのは両方コンソールアプリ型のWin32サービスです。

いい方法ないでしょうか。。

>>886
>>887
即レスありがとうございます。説明不足でした。
コンソール型のWin32サービスなので、ウィンドウメッセージは×なのです。
すみません。

891 名前:デフォルトの名無しさん :2005/03/30(水) 14:39:07
BSTRサーバーでも作れば?

892 名前:デフォルトの名無しさん :2005/03/30(水) 15:11:08
>>890
えーと、FileMappingではいけない理由は?

893 名前:デフォルトの名無しさん :2005/03/30(水) 15:13:25
#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
static char* moji;
// TODO: この位置にコードを記述してください。
for(int i=0; i<10; i++)
{
wsprintf(moji,"ループ%d回目です。",i+1);
MessageBox(NULL,mojip,"ループ",MB_OK);
}

return 0;
}

wsprintfを使用してループ回数を毎度表示するプログラムを組みたいのですが、コンパイルは通るもののこれを実行するとエラーで終了させられてしまいます。
char配列にすれば問題なく作動するのですがstatic char*で動かすにはどうすればよいのでしょうか。

894 名前:893 :2005/03/30(水) 15:14:55
書き忘れました、static char*にかぎらずchar*のように配列ではなくポインタを使用したいのです。
よろしくおねがいします。


895 名前:デフォルトの名無しさん :2005/03/30(水) 15:15:14
>>893
メモリを確保しろ

というか、Cの基礎をやり直して来い

896 名前:デフォルトの名無しさん :2005/03/30(水) 15:16:17
×:MessageBox(NULL,mojip,"ループ",MB_OK);
○:MessageBox(NULL,moji,"ループ",MB_OK);
です。何度もスミマセン。

897 名前:デフォルトの名無しさん :2005/03/30(水) 16:16:51
>>893
たぶん君の頭だとVB使ったほうがいいよ。

898 名前:デフォルトの名無しさん :2005/03/30(水) 16:23:19
>>894
ポインタがなにも指してないからダメですよ

static char* moji = "ほげほげ";

とかやるとか、ちゃんと実体のあるものを指すようにしましょう

899 名前:デフォルトの名無しさん :2005/03/30(水) 16:28:51
>>898
説明できないなら出てくるなよ

900 名前:デフォルトの名無しさん :2005/03/30(水) 16:31:47
ポインタとか話すのは素人、値とか参照、名前といえれば高級言語の
エキスパートといえる

901 名前:デフォルトの名無しさん :2005/03/30(水) 16:34:34
LPSTRやらHANDLEやら、Win32で定義されてるのは沢山あると思うんですが、
それの内容一覧とかありませんか?

902 名前:デフォルトの名無しさん :2005/03/30(水) 16:35:47
>>901
PlatformSDKのヘッダーファイル

903 名前:デフォルトの名無しさん :2005/03/30(水) 16:38:34
>>902
どうもありがとうございました。。

904 名前:デフォルトの名無しさん :2005/03/30(水) 16:40:51
>>902
すいません、PlatformSDKのヘッダーファイルってwinbase.hとかですか?

905 名前:デフォルトの名無しさん :2005/03/30(水) 16:42:10
>>904
正解

906 名前:デフォルトの名無しさん :2005/03/30(水) 16:43:10
>>901
http://msdn.microsoft.com/library/en-us/winprog/winprog/windows_data_types.asp

907 名前:デフォルトの名無しさん :2005/03/30(水) 16:50:45
>>893
char* moji;

moji = (char*)malloc(256);
:
wsprintf(moji,"ループ%d回目です。",i+1);
MessageBox(NULL, moji ,"ループ",MB_OK);
:
free(moji);



908 名前:890 :2005/03/30(水) 17:04:26
883です。
>>891
BSTRサーバ!!
なるほど。確かにこれなら・・。
こういう選択肢もあるんですね!
共有メモリに固執するあまり、考えてもいませんでした。
選択肢の1つとして、検討してみます。
ありがとうございます!

>>892
すみません、FileMappingにこだわる理由、書いてませんでしたね。。
依頼主からの要望なんです。
「なんとか共有メモリ使ってBSTRを渡すようにできないか」、と。

できない理由はいろいろ試してみていくつか挙がってきてるのですが、
それを解決する方法がどこかにあるんじゃないか・・と。

909 名前:デフォルトの名無しさん :2005/03/30(水) 17:08:54
すみません質問させてください。
シフトを5回連続で押した際に発生する固定キー機能の
ダイアログを出ないようにしたいために以下のようなコードを書いたのですが
動作時に、「無効になったはずです。」のメッセージは出せるのですが
その後にシフトを5回連続で押すと、やっぱりダイアログがでてしまいます。
これで良さそうな気がするのですが、何か見落としでもあるのでしょうか?
何かありましたら、宜しくお願いします。

910 名前:909 :2005/03/30(水) 17:11:42
STICKYKEYS StickKeys;

//STICKKEYS 構造体の初期化
StickKeys.cbSize= sizeof(STICKYKEYS);
StickKeys.dwFlags= 0;

//固定キー機能の値を取得するユーザプロファイル更新のために SPIF_UPDATEINIFILE を指定
if(SystemParametersInfo(SPI_GETSTICKYKEYS,sizeof(STICKYKEYS),&StickKeys,SPIF_UPDATEINIFILE) != 0)
{ }
else{ /*失敗*/ return FALSE;}

//現在5回シフトで、固定キーダイアログ発生が有効
if(StickKeys.dwFlags & SKF_HOTKEYACTIVE)
{  MessageBox(NULL,"なので、でないようにしたいです。","",MB_OK);
  StickKeys.dwFlags &= !SKF_HOTKEYACTIVE;

if(StickKeys.dwFlags & SKF_HOTKEYACTIVE)
{}
else
{ MessageBox(NULL,"5回シフト押下でダイアログがでないようになったはず。","",MB_OK);}
}

911 名前:デフォルトの名無しさん :2005/03/30(水) 17:19:04
ネタか?

912 名前:909 :2005/03/30(水) 17:22:03
>>911
すみません本気で書いてるつもりっす…。
何故そんなこと言われるのかも解らん状態です。><


913 名前:デフォルトの名無しさん :2005/03/30(水) 17:24:47
>>912
911のような奴を相手にしないこと
この板にふさわしくないバカはほっとけ


914 名前:デフォルトの名無しさん :2005/03/30(水) 17:30:54
つうか、ネタだろ、longhornのネタかw

915 名前:デフォルトの名無しさん :2005/03/30(水) 17:31:44
SPI_SET*の存在についてよく考えて見ろ。

916 名前:デフォルトの名無しさん :2005/03/30(水) 17:49:35
つーか、BSTRならCOMだろ。OutProcなCOMなら、マーシャリングは
共有メモリなんでねーのか。

917 名前:909 :2005/03/30(水) 18:30:16
>>915
うおーーーーーーーーーーーーー!!俺馬鹿だ(爆
有難うございます。

なんで皆がネタかと言ってたか解りました。
お騒がせしてすみませんでした。



918 名前:デフォルトの名無しさん :2005/03/30(水) 18:45:37
>>906
ありがとうございます!まさにそれです!

919 名前:デフォルトの名無しさん :2005/03/30(水) 20:31:03
>>908
char型に変換して渡す。
受け側でBSTRに戻す。

920 名前:デフォルトの名無しさん :2005/03/30(水) 20:33:31
>>919
charにしなくてもwchar_tで渡せばいいじゃん。

921 名前:デフォルトの名無しさん :2005/03/30(水) 20:55:06
こんばんわ

char mb[]="@niftyでインターネット Version 5.00について";
wchar_t wc[100000];


mbstowcs(wc,mb,100000);
を使いワイド文字に変換したのですが、
次のように文字化けがおきます。
何に問題があるのでしょうか?

"@nifty?A?C???^?[?l?b?g Version 5.00?E?A?¢?A";

922 名前:デフォルトの名無しさん :2005/03/30(水) 21:03:19
>>921
変換してどこに出力したんだ。

923 名前:デフォルトの名無しさん :2005/03/30(水) 21:04:28
cのライブラリ関数の質問はスレ違い。たぶんlocale関連の問題。

mbstowcsに拘らずにマルチバイト文字列からワイド文字列への変換がしたいだけなら、
Win32API のMultiByteToWideCharでちゃんとコードページを指定してやればOK。

924 名前:デフォルトの名無しさん :2005/03/30(水) 21:06:43
setlocale

925 名前:デフォルトの名無しさん :2005/03/30(水) 21:41:53
>>898
文字列リテラルは書き換え出来ない(C/C++の規格では)

926 名前:デフォルトの名無しさん :2005/03/30(水) 23:18:27
マスクされたビットマップ画像を扱いたいのですが、
猫でも〜のMaskBltだと95/98じゃ動作しないようなので
95/98でも使えるマスク画像はできないか
(特定の色を透過色として透かす方法などがあれば)
教えてください。お願いします。

927 名前:デフォルトの名無しさん :2005/03/30(水) 23:41:37
>>926
>>882
>>885

928 名前:デフォルトの名無しさん :2005/03/31(木) 00:01:07
GDI+使う手もあるけどね。
あれは95じゃ駄目か?

929 名前:デフォルトの名無しさん :2005/03/31(木) 00:15:57
DirectDraw使う手もあるナ

930 名前:デフォルトの名無しさん :2005/03/31(木) 01:07:18
OS再起動時にあるファイルの削除をしたいのですが、
何のAPIを使えば良いですか?

931 名前:デフォルトの名無しさん :2005/03/31(木) 01:23:01
>>930
MoveFileEx


932 名前:デフォルトの名無しさん :2005/03/31(木) 01:55:57
>>926
新しいの買いなよPC
貧乏なの?

933 名前:デフォルトの名無しさん :2005/03/31(木) 01:56:58
>>932
だから、バカはこのスレに来るなよ

934 名前:デフォルトの名無しさん :2005/03/31(木) 01:59:57
WinAPIで発生するエラーの処理はどの程度行えばよいのでしょうか。
ほとんどの関数が何らかの形で(NULLであったり定数であったり)
エラーを返すと思うのですが、やはり全てを考慮すべきなのでしょうか。
それとも、他の方のソースとの比較や経験則から、
エラーがほとんど発生しないような部分は割り切ってしまったほうが
いいですか?

自分は学生です。
仕事などで使うような重要なプログラムを作っているわけではありません。
頻繁に使用する部分を、自分なりに使いやすいようにまとめている最中です。

935 名前:デフォルトの名無しさん :2005/03/31(木) 02:06:47
ListViewで アイコン一覧とコメント(名称) のリストを作成したく

LV_ITEM item;
item.mask= LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;


という感じでリストビューを表示したのはよいのですが、
項目が増えると、右にスクロール(水平スクロールバーが表示される)してしまいます。

下に項目が増えていく(垂直スクロールバーのみが表示される)ように設定するには
どうすればよいのでしょうか。教えてください



936 名前:デフォルトの名無しさん :2005/03/31(木) 02:12:02
>>933
だから、バカはこのスレに来るなよ

937 名前:デフォルトの名無しさん :2005/03/31(木) 02:15:23
また厨房か
バカとか使うからすぐ分かるよな
明日から学校いけ

938 名前:504 :2005/03/31(木) 05:29:55
超亀レス失礼します。

>>530
それは尤もなのですが・・・・・

>>534
コンソールを操作するAPIがちゃんとあるんですね。
貴重なアドバイスをどうもありがとう御座いましたm(_ _)m

>>537
Linuxのlessのソースを見たらコンソールを操作する関数があったのですが、
include ファイルも環境依存のものだったので、結局あまり参考になりませんでしたorz

939 名前:デフォルトの名無しさん :2005/03/31(木) 05:31:24
UNIXのソースなんか読んでも参考にならんよ

940 名前:デフォルトの名無しさん :2005/03/31(木) 08:13:14
>>934
さー?人それぞれケースバイケースだけど。
エラーは一応全部orほとんどハンドリングしておいて、大した
エラー時処理は入れないぐらいでいいんじゃない?
メッセージボックス出すとか。
デバッグに役立てる意味で。

941 名前:デフォルトの名無しさん :2005/03/31(木) 08:34:49
横レスですが、>>908 のBSTRサーバって何ぞや?
ぐぐったけどわからなかった。誰か教えてん。

942 名前:908 :2005/03/31(木) 08:55:45
>>919
>>920
ありがとうございます。
やっぱり、FileMappingではそれしかなさそうですね。
BSTRをWCHARとDWORDに分解して、受け側で再構築させてみます。
まぁ、BSTRで渡す意味あるのってツッこまれたら、それまで、ですが。。

>>941
BSTRを受け渡しするだけのCOMサーバのことと理解してます。(誤解だったりして)
この場合、アウトプロセスになるのかな・・
この辺、自分もそんなに詳しくないので。。
これなら出来そうだ・・っていうイメージぐらいしか分かりませんが^^;;

943 名前:デフォルトの名無しさん :2005/03/31(木) 09:15:50
BUTTON のフォントサイズはどうやって変更するんですか?

944 名前:デフォルトの名無しさん :2005/03/31(木) 10:58:03
>>942
DLLに共有セクションを持たせることもできるな

945 名前:942 :2005/03/31(木) 13:05:25
>>916
遅レスすみません。
ごもっともです。
確かに、アウトプロセスCOMなら、
共有メモリ使ってるのと似たような使い方考えられますね。
BSTR型とCOMを切り離して考えてたところが急所でした。。

>>944
なるほど!
COMまでいかなくても、DLLの共有セクションって手段もあるんですね。
共有メモリからDLL、COMという発想がでてきませんでした。

FileMappingでは限界と感じてるので、
DLLかCOMではどうか・・と、そっちの方向に振ってみる事にします。
アドバイスくれたみなさん、有難うございました!

946 名前:934 :2005/03/31(木) 13:15:25
>>940
そうですね。
どうしても読みにくくなる部分以外は
とりあえずメッセージボックス入れるようにしていきます。
こだわりすぎで読みにくくなったりしたら元の木阿弥ですしね。
丁寧な回答ありがとうございました。

947 名前:デフォルトの名無しさん :2005/03/31(木) 16:13:52
>>938
じゃあ、PDCursesはどう?
http://pdcurses.sourceforge.net/

948 名前:デフォルトの名無しさん :2005/03/31(木) 20:47:34
DeleteDC( hmemdc )
DeleteObject( hobj )
とかって、オブジェクトを削除する前に、(メモリ)デバイスコンテキスト
から削除(解放)する必要があると学びました。
その手順を教えているサイトはあるのですが、それはなぜか説明されている
ところを見つけることが出来ません。 ご存知のかたいらっしゃいますか?

949 名前:デフォルトの名無しさん :2005/03/31(木) 20:52:49 ?###
CClientDCを使うんだ!

950 名前:デフォルトの名無しさん :2005/03/31(木) 21:05:02
>>948
探せばすぐ見つかると思うが。
基本は、
hNew = CreateXXXX();
hOld = SelectObject(hdc,hNew);
/* ここで描画 */
SelectObject(hdc,hOld);
DeleteObject(hNew);


951 名前:デフォルトの名無しさん :2005/03/31(木) 21:07:28
ずれたこというな

952 名前:926 :2005/03/31(木) 21:44:32
>927
既出スマソ。サンクス

953 名前:デフォルトの名無しさん :2005/03/31(木) 22:45:22
>>948
SelectObjectしたものをきちんと戻してあるなら破棄する順番に関係はない。
ただ、作成した順・逆順で破棄するなど規則性があった方がわかりやすい。

954 名前:デフォルトの名無しさん :2005/03/31(木) 23:33:04
メッセージループのデッドタイムを使って処理をしてるとき、
ウィンドウのキャプションバーをマウスで押下してると処理が止まるから
てっきり何かメッセージが連続で発生してるもんだと思ったら、
DispatchMessage()でループが止まってた…。
なのにWM_TIMERとかWM_MOVEとかでプロシジャはしっかり呼ばれてる。
なんで???わけわかんねーorz

955 名前:デフォルトの名無しさん :2005/03/31(木) 23:42:28
>>954
そういう一部のメッセージはメッセージループを通らず直接ウィンドウプロシージャへ送られる。

ちなみに自分からそういう風にメッセージを送りたければSendMessage()を使う。
PostMessage()だとメッセージループ経由になる。

956 名前:デフォルトの名無しさん :2005/03/31(木) 23:43:51
難しい話してるなぁ…僕はいつになったらこの人達みたいになれるんだろう

957 名前:デフォルトの名無しさん :2005/03/31(木) 23:45:06
>>956
めっちゃ簡単ですやん。
やればできる子ですやん。

958 名前:デフォルトの名無しさん :2005/03/31(木) 23:53:49
>>955
おお!そうかそういうことなのか…。
返答thxです。

いや、何か連続でメッセージが送られてるなら
そのメッセージ取得中は別に自前の処理関数呼べばいいかな
と思ってたんだけどそれだとどうやら無理っぽいっすね…。

なんとか処理止めずにいけないものでしょうか…(´・ω・`)

959 名前:デフォルトの名無しさん :2005/03/31(木) 23:57:20
デッドタイム使うのやめてスレッド作ったらどう?

960 名前:958 :2005/04/01(金) 00:06:01
時代はやはりマルチスレッドなのか…。
いまだに抵抗あるんですけど挑戦してみます!(`・ω・´) ノ

961 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 01:52:14
質問です。
実行されているアプリの実行時のカレントディレクトリ(作業ディレクトリ)を知るには
どうすればいいでしょうか? 例えば

C:\program files\program\program.exe を D:\Work から実行した、または、

C:\program files\program\program.exe のショートカットを D:\Work作成して実行した

といったケースで、実行中のprgram.exeを特定し、そこから D:\Work を導き出すことは
出来ないでしょうか?

なお、GUIアプリを対象にするつもりなのでWindowハンドルを元にプログラムを特定する
つもりです。

962 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 01:53:24
>>955
DefWindowProc内でメッセージループが回ってんじゃね?
MessageBoxみたいに。

963 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 01:54:16
Longhornの発売がまた延期(2008年初頭)になるそうで。
これぞMicrosoftクオリティ。

964 名前:961 :皇紀2665/04/01(金) 02:21:53
Processを特定できればSTARTUPINFOという型の情報を持っていてそれで判るみたいですね。
もう少し調べてみます。自己完結失礼。

965 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 07:09:29
実行ファイルはGetModuleFileName使って、
作業ディレクトリGetCurrentDirectory使えば。

966 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 11:36:06
Advanced WindowsのLastMsgBoxInfoサンプルを参考にして、ExitProcessをフックするプログラムを書いてみたんですが、
フックできるexeと出来ないexeがあります。

画像ビューアのirfanviewと、Windows2000/XPのCMD.exeはフック出来ませんでした。
あと、explorer.exeのCreateProcessもフックできませんでした。
どうしてなんでしょうか。
(フックできているかどうかは、OutputDebugStringで確認しています)

環境は、Windows2000 VC++6です。

967 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 11:55:48
WHND m_whandle;
m_whandle = GetActiveWindow();
if(m_whandle==NULL)
AfxMessageBox("NULLっぽい",MB_ICONSTOP);

ってな感じで、アクティブなウィンドウのハンドルを取得しようとしてるんですが、そのプログラム(自分)以外のウィンドウをアクティブにするとNULLが返ってきます。
どなたかお助け願います。

968 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 12:05:38
>>967
GetForegroundWindow

969 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 12:42:55
>>968
GetActiveWindowをGetForegroundWindowに変えたところ、ダイアログが出なくなったのでうまく行くかと思ったのですが、GetWindowTextで確認するとやはり何も変わっていないようです。

char buf[100];
WHND m_whandle;
m_whandle = GetForegroundWindow();
if(m_whandle!=NULL){
GetWindowText(m_whandle, buf, 1000);
MessageBox(NULL, buf, "DoGetForegroundWindow", MB_ICONSTOP);
}

970 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 12:51:22
突っ込んで良いのか・・・・?
>>char buf[100];
>>GetWindowText(m_whandle, buf, 1000);


971 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 12:56:22
あと、WHNDってのも無い。

972 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 12:59:24
その場で書き足したんでミスってました、すまんす。
ソースは1000とHWNDになってます。

973 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 13:03:39
GetWindowText
指定されたウィンドウのタイトルバーのテキストをバッファへコピーします。指定されたウィンドウがコントロールの場合は、コントロールのテキストをコピーします。ただし、他のアプリケーションのコントロールのテキストを取得することはできません。

に気づいてしまいました。

他のアプリケーションは取得も無理ですか?具体的にはアクティブなウィンドウに張り付きたいのです。

974 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 13:10:57
>>973
GetForegroundWindowがコントロールを返すことは多分滅多にないんじゃないかな。

975 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 13:14:46
ホントだ・・・ダメダメじゃん、自分・・・orz

976 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 13:55:52
>>966>>967は同じ人の質問?

977 名前:966 :皇紀2665/04/01(金) 14:31:42
別人です。

APIフックで悩んでおります。


978 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 14:41:20
次スレまだー?

979 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 16:55:19
Net meeting SDKに関する質問は
ココでいいですか?

980 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 17:59:53
新スレ。

Win32API質問箱 Build30
http://pc8.2ch.net/test/read.cgi/tech/1112345886/

981 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 18:25:26
>>966
たぶんそのサンプルはIATしか変更してないからだね。
いくらロードされたモジュール毎にIATを変更して回っても、
直接ExitProcAddressに飛んでる場合には対応できない。
プロセスにロードされたExitProcAddress関数のコードそのものを
書き換えるのが確実。
タイミングが悪いと書き換え中に呼ばれたりするから
SuspendThreadかなんかで停止中に書き換える。

例えば、ExitProcAddressの頭を
jmp MyHook
みたいなコードに書き換えて、用が済んだら書き換えた箇所を元に戻して、
jmp ExitProcAddress
する。


982 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 18:27:08
ExitProcAddressじゃなくてExitProcessだね。

983 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 19:20:44
>>973
WM_GETTEXT

984 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 19:39:44
GetWindowTextは他のアプリからでも取得できたんじゃなかったっけ。
Win3.1とかからの互換性のためとかいって、
対象ウインドウのメッセージループが回ってなくても大丈夫だとか
聞いたことがあったけど。

985 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 19:41:07
>>984
その辺の話はAdvancedWindowsに載ってるね。
WM_COPYDATA関連の章で。

986 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 20:05:38
>>984
WM_GETTEXTを素で送るとWindowsがよろしくやってくれるんだが
GetWindowTextを使うとはねられる。

987 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 20:43:44
SendMessageとはやり方が違うのかもね>GetWindowText

988 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 20:53:31
ttp://www.microsoft.com/japan/msdn/library/ja/jpwinui/html/_win32_getwindowtext.asp

いや、わざわざチェックかましてるだけっぽ。

989 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 21:13:46
ReadFileは一文字ずつ読み込めるのでしょうか?
カンマで区切られたtxtデータを読み込んで
カンマまできたら、そこまでの文字を読み込みたいのですが、
どうすればいいでしょうか?

990 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 21:23:42
>>989
先ず日本語を勉強しろ。

>カンマで区切られたtxtデータを読み込んで
>カンマまできたら、そこまでの文字を読み込みたいのですが
読み込んだ後に読み込みたいって矛盾してるように読めるぞ。

991 名前:966 :int 2ch =05/04/01(金) 21:38:11
>>981
なるほど。
回答ありがとうございました。
その方法でやってみます。

992 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 21:41:51
>>989
効率は悪いだろうけどSetFilePointerと組み合わせれば出来るかもね。

993 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 21:47:20
>>989
ファイルサイズがそこまで大きくなければ、メモリ上に一度全て
読み込んでしまえ。無駄に感じる気持ちは解る。はじめの頃は。

994 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 21:52:59
つーか、そういうときぐらい素直にC/C++の標準ライブラリとか使ってやれよ。

995 名前:989 :int 2ch =05/04/01(金) 21:59:49
スマソ。正直学力が足りなかった

996 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 22:10:55
↓スレスト

997 名前::int 2ch =05/04/01(金) 22:16:25
 

998 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 22:18:55 ?###
999でスレスト



999 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 22:20:52
ならぬツイスト _/ ̄

1000 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 22:20:58
Win32API質問箱 Build30
http://pc8.2ch.net/test/read.cgi/tech/1112345886/l50


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