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


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

Win32API質問箱 Build46
751 名前:デフォルトの名無しさん :2006/11/03(金) 12:58:31
スレ違いなことも分からないなら黙っててほしいね確かに

752 名前:デフォルトの名無しさん :2006/11/03(金) 13:46:30
ワイルドカードで文字列がマッチするかどうかを調べるAPIは無いですか。

753 名前:デフォルトの名無しさん :2006/11/03(金) 14:00:13
ないんじゃない。たぶん。
仮にあったとしても、エクスポートすらされていないじゃないかな。
確実に必要だとは思うけど。

754 名前:デフォルトの名無しさん :2006/11/03(金) 14:04:06
無いのか…
正規表現でなんとかするか。

755 名前:デフォルトの名無しさん :2006/11/03(金) 14:21:32
PathMatchSpec

756 名前:デフォルトの名無しさん :2006/11/03(金) 14:26:07
>>755
パスのマッチにしか使えないじゃん

757 名前:デフォルトの名無しさん :2006/11/03(金) 14:35:48
>>755
それで逝けました。

758 名前:デフォルトの名無しさん :2006/11/03(金) 17:14:52
マルチディスプレイ環境で、プライマリディスプレイの切り替えをAPIで実行したいです。
ChangeDisplaySettingsExのdwflagsにCDS_SET_PRIMARYをつけて、
セカンダリに対して呼び出しましたが、セカンダリが非接続になるだけでした。
プライマリの切り替えをするにはどうすれば良いでしょうか。
OSはWinXP SP2で、ビデオチップはMobile Intel 945GMです。
よろしくお願いします。

759 名前:デフォルトの名無しさん :2006/11/03(金) 17:15:49
インテルに聞け

760 名前:デフォルトの名無しさん :2006/11/03(金) 18:33:27
メモリデバイスコンテキストは、別途作成したビットマップを選択して使うのが
普通だと思いますが、メモリデバイスコンテキストが最初に所有している
ビットマップ(1×1、モノクロ)をわざわざ削除しているソースを見たことがないんですが、
削除しないままで、リソースリークが発生したりすることはないんでしょうか?

761 名前:デフォルトの名無しさん :2006/11/03(金) 18:48:21
最初から持ってるビットマップは削除したらだめ
メモリデバイスコンテキストを削除する前に選択しなおす

762 名前:デフォルトの名無しさん :2006/11/03(金) 18:58:24
¥0はずせよ馬鹿

763 名前:760 :2006/11/03(金) 19:57:22
>>761
そうなんですか…どうもありがとうございました。

764 名前:デフォルトの名無しさん :2006/11/03(金) 21:04:48
記憶があいまいなので便乗。
最初から持っているビットマップはストックオブジェクトじゃなかったっけ。
9xとNTで違うのかなぁ。詳しい人よろしく。


765 名前:デフォルトの名無しさん :2006/11/04(土) 00:33:56
システムメニューの「閉じる」や「移動」などの文字列を
各国語版Windowsに左右されずに取得したいと思っています。
コンソールアプリなのでウィンドウを生成して GetSystemMenu ではなく
リソースから取得したく思ってます。

WinNT系では、LoadLibrary("USER32.DLL") と LoadMenu で取得できましたが、
Win9x系では USER32.DLL にメニューリソースが存在せず、
USER.EXE にそれっぽいリソースがありましたが、LoadLibrary の段階で
ERROR_BAD_UNIT で失敗してしまいました。
Win9x系でのシステムメニューリソースの取得方法のアドバイスお願いします。

766 名前:デフォルトの名無しさん :2006/11/04(土) 00:45:30
隠しAPIとしてLoadLibrary16というものがあるが、リソース読めるかどうかは知らん。
ほかのやり方がありそう。

767 名前:デフォルトの名無しさん :2006/11/04(土) 02:09:55
内部でWaitCommEventやGetOverlappedResultなどを呼んで
待っている状態のスレッドを、外部から停止する方法を探しています。
いつも使っているループフラグのON/OFFではさすがにマズイと思いまして…
上記関数をキャンセル出来れば一番なんですが、
何か対策があれば教えていただけると幸せです。

768 名前:デフォルトの名無しさん :2006/11/04(土) 02:13:38
wsprintfでintの時などは%dを使えば変数が正しく表示されるのですが
floatやdoubleの%fを使っても f としか表示されません。
TextOutで描画しています。

どうすれば小数を表示できるのでしょうか?

769 名前:デフォルトの名無しさん :2006/11/04(土) 02:40:05
>>768
sprintfを使えない理由でもあんの?

770 名前:デフォルトの名無しさん :2006/11/04(土) 03:18:00
>>769
レアケースだけど、
標準のCRTをリンクさせずに、自前でエントリポイント用意してると、ことごとく使えなくなるね。

771 名前:デフォルトの名無しさん :2006/11/04(土) 03:23:03
>>768
wsprintfは実数は未サポート

772 名前:デフォルトの名無しさん :2006/11/04(土) 09:56:03
>>767
直接その関数で待機せずにWaitForMultipleObjectsを使って、
それに停止用イベントを含ませる。

773 名前:デフォルトの名無しさん :2006/11/04(土) 11:58:30
>>769-771
有難うございます
sprintfの存在を知らなくて・・・
解決できました

774 名前:デフォルトの名無しさん :2006/11/04(土) 12:59:47
wsprintf知っててsprintfしらないやついんの?

775 名前:764 :2006/11/04(土) 13:25:12
出典はVS2003付属のmsdn/technical articles/GDI Objects
例のビットマップはstockobjectと同様にconstant object、殺そうとしても死なない。
XPで確かめた結果、hBitmapのstock object marker(0x80000)はONだった。

776 名前:デフォルトの名無しさん :2006/11/04(土) 13:55:17
たしかMSDNの記述で、SelectObjectで元に戻すのは、shouldになっていたはず。
実際、戻してないコードが多すぎだろうから、MSも変えるに変えられないんだろう。

777 名前:デフォルトの名無しさん :2006/11/04(土) 14:10:11
>>772
なるほど!
どうもありがとうございます。

778 名前:デフォルトの名無しさん :2006/11/04(土) 16:46:04
質問です、DLL/EXEで呼ばれるnew/deleteを一致させたくて以下の様な関数を作りました↓
//new
void* operator new[](size_t size){
return(HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, size));
}
//delete
void operator delete[](void* ptr){
HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, ptr);
}
一応、これで動作はしているのですが何か問題が無いか心配です。
特に、[]が付いているのに何もしてないのでメモリリークあたりが起きてそうなのですが…。

779 名前:デフォルトの名無しさん :2006/11/04(土) 17:35:22
そんなことするくらいなら、COMみたいに自殺してもらえば良いのに。

780 名前:778 :2006/11/04(土) 17:40:52
>779
それが可能な局面ならそうやって実装するのですが、たとえばSTLのstringの様に内部でnew/deleteを用いるクラスを
DLL/EXE間で受け渡しする場合には自殺関数を用意しても無意味なので…これ以外の実装法を思いつきませんでしたorz

781 名前:デフォルトの名無しさん :2006/11/04(土) 18:35:02
ウィンドウのサブクラス化で、使い終わったときに元のWNDPROCを戻す必要はあるものでしょうか?


782 名前:デフォルトの名無しさん :2006/11/04(土) 18:46:35
>>778
CランタイムにMSVCRT使えばいいだけでは?

783 名前:デフォルトの名無しさん :2006/11/04(土) 19:01:22
イヤです

784 名前:778 :2006/11/04(土) 19:04:20
一応、デストラクタは配列分だけ呼ばれているので削除されているとは思われます(自己解決)

