■過去ログ置き場に戻る■
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.