>782
プラグインの作成についてちょこちょことやっているので、相手にそうやってもらうのを期待できない感じです(汗

785 名前:デフォルトの名無しさん :2006/11/04(土) 19:19:54
>>780
内部のというものも、外部と同じくnewとdeleteの呼び出されるところが同じなら問題ないはず。

もっとも、std::string自体は、newとdeleteのようにいくつもの実装があり、しかもABI非互換だから、
モジュールを跨いで受け渡すのには向いていないと思う。
std::stringは、例として挙げただけならいいんだけど。

786 名前:デフォルトの名無しさん :2006/11/04(土) 19:27:58
スレ違いだけどboost:shared_prtはその辺をなんとかしてくれる
deleterを使って

787 名前:デフォルトの名無しさん :2006/11/04(土) 19:29:46
ここまで new/delete 使わずに HeapAlloc/HeapFree 直呼べば、いいじゃんというレスが無いのが謎

788 名前:デフォルトの名無しさん :2006/11/04(土) 19:45:36
new/delete 使わずに HeapAlloc/HeapFree 直呼べば、いいじゃん

789 名前:デフォルトの名無しさん :2006/11/04(土) 19:59:52
>>781
> 使い終わったとき
「ウィンドウを破棄するとき」って意味なら、戻さなくて大丈夫。

790 名前:778 :2006/11/04(土) 19:59:56
>785
std::stringは仰られる通りただの例です。
実際は、std::stringがDLL/EXE間の受け渡しには使えないので、
class mystr{
public:
mystr();//コンストラクタ
mystr(const char* Src);//コピーコンストラクタ(1)
mystr(const mystr& Src);//コピーコンストラクタ(2)
~mystr();//デストラクタ

void assign(const char* Src);//割り当て(1)
void assign(const mystr& Src);//割り当て(2)

const char* c_str() const;//アクセス

unsigned int size() const;//サイズの取得

mystr& operator =(const char* RHS);//代入演算子(1)
mystr& operator =(const mystr& RHS);//代入演算子(2)
bool operator ==(const char* RHS) const;//比較演算子(1)
bool operator ==(const mystr& RHS) const;//比較演算子(2)
bool operator !=(const char* RHS) const;//比較演算子(3)
bool operator !=(const mystr& RHS) const;//比較演算子(4)
protected:
char* m_Data;//文字列へのポインタ
unsigned int m_Capacity;//文字列のキャパシティ
};
の様なクラスの受け渡しを考えています。

791 名前:778 :2006/11/04(土) 20:00:27
>787-788
その考えはありませんでした(´Д`)

792 名前:778 :2006/11/04(土) 20:35:51
787-788で指摘されましたので、大幅な修正を行ってみました。

class TestC;というコンストラクタの呼び出しは必要でデストラクタの呼び出しが不要なクラスの場合、

TP = new(reinterpret_cast<TestC*>(HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, sizeof(TestC)))) TestC;



HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, TP);

で良いのでしょうか?

単純なPOD型なら、
TP = reinterpret_cast<TestC*>(HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, sizeof(TestC)));

HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, TP);
で良いのでしょうか?


793 名前:デフォルトの名無しさん :2006/11/04(土) 21:47:42
どうでもいいけどスレ汚すなよ

794 名前:765 :2006/11/04(土) 21:49:21
>>766
隠しAPIのLoadLibrary16で無事いけました。
LoadLibrary16("USER.EXE")
LoadMenu(〜)
FreeLibrary16(〜)
もっといい方法があってもよさそうなのですが、当初の目的が達成できましたので
こちらの方法でいきたいと思います。ありがとうございました。

795 名前:デフォルトの名無しさん :2006/11/05(日) 00:41:26
WindowsのEDITコントロールを使ってみると、IMEも問題なく使えるようです。

ところが、海外のプログラムなどで、
たしかにEDITコントロールを使っているにもかかわらず、
IMEを有効にして入力しようとすると、
変換中の文字列が、変な場所に表示されたりするものがあります。

なぜこんなことが起こるのでしょうか?
自分が書いたプログラムでは、起こらないので、気になります。
なにかIMEの動作を妨げるようなコードを書いてしまうことがあるのでしょうか?

796 名前:デフォルトの名無しさん :2006/11/05(日) 01:05:26
文字化けでは無く変な場所?

797 名前:デフォルトの名無しさん :2006/11/05(日) 01:36:41
何かの拍子にインプレイスじゃなく画面左上に出たりすることあるね

798 名前:デフォルトの名無しさん :2006/11/05(日) 02:47:56
http://msdn.microsoft.com/workshop/browser/mshtml/reference/ifaces/document2/write.asp

このサンプルでは、要素としてBSTRを持つSAFEARRAYに対して、
要素のBSTRをSysFreeString()した後、配列全体をSafeArrayDestroy()しています。

しかし、SafeArrayDestroy()の説明には、

> Safe arrays of variant will have VariantClear called on each member
> and safe arrays of BSTR will have SysFreeString called on each element.

とあり、BSTRを二重にSysFreeString()してしまうのではないかと思うのですが、
この解釈は間違いでしょうか?

今、類似のプログラムを作ったところSafeArrayDestroy()で落ちていて...

799 名前:デフォルトの名無しさん :2006/11/05(日) 02:54:35
memsetとZeroMemoryってZeroMemoryのほうは結局内部でmemset呼び出してるんだけど
実行の早さ的にはどっちのほうがいいのかねー

800 名前:デフォルトの名無しさん :2006/11/05(日) 02:57:01
関数呼び出しのコスト分memsetの方がいいんじゃね?

801 名前:デフォルトの名無しさん :2006/11/05(日) 02:58:18
もし本当にmemsetを呼び出してるだけなら
どんな糞なコンパイラでもZeroMemoryは
memsetにインライン化されて早さ的には同じ
移植性を考えるとmemsetを使用した方が良いな

802 名前:デフォルトの名無しさん :2006/11/05(日) 09:21:00
WS_OVERLAPPEDWINDOWがstyle指定されているWindowAとWindowBがあります。
ダイアログみたいに常にWindowBをWindowAの上に表示させたいです。
方法ありましたら教えてください。

803 名前:デフォルトの名無しさん :2006/11/05(日) 09:55:25
CreateDialog

804 名前:デフォルトの名無しさん :2006/11/05(日) 10:01:32
>>802
SetWindowPos

805 名前:デフォルトの名無しさん :2006/11/05(日) 11:10:06
CreateWindowEx() の弟9引数でWindowAを指定してWindowBを作成

806 名前:デフォルトの名無しさん :2006/11/05(日) 11:37:24
ありがとうございます。
WindowBのCreateWindowExの第9引数にWindowAを指定して、
WindowBがWM_KILLFOCUSを受け取ったら
SetWindowPos(WindowB, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
を実行するようにしたところ、常に前面に表示されるようになりました。

あとはダイアログみたいに、
背面のウィンドウへの操作を完全に無効にできればOKです。
現時点では移動などの操作ができてしまいます。

よろしくお願いします。

807 名前:デフォルトの名無しさん :2006/11/05(日) 12:46:24
EnableWindow(WindowA, FALSE);
でWindowAを無効にしたところ、目的の動作をするようになりました。
ありがとうございました。

無理矢理な感じは否めませんので、
もしもっと素直な方法をご存じな方いらっしゃいましたら
お願いします。

808 名前:デフォルトの名無しさん :2006/11/05(日) 14:22:24
ダイアログの複数のボタンがあり、特定のボタンにフォーカスがあるときだけ
カーソルキーでのフォーカス移動を無視させたいのです。
このようなときにはどうすればいいのでしょうか。

809 名前:デフォルトの名無しさん :2006/11/05(日) 14:41:21
少しは自分で調べろ

810 名前:デフォルトの名無しさん :2006/11/05(日) 15:00:30
>>806
つーかモーダルダイアログじゃだめなのか

811 名前:デフォルトの名無しさん :2006/11/05(日) 15:05:15
>>808
自分でやり方書いてるんだから、書いている通りやったらいいんじゃね?

812 名前:デフォルトの名無しさん :2006/11/05(日) 15:10:57
初心者はフックに思い至らない

813 名前:デフォルトの名無しさん :2006/11/05(日) 15:38:09
ウィンドウズはメモリ管理にガーベジコレクション使っているの?

814 名前:デフォルトの名無しさん :2006/11/05(日) 16:50:57
Advanced Windows 嫁
仮想メモリ→物理メモリへのマップを含めて、最終的には page 単位で管理されている。

ガベージコレクションは、メモリ管理APIを呼び出す側で実装ってところだな。

815 名前:デフォルトの名無しさん :2006/11/05(日) 22:22:04
>>799
ZeroMemoryってmemsetのマクロだよ
winbase.h→winnt.h

816 名前:デフォルトの名無しさん :2006/11/05(日) 22:43:33
ZeroMemoryはRtlZeroMemoryのマクロ。
んでRtlZeroMemoryはmemsetのマクロかもしれないし、
kernel32のRtlZeroMemoryかもしれない。

817 名前:デフォルトの名無しさん :2006/11/05(日) 23:03:26
kernel32じゃなくてntdll

818 名前:デフォルトの名無しさん :2006/11/05(日) 23:11:46
kernel32にもあるけど…

819 名前:デフォルトの名無しさん :2006/11/05(日) 23:48:43
少なくともうちのWinXPのkernel32.dllからはエクスポートされてない。
dependency walkerで確認

820 名前:デフォルトの名無しさん :2006/11/05(日) 23:54:48
本質的な問題ではないな

821 名前:デフォルトの名無しさん :2006/11/05(日) 23:54:52
Rtl系がkernelにあるなんて初耳だw

822 名前:デフォルトの名無しさん :2006/11/06(月) 00:13:45
kernel32のエクスポートテーブルに載ってるけど、実体はntdllっすね。スマソ

823 名前:デフォルトの名無しさん :2006/11/06(月) 00:14:50
いやこっちこそスマソ
確かにntdllへforwardしてるだけだが
> エクスポートされてない
ってのは明らかに嘘だった。
RtlFillMemory
RtlMoveMemory
RtlUnwind
RtlZeroMemory
の4つがあった

824 名前:デフォルトの名無しさん :2006/11/06(月) 00:43:20
結局RtlZeroMemoryとmemsetどっちがいいんだよ

825 名前:デフォルトの名無しさん :2006/11/06(月) 00:58:38
RtlZeroMemoryは(ユーザーモードアプリには)非公開ってことになってるんだから
たとえ実体はRtlZeroMemoryへの#defineにすぎなくてもZeroMemoryにしときなさい。

826 名前:デフォルトの名無しさん :2006/11/06(月) 07:39:59
なんでわざわざAPIで用意されてるんだろ。
memsetでええやん。

構造体の初期化は HOGE hoge = {0}; が楽だな。

827 名前:デフォルトの名無しさん :2006/11/06(月) 07:45:39
俺も疑問
全くの初心者には可読性もZeroMemoryの方が可読性が良い
とかそんな理由しか思いつかない

828 名前:デフォルトの名無しさん :2006/11/06(月) 08:39:36
memsetはinline展開されるよ

829 名前:デフォルトの名無しさん :2006/11/06(月) 12:45:27
CやC++の標準ライブラリを一切使わずに組むために、最低限の物は
APIでも用意してあるんでしょ。
エントリポイントから自分で書くときはCRTの初期化がされないから
なるべくAPIだけで済ませたいし、そもそもアセンブラだけで書く人とかは
CRTも利用できないし。

830 名前:デフォルトの名無しさん :2006/11/06(月) 13:40:02
質問です。

大きなファイルの一部を読み込むためにSetFilePointerを使用していますが、
実行に時間がかかり、ReadFileで読み飛ばしているのとあまり変わらないようです。
他に高速にファイルポインタを指定する方法はないでしょうか?

目的
・zipファイルの梱包ファイル名を列挙する
・超巨大なBMPファイル等の一部を表示する

現在使用している手法
・CreateFile("ファイル名", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
         NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
・SetFilePointer(ファイルハンドル, 相対アドレス, NULL, FILE_CURRENT);

比較対象
・Lhaz等のアーカイバは一瞬に近い速度でファイル名を列挙している
・動画再生ソフトのシークタイムはもっと早い

よろしくお願いします。

831 名前:デフォルトの名無しさん :2006/11/06(月) 13:49:43
本当にSetFilePointerの実行に時間がかかってるにか?

832 名前:デフォルトの名無しさん :2006/11/06(月) 13:50:15
>>830
SetFilePointerがReadFileと変わらないってことはないけどねー。何か
変なことしてるんじゃない?
FileMappingとか使えば速くなるかもね。



833 名前:デフォルトの名無しさん :2006/11/06(月) 13:52:32
・アーカイバは(おおよそ)データ先頭にアーカイブしたファイル一覧のテーブルを置いて高速化している
・動画のシークは部分的にオンメモリでやってるんじゃない? (結果的には FileMapping してるのかもしれんが)

834 名前:デフォルトの名無しさん :2006/11/06(月) 14:13:37
局所的なデータを読むのにSetFilePointer&ReadFileを繰り返して「遅
い」とか言っているんだと想像。
たとえば、SetFilePointer→ReadFileで20バイト読み→SetFilePointer
で12バイト後ろに→ReadFileで20バイト読み→SetFilePinterで12バイ
ト後ろに…、とか。


835 名前:デフォルトの名無しさん :2006/11/06(月) 14:47:40
>>830
FILE_FLAG_RANDOM_ACCESSとか指定してファイル開くのはどうだろ?

836 名前:デフォルトの名無しさん :2006/11/06(月) 14:54:15
あー、それだな

837 名前:デフォルトの名無しさん :2006/11/06(月) 14:55:22
バカかおまいら。834でFAだろこんなの。

838 名前:830 :2006/11/06(月) 14:56:34
多くのレスありがとうございます。
問題点を整理するため、次のようなテストコードを試してみました。

#include <windows.h>
int main( int argc , char *argv[])
{
  HANDLE hfile;
  DWORD buf, size, sized;
  int n;
  if(argc != 2)return 0;
  hfile = CreateFile(argv[1], GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, NULL);
  if(hfile == INVALID_HANDLE_VALUE)return 0;
  size = GetFileSize(hfile, NULL);
  for(n=0; n<300; n++)
  {
    SetFilePointer(hfile, (size-4)*n/100, NULL, FILE_BEGIN);
    ReadFile(hfile, &buf, 4, &sized, NULL);
  }
  CloseHandle(hfile);
  return 0;
}


839 名前:デフォルトの名無しさん :2006/11/06(月) 15:00:21
>>834
おっしゃるとおりです。

1回のSetFilePointerで時間がかかっているわけではないようです。申し訳ありませんでした。
zip形式のファイル構造を調べなおしてみましたが、データとファイル名のセット以外に
ファイルの末尾にファイル名の一覧を記述しておく領域が加えてあることが多いようです。
アーカイバはその領域を一括して読んでいるんだと思います。

お手数をおかけしました。

840 名前:デフォルトの名無しさん :2006/11/06(月) 18:08:04
クリックしたらSendMessage使ってWM_PAINTメッセージを送る、
みたいな感じにしたいのにうまくいかないのはなぜ?

SendMessage(hwnd, WM_PAINT, wParam, lParam);

・ウィンドウ起動時ではWM_PAINTのところはうまくいってる。
・他のメッセージはちゃんと送れる。(SendMessage(hwnd, WM_DESTROY, wParam, lParam);とか)


841 名前:デフォルトの名無しさん :2006/11/06(月) 18:11:39
InvalidateRectするっきゃナイト

842 名前:デフォルトの名無しさん :2006/11/06(月) 18:23:25
WM_PAINT 内部で呼んでる BeginPaint() で
再描画に必要な領域を切り出したうえで hDC をくりだす。
単に WM_PAINT を Send しただけでは、
過去に描画済みで再描画の必要がないと判断し、 hDC を NULL にしてしまう。

InvalidateRect() で描画済み領域を忘れるようにすれば桶

最も WM_PAINT の先頭・末尾で BeginPaint()/EndPaint() だけやっといて、
描画コード内の hDC は別のを(GetDC とかね)使っているなら WM_PAINT を Send しただけでも
再描画するかもしんない

843 名前:デフォルトの名無しさん :2006/11/06(月) 19:28:00
わかりやすい説明ありがとう。InvalidateRectを使ってみた。
でもできない…

画像ファイルを読み込みウィンドウに表示↓
ボタンを押すと画像に特定の処理をする↓
その画像をファイルとして上書き保存↓(ここまで成功したのは確認済み)
InvalidateRect()↓

俺の予想ではここからWM_PAINTが自動的に発生し、上書きされた画像を
表示してくれるはずなんだけどできない。
一応InvalidateRect()のあとにSendMessageも入れといたけどできない。

オラに力をわけてくれ

844 名前:デフォルトの名無しさん :2006/11/06(月) 19:29:31
>>843
そこで再描画したいなら、InvalidateRectしてUpdateWindow()
それでもダメならプログラムのバグ。

845 名前:デフォルトの名無しさん :2006/11/06(月) 19:31:30
>>843
ちゃんとWM_PAINTで毎回画像ファイル開きなおしてるか?

846 名前:デフォルトの名無しさん :2006/11/06(月) 19:33:26
>>843
そうそう InvalidateRect() は 再描画の予約だけで、
メッセージループが暇になった隙をねらって実際の WM_PAINT が配送される。
即時反映させたかったら、>>844 の通り UpdateWindow() を発行するんだ

847 名前:デフォルトの名無しさん :2006/11/06(月) 19:54:31
なるほど。ありがとう。でもできない…
InvalidateRectしてすぐUpdateWindowしたけど無理でした…

848 名前:デフォルトの名無しさん :2006/11/06(月) 19:55:11
何が無理なんだかさっぱりわからん。
ただの>>847のバグだろそりゃ。

849 名前:デフォルトの名無しさん :2006/11/06(月) 19:57:15
もしかして、他アプリを操作しようとしている?
まーとにかくもう少し情報がないと・・・

それはともかくとして
>>840
>・他のメッセージはちゃんと送れる。(SendMessage(hwnd, WM_DESTROY, wParam, lParam);とか)
WM_DESTROY 送っちゃダメだよ・・・w

850 名前:デフォルトの名無しさん :2006/11/06(月) 20:03:36
ただのバグっぽいね。助言くれた人ありがとう。
細かいところ見直して出直します

851 名前:デフォルトの名無しさん :2006/11/06(月) 20:24:18
なんでもかんでも SendMessage で済まそうとしているとこみると
潜在的なバグが他にもありそうだな…

問題を切り分けするのも技術のうちだぞ。
窓のサイズを変えてもちゃんと加工前の画像が表示できているか? とか
加工後のファイルをペイントで確認してみる とか

852 名前:デフォルトの名無しさん :2006/11/07(火) 01:18:02
リストビューに垂直スクロールバーが出るくらい項目を追加して、
ある項目をクリック→ホイールでその項目が見えないくらいまでスクロール→何故か、クリックした項目までジャンプ
ListView_EnsureVisibleを使ったように最初にクリックした項目が強制的に表示されてしまいます。
これはなにかのメッセージが呼ばれてListView_EnsureVisibleしてるのでしょうか?
勝手にスクロールされたくないのですが、どうすればいいのでしょうか?

853 名前:852 :2006/11/07(火) 02:23:36 ?2BP(0)
自己解決しました。
WM_MOUSEWHEELメッセージを見つけました。これをフックすればなんとかなりそうです。


854 名前:デフォルトの名無しさん :2006/11/07(火) 08:23:32
ホイールでスクロール中に、勝手に表示位置が戻ったら非常に困ると思うのだが。
本当に上下ホイール以外の操作は一切していないのか?

855 名前:デフォルトの名無しさん :2006/11/07(火) 08:33:35
俺のマウス、インテリセンスの誤爆なのかわからんけど、不意にホイール動作しやがりますよ。
意識してホイール動作させてるときは問題ないんだけどねぇ…

856 名前:デフォルトの名無しさん :2006/11/07(火) 09:53:52
>>855
ホイールが中途半端な位置で止まっているだけでは?
クリック感のあるホイールが中途半端な位置で止まっていると
何かの拍子で本来の停止位置まで動くことは多いが。

857 名前:デフォルトの名無しさん :2006/11/07(火) 11:35:38
プリンタに出力された内容を、キャッチしてそまんまビットマップ化するソースかツールありませんか?

858 名前:デフォルトの名無しさん :2006/11/07(火) 11:52:44
プリンタドライバ固有のプロパティ画面を開くAPI教えて下さい。

859 名前:デフォルトの名無しさん :2006/11/07(火) 12:26:10
DocumentProperties


860 名前:デフォルトの名無しさん :2006/11/07(火) 13:36:01
FindFirstFileを使うと
1番目と2番目に.と..が来るんですが。
これはなんですか。

861 名前:デフォルトの名無しさん :2006/11/07(火) 13:38:13
カレントディレクトリと親ディレクトリ

862 名前:デフォルトの名無しさん :2006/11/07(火) 13:39:47
FindFirstFileしたパターンのディレクトリ自身とそのディレクトリの親ディレクトリ

863 名前:デフォルトの名無しさん :2006/11/07(火) 13:48:25
なるほど。
dirしたときに出てくる奴だったのか。
サンクスです。


864 名前:デフォルトの名無しさん :2006/11/07(火) 14:17:41
win95以降からはじめた口かね

865 名前:デフォルトの名無しさん :2006/11/07(火) 15:34:57
マウスの動かないようにするAPIを教えてください

866 名前:デフォルトの名無しさん :2006/11/07(火) 18:06:00
SetCursorPos

867 名前:デフォルトの名無しさん :2006/11/07(火) 18:28:04
>>864
だからなんなんですか。

868 名前:デフォルトの名無しさん :2006/11/07(火) 20:01:35
>>865
ClipCursor

869 名前:デフォルトの名無しさん :2006/11/07(火) 21:26:06
拡大鏡のようなことをしたいんですが、一般的にStretchBltとビットマップのポインタ操作とではどっちが高速なのでしょうか。
StretchBltがビデオドライバ(とビデオチップ)の支援を受けられるのであればいいのですが‥‥

870 名前:デフォルトの名無しさん :2006/11/07(火) 21:26:39
ちなみに倍率は整数倍のみです。

871 名前:デフォルトの名無しさん :2006/11/07(火) 22:06:08
>>869
ttp://www.sun-inet.or.jp/~yaneurao/intensive/diw1.html

872 名前:デフォルトの名無しさん :2006/11/07(火) 23:34:28
質問です

親ウィンドウのwinprocとダイアログのdlgprocの間でデータのやりとりをしたいのですが
グローバルオブジェクトを仲介する以外に良い方法はないでしょうか?

アドバイスをお願いします

873 名前:デフォルトの名無しさん :2006/11/07(火) 23:45:52
>>872
ウィンドウが作られたとき、必要な領域をnewで確保し、そのポインタをSetPropで関連付けておく。
deleteとRemovePropも忘れずに。

874 名前:デフォルトの名無しさん :2006/11/08(水) 00:37:37
>>872
DialogBox/CreateDialogではなく、DialogBoxParam/CreateDialogParamを使う。
親から子へ、何らかの構造体かクラスのポインタを渡せばいい。
勿論newなどで動的に確保するのでもそうでなくとも、そのオブジェクトの有効期間に気を使う必要がある。


875 名前:デフォルトの名無しさん :2006/11/08(水) 01:58:55
GetWindowText、GetWindowTextLengthってキャプションが長すぎると失敗したりします?

VBのテキストボックスの文章を取得したいのですが、
とりあえずテキストボックスのハンドルを取得するところまではできました。

それで
Text1Len = GetWindowTextLength(Text1Handle)
とやったのですが、0になってしまいます。

Spy++で Text1Handle と 目的のテキストボックスのハンドルが一致する事と、
テキストボックスのウィンドウキャプションに文章が入っている事は確認しているのですが…。

876 名前:デフォルトの名無しさん :2006/11/08(水) 02:18:00
>>875
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_getwindowtext.asp

877 名前:デフォルトの名無しさん :2006/11/08(水) 02:29:08
>>876
ありがとうございます。

>ただし、他のアプリケーションのコントロールのテキストを取得することはできません。
あはは…。
素直にSendMessage使います。お騒がせしました。

878 名前:869 :2006/11/08(水) 08:03:36
>>871
ありがとうございます。
でもStretchBltの情報はないのですね。これは実際にコード組んで比較するしかなさそう・・

879 名前:デフォルトの名無しさん :2006/11/08(水) 11:22:15
>>878
1.GetDeviceCaps関数のRASTERCAPSで、ビデオカードが対応してるか確認。
2.StretchBlt関数とポインタ操作による比較を行う。
3.VGAがOFFの、SAFEモードで立ち上げる。
4.StretchBlt関数とポインタ操作による比較を行う。
5.比較結果を見て(゚Д゚)ウマー

880 名前:デフォルトの名無しさん :2006/11/08(水) 11:41:24
StretchBltでの拡大は環境によってバイリニアフィルタがかかったり、
かからなかったりするんだよね。プログラマにはその制御ができない。
ビデオカードのドライバ依存。

881 名前:デフォルトの名無しさん :2006/11/08(水) 11:58:24
>>880
SetStretchBltModeで制御できたような希ガス

882 名前:デフォルトの名無しさん :2006/11/08(水) 12:25:52
とりあえずDIBのStretchBltで組んでみて、
遅かったら改めて考えてみる、で良いと思う。

883 名前:デフォルトの名無しさん :2006/11/08(水) 12:31:23
>>881
それは縮小するときの設定で、拡大は設定できないんだよ。
拡大はビデオカードのドライバの気分次第。

884 名前:デフォルトの名無しさん :2006/11/08(水) 13:09:02
>>879
画面のプロパティからハードウェアアクセラレーション切ったらダメなん?

885 名前:デフォルトの名無しさん :2006/11/08(水) 15:49:05
若干スレ違いかもしれないですが…開発環境これなものでここで聞きます。
IPアドレスが、グローバルかローカルかを判別する方法ってありますか?
APIやWMIなんかも調べてみたものの、わかりませんでした。
ググってたら判定するフリーウエアみつけたけど、どうやってるのかな…

886 名前:デフォルトの名無しさん :2006/11/08(水) 15:53:24
「プライベートIP」でググれ

887 名前:デフォルトの名無しさん :2006/11/08(水) 15:54:27
ネットマスク+クラスA〜Cプライベート

888 名前:885 :2006/11/08(水) 16:07:49
うー、つまり自分でマスクして範囲で見るしかないって事ですか。
わかりました…

889 名前:デフォルトの名無しさん :2006/11/08(水) 16:25:46
マスクも使えないやつにapi使えるのか?

890 名前:885 :2006/11/08(水) 17:08:11
>>889
は?w

891 名前:デフォルトの名無しさん :2006/11/08(水) 17:18:00
変な流れにならないうちに次の方どうぞ

892 名前:デフォルトの名無しさん :2006/11/08(水) 18:37:48
名コテの多いスレだなw

893 名前:デフォルトの名無しさん :2006/11/08(水) 19:30:57
>開発環境これ
誰かツッコめよw

894 名前:デフォルトの名無しさん :2006/11/08(水) 22:04:33
>>852
それはリストビューの仕様
項目選択直後にマウスホイールでスクロールすると必ずそうなる

895 名前:デフォルトの名無しさん :2006/11/08(水) 23:29:16
先に一時的に環境変数を付加してから、
プログラムを起動するランチャーを開発したいと思います。

そこでShellExecuteExでSEE_MASK_DOENVSUBSTを
使用するんじゃないかという所まではたどり着いたのですが
lpDirectoryもしくはlpFileメンバに環境変数を指定とあって意味不明です。
lpDirectoryは作業ディレクトリ、lpFileは実行ファイルとあるので
何をどうすればよいのか分からなくなりました。

どうすれば環境変数を一時追加できるのでしょうか。

896 名前:デフォルトの名無しさん :2006/11/09(木) 00:46:46
>>895
それは、lpDirectoryやlpFileのパス名の中で %JAVA_HOME% という感じで
環境変数を参照できるってこと。

正解は、CreateProcessのlpEnvironment


897 名前:デフォルトの名無しさん :2006/11/09(木) 00:53:12
最近Windows Vistaを入れて遊んでいるのですが、
Win32 API(CreateWindow)で作ったボタンとかプログレスバーの形状が
Windows 95風のGUIのままなのですが、新しいGUIで表示する方法はありませんか?
(Windows XPのLunaでもプログレスバーは同様に古いままでした。)

FireFoxとかはちゃんと新しい表示になっているのですが、これが.NETで書かれている
とは思えないのでWin32 APIで表示する方法があると自分は思うのです。

どなたか知っている方がいらっしゃたら教えてください。

898 名前:デフォルトの名無しさん :2006/11/09(木) 01:13:25
>>897 つ Using Windows XP Visual Styles

899 名前:デフォルトの名無しさん :2006/11/09(木) 06:45:54
>>896
ありがとう。

900 名前:デフォルトの名無しさん :2006/11/09(木) 08:09:03
タスクバーを含まない画面のサイズをGetSystemMetrics(SM_CXMAXIMIZED または SM_CYMAXIMIZED)で
取得して中央に表示するサンプルとかをみかけますが、このSM_CXMAXIMIZED または SM_CYMAXIMIZEDで
取得できる値はタスクバーにちょっと被りませんか?
タイトルバーのないウインドウのサイズを↑でとれた値で設定すると、(0,0)座標からセットしているのに、
少しタスクバーと被ります。
Windows2003(XPStyle)、WindowsXP(XPStyle)、Windows2000、Windows98のどれでためしてみても、
少しタスクバーと被っているのです。
この被っているサイズってなんなのか教えてもらえませんか。


901 名前:898 :2006/11/09(木) 08:23:50
>>898
ありがとうございます。

902 名前:デフォルトの名無しさん :2006/11/09(木) 09:00:01
>>900
ウィンドウ周囲のボーダー分じゃね?最大化すると普通見えなくなるし。
後、中央表示するならDS_CENTERかGetMonitorInfoで計算した方がいい。

903 名前:デフォルトの名無しさん :2006/11/09(木) 10:58:51
>>900
おっしゃるとおり、ボーダー分が被っていました。ありがとうござました。

904 名前:デフォルトの名無しさん :2006/11/09(木) 11:05:18
プリンタのデバイスコンテキストに書き込むときメモリをかなり使うようです。
BitBltやStrechDraw(こっちはなるべく使わないようにしてます)を使って書き込んでますが、
減色して書き込むと良いのかな、と思いました。
減色ってどうやるんでしょう?

905 名前:デフォルトの名無しさん :2006/11/09(木) 11:12:51
プログラミング以前にグラフィック関連の基礎を身につけましょう。
用語を知らないとぐぐることもできません。

906 名前:デフォルトの名無しさん :2006/11/09(木) 11:25:35
で、ググル用語は?

907 名前:デフォルトの名無しさん :2006/11/09(木) 12:26:11
現職

908 名前:デフォルトの名無しさん :2006/11/09(木) 18:29:57
PolyLineを指定した矩形の中だけ描画する方法教えてください。

909 名前:デフォルトの名無しさん :2006/11/09(木) 18:37:48
フロッピードライブを取得したいのですが、GetDriveTypeだと、
MOドライブやUSBメモリ等との区別が付きません。
どのようにしたら良いでしょうか?

910 名前:デフォルトの名無しさん :2006/11/09(木) 18:39:49
PolyLineを指定した矩形の中だけ描画すればいいとおもうよ

911 名前:デフォルトの名無しさん :2006/11/09(木) 18:42:09
>>908
CreatePolyPolygonRgn

912 名前:デフォルトの名無しさん :2006/11/09(木) 18:51:37
>>909
にゃんにゃお にゃんにゃん にゃんにゃんにゃ
(DeviceIoControl関数と、IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBERで判定)

913 名前:デフォルトの名無しさん :2006/11/10(金) 00:00:46
Sleep使うと子プロセスが遅くなるって本当ですか?

914 名前:デフォルトの名無しさん :2006/11/10(金) 01:54:52
プロセスじゃなくスレッドが一時的に止まる。
普通止まっても構わない局面でしか使わないけどね。

915 名前:デフォルトの名無しさん :2006/11/10(金) 02:05:21
あ、子プロセスの話か。914は忘れて。
子プロセスが遅くなることはない気がするが。

916 名前:デフォルトの名無しさん :2006/11/10(金) 02:07:51
Windowsプログラミング初心者です。

コンソールプログラムから、スレッドでWinMainをよんで窓をポップアップさせて図を
描いてます。

ここで、パラメータをコンソールから打ち込むので、自動でコンソールのほうをアクティブにして
画面のTOPに持って行きたいんですが、コンソールのウィンドウ・ハンドルが分かりません。

コンソールのウィンドウ・ハンドルはどうやったら分かるでしょうか?
もしくは望みの結果をどうやったら実現できるでしょうか?

ご教授ください。 できれば3行で。

917 名前:デフォルトの名無しさん :2006/11/10(金) 02:19:25
>>916
http://support.microsoft.com/kb/Q124103/

918 名前:デフォルトの名無しさん :2006/11/10(金) 09:51:03
>>915
子プロセスと通信してるとかだったりして

919 名前:デフォルトの名無しさん :2006/11/10(金) 11:18:00
>>917
dクス! でも 0 しかかえってコネーwww もうちょっとがんばる

920 名前:デフォルトの名無しさん :2006/11/10(金) 12:19:55
アクティブでないウインドウ上のテキストボックス、ボタン間のフォーカスを
こっそり動かしてあげるにはどうするればいいでしょうか。
SetFocusで設定したり、WM_SETFOCUSとか送ると、
フォーカスが動いたタイミングでアクティブに成ろうとします。

921 名前:916 :2006/11/10(金) 12:39:51
>917がうまくいきません (><

・コンソールのタイトルの変更・復帰は出来てます。
・コンソールアプリから開いた普通のWin窓も、クラスをちゃんと指定すれば正しい
ハンドルが帰ってきます。

でもコンソールのハンドルはNULLしかかえって来ません。クラスはサンプル通り
NULLを突っ込んでます。

コンソールのクラスがNULLじゃないんじゃないかと思うんですが、
どうやったら分かりますか? 
API検索のコツがまだつかめなくて見つかりません(><

あと使用言語はIntelFortranです。CでのAPIが分かれば大体はこちらで対応できます。


922 名前:デフォルトの名無しさん :2006/11/10(金) 12:42:10
半角英数と全角英数をごっちゃにして使われると読みにくいな

923 名前:デフォルトの名無しさん :2006/11/10(金) 12:56:24
コンソールのクラスがNULLなんてことはたぶん無い 普通ConsoleWindowClassだったと思う 
そもそもFindWindow判ってないみたいだからちゃんと調べれ(うちのMSDNだと日本語版にNULL指定について書いてないけど)
クラス調べるならGetClassName

てか>>916でOK

924 名前:デフォルトの名無しさん :2006/11/10(金) 13:01:43
MS公式にもこんなこといっていたのか。
以前、9xでコンソールのウインドウハンドル取りたかったとき、自分でこの方法思いついたんだけど。

そのときにちょっと変な挙動に悩まされた。

プロセスが起動してすぐに、FindWindow()を利用する方法でウインドウハンドルを取ろうとしても、
うまくハンドルが取れなかった。

とりあえず適当にSleep()をはさんだら、問題なかった。

何故かは分からない。
プロセスが起動して、main()関数に至るまでには、まだコンソールが開いていないのだろうか。

925 名前:デフォルトの名無しさん :2006/11/10(金) 13:07:19
916じゃなくて>>917だね スマソ

926 名前:デフォルトの名無しさん :2006/11/10(金) 16:21:18
>>924
CreateProcess 直後は窓出来上がってないみたいだね。
同じく Sleep で適度に遅延かけてから取得したけど

927 名前:デフォルトの名無しさん :2006/11/10(金) 19:17:33
コントロールパネルの「プリンタとFAX」をオープンするAPIを教えて下さい。

928 名前:デフォルトの名無しさん :2006/11/10(金) 19:27:46
にたような質問をどこかで見たような気がする。
そこに答えが書いてあったような気もする。

929 名前:デフォルトの名無しさん :2006/11/10(金) 20:26:31
CreateProcess()で"c:\windows\system32\control.exe printers"をキックる

930 名前:916 :2006/11/11(土) 00:49:46
>>923-926
dクスっす!何とかできました。
>>923
このAPIに限らずコンソールがらみのMSAPI文書では、コンソールのクラスに軒並み
NULLが入っています。ここで聞かなかったら永久に分からなかったかも。

でもConsoleWindowsClassを最初定数だと思って混乱した(><
検索してもそんな文字列引っかからないし。
文字定数で与えたらバッチ・グーだったw

あとGetClassNameは引数にハンドルがあって使えませんでした!w

931 名前:デフォルトの名無しさん :2006/11/11(土) 01:45:23
タイトルをユニークにすればクラス名はNULLでも成功するはずなんだけど...
そのためのタイトルの変更だし。
クラス名NULLでハンドル取得できずにクラス名指定で取得できたんだとしたら
FindWindowの仕様に反しているように思える。

完成したぽいけど何か腑に落ちないw

932 名前:デフォルトの名無しさん :2006/11/11(土) 02:35:05
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getconsolewindow.asp

933 名前:916 :2006/11/11(土) 02:37:25
>>931
そうなんですか(´・ω・`) 
改めて動いているコードをいじって試してみましたがだめでした。

Fortran用のラッパーが入っているので挙動が違うのかも。
文字列(変数)を直接渡す形になっているので、NULL文字列を送ってみたんですが・・・

Cの場合ポインタを送ることになっているので、ヌルポを送ることになるんですかね?
Fortran用のラッパーに関してはインターフェース部に変数の型が与えられているだけなので
この辺の例外に対する対処法が分かりません(><;


とりあえず、こんな感じでうまくいきます、ユニークタイトルはサンプルにあわせてます。

ipid = GetCurrentProcessId()
itic = GetTickCount()
WRITE(tmp, '(a, i10, a, i10, a)') 'Uho!', ipid, '/', itic, CHAR(0)
iretb = GetConsoleTitle(buff, 1024)
iretb = SetConsoleTitle(TRIM(tmp))
CALL Sleep(40)
hDOS = FindWindow("ConsoleWindowClass", TRIM(tmp))
iretb = SetConsoleTitle(buff)
iretb = SetForegroundWindow( hDOS )


934 名前:デフォルトの名無しさん :2006/11/11(土) 03:07:19
あーラッパが文字列しか受け付けないのか。
Fortranは全く知らないけどNULLが渡ってなかっただけかもね。
別にクラス名書いても、より厳格な検索が出来るだけなので問題ないです。
オツカレサン

935 名前:916 :2006/11/11(土) 03:17:51
>>932
ありがとうございます。でもIntelの定義ファイルには存在してませんでした(><;

というか最初に"Console"の文字列でインターフェースファイル全部を検索して
コンソールのハンドルを返しそうなのを調べたけど無かったんです!(><;



でも、引数が無くて整数を返すだけのAPIのようだから、いま自分でインターフェースを
みようみまねで書いて直接APIを叩きに行って、うまくいきました(><;

丸二日の苦労が一瞬で解決しました(><; インテルの馬鹿っ!(><; もう嫌っ!
中の見えないサブルーチンを呼ぶのイヤッ!!

INTERFACE
FUNCTION GetConsoleWindow()
USE ifwinty
INTEGER (HANDLE) :: GetConsoleWindow
!DEC$ ATTRIBUTES DEFAULT, STDCALL, DECORATE, ALIAS:'GetConsoleWindow' :: GetConsoleWindow
END FUNCTION
END INTERFACE



936 名前:デフォルトの名無しさん :2006/11/11(土) 05:11:52
>>935
GetCosoleWindow()使っていいなら最初から言えばいいのに。
動作環境は2k以上でおkですって。

あと、SetConsoleTitle()で変更する前に、
まずFindWindow()を使って、本当にそのウインドウタイトルが存在しないのか確かめたほうがいいと思う。

937 名前:デフォルトの名無しさん :2006/11/11(土) 06:11:13
逆にWin9xでも動かすなら、クラス名はNULLじゃなければいけない。
DOS窓のクラス名は"ConsoleWindowClass"ではなく"tty"なので。

938 名前:デフォルトの名無しさん :2006/11/11(土) 16:00:35
C#をどう思いますか?
あんなの言語じゃないと思う、やっぱりWin32API使った方がかっこいいよな!!! to オマエラ

939 名前:デフォルトの名無しさん :2006/11/11(土) 16:06:43
C#は言語だと思う。Win32はAPIであって言語じゃないし、汚いAPIだと思う。 by オマエラ

940 名前:デフォルトの名無しさん :2006/11/11(土) 16:26:11
オマエラさん、こんにちは。
今日は何の御用でしょうか?
>ものを買う
 ものを売る

941 名前:デフォルトの名無しさん :2006/11/11(土) 16:27:22
C#でもWin32APIは呼び出せるわけで…

942 名前:デフォルトの名無しさん :2006/11/11(土) 16:43:05
MCIでソフトウェアごとの音量調整ってできる?


943 名前:デフォルトの名無しさん :2006/11/11(土) 16:47:23
Vistaならできる

944 名前:デフォルトの名無しさん :2006/11/11(土) 16:50:53
>>943
手軽にmp3再生できて音量調整もできる
なんて便利なものはない?

945 名前:デフォルトの名無しさん :2006/11/11(土) 17:06:26
・自前でデコードしてdirectsoundで再生
・directshowでフィルタグラフいじってaudio rendererに音量設定

後者のほうがトータルのコード量は少なくてすむが難易度は高い

946 名前:デフォルトの名無しさん :2006/11/11(土) 18:54:40
>>945
前者にしとく。


947 名前:916 :2006/11/11(土) 19:29:56
>>936
いや、そういわれてもwwwww困ります(><;
こっちは初心者でWIN32 API知らないし。

一応、Intelのコンパイラで提供されているWin32APIのインターフェースファイル全部に
検索かけてConsoleがらみのAPIの名前には目を通したけど、たまたまそれは載ってない
APIだったからその存在を知らなかった。

そもそも皆さんはどうやってWin32APIを学んだの?
オンラインヘルプを1個1個見ていくの?

数値計算のライブラリなら解きたい内容が分かっていれば目次から調べようがあるけど、
OSのAPIなんてカテゴリー分けもちんぷんかんぷんでどこから見ていいかも分かりません
(><;


948 名前:デフォルトの名無しさん :2006/11/11(土) 19:30:55
リファレンスを全部記憶するんだよ

949 名前:デフォルトの名無しさん :2006/11/11(土) 19:34:25
俺は翔泳社のAPIバイブルを一度全部読んだな。
暗記するわけじゃないが、どんなAPIが存在するのかくらいは
だいたい覚えている。後は使うときに検索。

950 名前:デフォルトの名無しさん :2006/11/11(土) 19:45:36
WinUser.h、WinGDI.h、CommCtrl.hは全部暗記した

951 名前:デフォルトの名無しさん :2006/11/11(土) 19:55:38
ochinchin.h を manko.cpp に #include したのに童貞が捨てられません

952 名前:デフォルトの名無しさん :2006/11/11(土) 20:08:11
慣れてくると、こういう機能の関数があるかどうかはMSDNの
このカテゴリーを調べれば間違いないとか、そういう調べ方が
できるようになる。

953 名前:デフォルトの名無しさん :2006/11/11(土) 20:53:54
>>951
bind

954 名前:デフォルトの名無しさん :2006/11/11(土) 21:03:04
doutei属性外したいだけならfuhzoku_cast<siroutoDT>でいいじゃん

955 名前:デフォルトの名無しさん :2006/11/11(土) 21:20:48
フォルダ関連の便利な関数がShellAPIに沢山あるよ
最近知ってかなり悔しかった

956 名前:デフォルトの名無しさん :2006/11/11(土) 21:30:19
ショートカットのリンク探しくらいしか使ったことないや、俺も調べてみよ

957 名前:デフォルトの名無しさん :2006/11/11(土) 22:10:10
>>951 DestroyDoutei(hDoutei);

958 名前:デフォルトの名無しさん :2006/11/11(土) 22:12:17
ERROR_AITE_NOT_FOUND

959 名前:デフォルトの名無しさん :2006/11/11(土) 22:29:34
VIP_DE_YAREYA_HAGE

960 名前:デフォルトの名無しさん :2006/11/11(土) 23:18:46
おもしろい!!さすがLost32APIスレだ!

961 名前:デフォルトの名無しさん :2006/11/11(土) 23:37:13
>>945
後者のほうが楽じゃない?
IGraphBuilderでレンダリング。取り出したIBascAudioでボリューム設定。

962 名前:デフォルトの名無しさん :2006/11/11(土) 23:38:10
お前ら戻り値のチェックもGetLastErrorもせんでよく平気だな。
気付かぬうちにうほっされてても知らんぞ。

963 名前:デフォルトの名無しさん :2006/11/11(土) 23:46:01
GetDCPenColorを使うとエラー(外部参照 LINK2001)と警告(4039)が出るんだけど、どうして??

964 名前:デフォルトの名無しさん :2006/11/12(日) 00:00:58
>>961
難易度が高いより勉強する内容が多い、のほうが正しかったかなあ。
一度分かってしまえば楽勝なんだが。

965 名前:デフォルトの名無しさん :2006/11/12(日) 01:41:44
今、ダイアログにチャイルドウインドがあるとします。
ボタンを押すと、このチャイルドウインドがポップアップにしたいです。
(つまり親ダイアログを動かしても、付いてもこないし、親ダイアログより大きくリサイズも可能)
で、もう一回ボタンをおすと、元のチャイルドになります。(親ダイアログを移動させると付いてくる)

ポップアップにするときは
SetWindowLong(hWnd, GWL_STYLE, WS_POPUP | WS_VISIBLE);
SetParent(hWnd, NULL);

戻すときは
SetParent(hWnd, GetSafeHwnd());
SetWindowLong(hWnd, GWL_STYLE, WS_CHILD | WS_VISIBLE);

見たいにやると一応、動くのです。

質問は「WS_CHILDをセットする前に親をNULLにしているのですが、これは無駄な心配ですか?」です。
やっぱり一瞬でも親ウインドがある状態でWS_CHILDをセットするのは危険ですか?
また、逆もそうでしょうか?

これらを2個のAPIではなく、一撃でやる方法はありますでしょうか?

966 名前:デフォルトの名無しさん :2006/11/12(日) 08:38:30
>>965
SetParentの説明と順番が逆になってる気がする

ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_setparent.asp
hWndNewParent パラメータに NULL を指定する場合は、SetParent 関数を
呼び出した「 後 に 」WS_CHILD フラグをクリアし、WS_POPUP フラグをセットしなければなりません。
逆に、デスクトップの子ウィンドウに対して hWndNewParent パラメータに NULL 以外の値を
指定して SetParent 関数を呼び出す場合は、関数を呼び出す「 前 に 」 WS_POPUP フラグを
クリアし、WS_CHILD フラグをセットしておかなければなりません。

967 名前:デフォルトの名無しさん :2006/11/12(日) 09:31:22
>>944
DSPack。Delphiだけど

968 名前:デフォルトの名無しさん :2006/11/12(日) 10:37:02
>>963
ライブラリをリンクしてないから

969 名前:デフォルトの名無しさん :2006/11/12(日) 10:57:52
msimg32.dllにリソースとして含まれている、ってのがいまいちよく判らん。
VS2005のリンカ見てると、普通にgdi32.libで解決しているように見える。

970 名前:デフォルトの名無しさん :2006/11/12(日) 11:39:52
>>963
DCPen系はWin2k以降のみに対応してるからかな?


971 名前:デフォルトの名無しさん :2006/11/12(日) 13:36:57
CD-Rがファイナライズされているかどうか調べるにはどうしたら良いですか?

972 名前:デフォルトの名無しさん :2006/11/12(日) 15:26:27
ファイルを読み込んで内容をアプリ側に渡すDLLを作ろうとしているのですが、
アプリ側が確保したメモリに直接書き込むとして、
アプリ側がnewを使ってヒープから確保したメモリのアドレスに
DLLは正常にアクセスできるのでしょうか。
(778を読む限り大丈夫そうな気がしたけど・・・
GlobalAlloc()とか使うのとは違うのでしょうか?

あと構造体ポインタをアプリからDLLに渡した場合
(同じヘッダファイルを読んで共通の構造体定義を使うとして)、
コンパイラが違うとアラインメントの違いなどで
ずれてしまうこともあるでしょうか。

宜しくお願いします。

973 名前:デフォルトの名無しさん :2006/11/12(日) 15:30:59
>>972
作ろうじゃなくて、サンプル作ってみて試してみたらいいじゃん。
自分で少しはやってみろって。

974 名前:デフォルトの名無しさん :2006/11/12(日) 15:41:13
>>972
>アプリ側がnewを使ってヒープから確保したメモリのアドレスにDLLは正常にアクセスできるのでしょうか。
ttp://msdn.microsoft.com/library/en-us/dllproc/base/about_dynamic_link_libraries.asp

>コンパイラが違うとアラインメントの違いなどでずれてしまうこともあるでしょうか。
ある。コンパイラが同じでも設定によって変わる。

975 名前:デフォルトの名無しさん :2006/11/12(日) 15:47:55
>>973
そんな役に立たないレスならレスしなきゃいいじゃん。
少しは黙っていればいいのに。

976 名前:972 :2006/11/12(日) 16:02:22
>>973
すみません、メモリ管理とかはあまり知らなくて色々謎だらけで、
試してうまくいってもそれで理想的(異なるコンパイラなどの条件でも動くものなのか)
なのかわかりそうになかったので先走って質問してしまいました。

>>975
ありがとうございます、DLLは呼び出したプロセス側の
スタック領域と仮想アドレス空間を使うからnewで大丈夫ということですね。
(Susie Plug-inとかだとmalloc()でなくLocalAlloc()だったから
どうなんだろうと思ってましたが、調べた感じではLocalAlloc()は16bit時代の
遺物みたいですね

977 名前:デフォルトの名無しさん :2006/11/12(日) 16:25:44
>>974(´・ω・)カワイソス

978 名前:972 :2006/11/12(日) 16:38:19
;`;:゙;`(;゚;ж;゚; )ブッフォ
すみません、

誤 >>975
>>974
でしたw 975のどこを読んで「〜〜ということですね」なのか
想像して雪見だいふく吹いた

979 名前:デフォルトの名無しさん :2006/11/12(日) 17:18:36
現実生活で誤レスしなければ大丈夫だ。

980 名前:デフォルトの名無しさん :2006/11/12(日) 17:26:31
経験者の言葉には重みがあるな

981 名前:963 :2006/11/12(日) 21:09:28
>>968-970
レストンクス
ライブラリをリンクってどうやるんですか?設定をいじるって感じになるんでしょうか?
そもそもヘッダーファイルをインクルードして、使えないって変じゃないすか?
ちなみにVC6.0++ WindowsXPです。

982 名前:デフォルトの名無しさん :2006/11/12(日) 21:20:58
「意味不明な物なんか使えるかボケ」て言われてんだよ

983 名前:デフォルトの名無しさん :2006/11/12(日) 21:40:24
ヘッダーだけでよかったらソースさえいらないんだよ

984 名前:デフォルトの名無しさん :2006/11/12(日) 22:46:34
>>981
そもそもコンドームがあるのに
セックスできないって変じゃないですか?
ちなみに彼女はいません。


985 名前:デフォルトの名無しさん :2006/11/12(日) 22:54:47
わけわかんね。

986 名前:デフォルトの名無しさん :2006/11/12(日) 23:28:51
>>981
よくは知らんが
エラー 外部参照 LINK2001 でググルと色々出てくるよ。


987 名前:デフォルトの名無しさん :2006/11/13(月) 00:09:38
WindowsVistaとかもうすぐ来るんだけどさ、APIまた覚えなおさないと駄目なの?


988 名前:デフォルトの名無しさん :2006/11/13(月) 00:36:08
スレ終わりかけに質問するのもなんですが

今ダイアログがメインウィンドウになるようなものを組んでいます

メニューと最大・最小ボタン、×ボタンが表示されているのですがまったく機能しません。
ボタンとして押すこともできない状態です。

宜しくお願いします。
また、ダイアログをメインウィンドウとして使う場合何か特別な注意点などはあるのでしょうか。

989 名前:デフォルトの名無しさん :2006/11/13(月) 00:48:59
>>988
メッセージループまわってる?
キャプションバー持ってウィンドウ動かすことはできる?

990 名前:デフォルトの名無しさん :2006/11/13(月) 00:55:04
全く動かないです(´・ω・)

ただ適当に配置したOKボタンは押せているようです

991 名前:デフォルトの名無しさん :2006/11/13(月) 01:03:43
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/structures/lvitem.asp
ここの

_WIN32_WINNT >= 0x560

ってどういう意味なんでしょうか?

0x502でWindows2003で、0x600がVistaじゃないの??


992 名前:567 :2006/11/13(月) 01:05:40
(´ー`)y━・~~

993 名前:デフォルトの名無しさん :2006/11/13(月) 01:06:21
あ、CommCtrlのバージョンですね……
失礼しました(;´Д`)

994 名前:デフォルトの名無しさん :2006/11/13(月) 01:23:06
>>987
今までどおりのプログラムは大体(←ココ重要)今までどおり動く。
そうでなければWindowsではない。

995 名前:デフォルトの名無しさん :2006/11/13(月) 01:30:17
>>992
無駄なスレ消費だけで何の役にも立ってないんだから次スレよろ

996 名前:デフォルトの名無しさん :2006/11/13(月) 09:02:33
次スレ
Win32API質問箱 Build47
ttp://pc8.2ch.net/test/read.cgi/tech/1163375772/

997 名前:デフォルトの名無しさん :2006/11/13(月) 09:09:48
ソーセージータ

998 名前:デフォルトの名無しさん :2006/11/13(月) 09:14:56
乙ですよ 梅

999 名前:デフォルトの名無しさん :2006/11/13(月) 10:13:19
999

1000 名前:デフォルトの名無しさん :2006/11/13(月) 10:13:59
1000


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