Win32API質問箱 Build22

このエントリーをはてなブックマークに追加
883デフォルトの名無しさん
VC++三日目の初心者です、APIとMFCの違いも感覚でしか理解していません
いくらでもたたいてくれて結構です
画像を加工して保存がしたいのですが
HDCで保持するのとDIBデータを扱う2つがあるのですが
この2つについての、違いをご教授願いたいのです。
884デフォルトの名無しさん:04/09/15 22:26:04
>>883
DIB も DDB も HDC で管理する点では同じだ。
読み込みは LoadImage でできるが、書き込みは自分で関数書くことになる。
詳しく説明しようとすると、ここにまんまソース晒すことになるんでやめとくが、
キーワード出しとくから、がんばってみな。

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

ファイルの取り扱いはAPIならCreateFile、MFCならSerializeかCFileだ。
885デフォルトの名無しさん:04/09/15 22:44:22
>>880を要約すると

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

ということです。お願いします。
886デフォルトの名無しさん:04/09/15 22:48:14
HideWindow?
887デフォルトの名無しさん:04/09/15 23:17:10
>>885
SetWindowLongで出来るのかどうかオレにはわからない。
あとはアレだな、最小化アイコン専用のウィンドウを
つくって、本物ウィンドウと連携させるとか。
888デフォルトの名無しさん:04/09/15 23:52:15
プロセスを終了することなく親ウィンドウを閉じて作り直すこのって
どうゆう手順になりますか?
889デフォルトの名無しさん:04/09/15 23:55:54
>>888
あなたの定義で、親ウインドウとは?
890デフォルトの名無しさん:04/09/15 23:58:36
>>888
そういうことが出来る造りにしておく。
他プロセスのウィンドウの話なら、基本的に無理。
891デフォルトの名無しさん:04/09/16 00:02:45
>>889
最初に開いたウィンドウのことです。

>>890
自プロセスでやるならどういった準備が必要になるのでしょうか?
892デフォルトの名無しさん:04/09/16 00:08:15
>>891
つまり、あなたのアプリではあらゆるウインドウが全て
WM_DESTROY に対して PostQuitMessage を発行するわけか
893デフォルトの名無しさん:04/09/16 02:01:13
>>882
Googleだけが調べる方法じゃないでしょ。

WS_EX_CLIENTEDGEが定義されているヘッダファイルから、なんとかFLATを
GREPするとか。
894デフォルトの名無しさん:04/09/16 02:33:22
アプリの多重起動を防ぐ為にCreateMutexするところまではわかったんですが
Mutexの名前をシステム内で一意にする方法はありますか?

適当な名前を引数にすると他のアプリと衝突しそうな気がするんですが・・
895デフォルトの名無しさん:04/09/16 02:49:01
GUID使うとかは?
896デフォルトの名無しさん:04/09/16 02:59:41
>>895
みんながそうしているならそれでいいんだがね
897デフォルトの名無しさん:04/09/16 07:18:11
exeへのフルパス
898デフォルトの名無しさん:04/09/16 08:35:07
リストビューについてなんですが、
もしかして隠しカラムを設定できますか?
MSDN見ても書いてないから無理なのかなぁ

LVCOLUMNのcxに0設定して擬似的にするしかありませんね?
899デフォルトの名無しさん:04/09/16 08:42:06
むかつく
900デフォルトの名無しさん:04/09/16 08:44:35
901デフォルトの名無しさん:04/09/16 09:01:36
空から星が落ちてきて直撃しそうで怖いんですがどうしましょう?

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

これと

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

これは何の関係があるの?
905デフォルトの名無しさん:04/09/16 09:29:46
というかほんとに適当に16文字くらい使えば衝突しないと思うけど。
何を指定したって確率の問題じゃないですかー。
906デフォルトの名無しさん:04/09/16 09:32:28
完全に回避することができない。たんなる確率の問題だから、星の直撃の心配
と同じ。偶然の一致を避けるような工夫をできるだけするしかない。ながーい文字列
とか、exe のフルパスもかなりいい感じだと思うけどな
907デフォルトの名無しさん:04/09/16 09:43:18
でも、exeのフルパスだとコピーされたら多重起動ができる。
抜け道が簡単に出来ちゃうからダメだと思うよ。
大型アプリなら問題ないかもしれないけど…
908デフォルトの名無しさん:04/09/16 09:48:11
>>907
セキュリティーに関連するような大事なハンドルを
デフォルトSID(=NULL)で作成する時点で駄目駄目でしょ。
親プロセスが全ての重要ハンドルを作成し、
明確に子プロセス以外アクセスできないようにするのが普通だと思う。
909デフォルトの名無しさん:04/09/16 10:09:09
>>908
Mutex作る時に使うオブジェクトの名前が違う事になるから、
違うハンドルを作ってしまうって事では?
これについてはセキュリティ関係ないのでは…?
910デフォルトの名無しさん:04/09/16 10:19:20
>でも、exeのフルパスだとコピーされたら多重起動ができる。

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

lihvwdghwelkihvwrhweruhakjabhojwejjw

こういう文字列を使った場合、偶然に一致するアプリがあるかも、って心配は
まぁ、したけりゃしてもいいけどな。
911デフォルトの名無しさん:04/09/16 11:13:42
>>896 >>900
こっちがユニークなら、皆どうだろうと関係ないんじゃない?
912デフォルトの名無しさん:04/09/16 11:16:02
ユニークかどうかはほかが同じことしてないかどうかに関係する
913デフォルトの名無しさん:04/09/16 12:23:41
悪意を持って多重起動の判断を混乱させようとしているのでない限り
「GUIDに見える(けどuuidgenで生成したものではない)文字列」とか
「他のexeのフルパスに見える文字列」
をわざわざ使うとは思えないんだけど
914デフォルトの名無しさん:04/09/16 13:02:06
悪意か善意かは問題ではない。ある演算なり、一定の規則(フルパスやGUIDもこれに入る)
を採用して文字列を取得した場合と、まったくでたらめな文字列の場合、一致する確率が
どっちが低いか、を考えるべき。exe のフルパスの場合は、異なるアプリ間で偶然一致する
のは考えづらいけど、他のディレクトリにコピーされた同じexeが二重起動される。これは
かなり現実的な問題ではある。
915デフォルトの名無しさん:04/09/16 13:06:38
そもそもなんで多重起動を抑止したいのかって理由にもよるだろ。
916デフォルトの名無しさん:04/09/16 13:08:15
二重起動を抑止したい理由と、名前付き Mutex の名前がユニークかどうかは関係ない
917デフォルトの名無しさん:04/09/16 13:09:28
>>892
PostQuitMessageをスローしないだけで済むのですね(^^;
どうもでした。
918デフォルトの名無しさん:04/09/16 14:25:19
>>914
本当にまったくでたらめじゃ確かに一致しない確率は最高だろうけど
自分の別インスタンスとも一致しないから多重起動の判定に使えない。
最低でも多重起動のチェックができる程度の何らかの規則は
導入しなくてはならない。問題はその規則が(他の規則を採用している
かもしれない文字列も含めて)偶然一致する可能性をどれだけ
減らせるか。
919デフォルトの名無しさん:04/09/16 14:39:55
>自分の別インスタンスとも一致しないから多重起動の判定に使えない。

何いってるの?
920デフォルトの名無しさん:04/09/16 14:41:21
>>918

すこしは頭使えよ
921デフォルトの名無しさん:04/09/16 14:42:24
>>918はGUIDを毎回生成するとでも勘違いしてるんじゃないのか
922922:04/09/16 15:04:56
IHTMLDocument等のHTMLに関わる
インターフェイスを使用しています。
現段階では、ActiveXのWebBrowserから
IHTMLDocumentを取得しているのですが、
ブラウザを介さず、
URLまたはHTMLテキストから
直接IHTMLDocumentを
取得したいのですが、
そのあたりの方法があれば教えて下さい。
923デフォルトの名無しさん:04/09/16 15:08:44
簡単なのは WinInet のAPI使うのだな。ググルといっぱいサンプルが見つかるはず。
924デフォルトの名無しさん:04/09/16 15:09:35
>直接IHTMLDocumentを取得したいのですが、

あっ、勘違い、すまん
925デフォルトの名無しさん:04/09/16 15:13:23
SetTimerで、引数のID所で0、又は既に使われているIDを指定すると、
戻り値で空いているIDが返ってきて、それを使うという事を出来るのでしょうか。
926デフォルトの名無しさん:04/09/16 15:15:58
どこをどう読めばそうゆう解釈が
927925:04/09/16 15:20:07
>>926
ありがとうございます。やっぱできないのですね。
その方法が使えれば、IDをEnumなどに定義しておかなくても、
ちょこっと使いたいときに楽かなと思いまして。
928デフォルトの名無しさん:04/09/16 16:18:12
>>893
うそ教えるな。問題のスタイルはCCS_*だから、標準的なスタイルには用意されてなくて
自前で描画するしかない。
929デフォルトの名無しさん:04/09/16 16:34:31
>>922
mfc スレでちょっと前に (レス720前後) 同じ質問にと答えた記憶あるんだけど、
あれじゃあうまくいかなかった?
930デフォルトの名無しさん:04/09/16 19:26:24
ローカルにあるプロセス間で通信をするのに今はソケットを使っているのですが
帯域がボトルネックになっているので改善方法を探しています。

名前つきパイプやメモリマップドファイルを使うことでパフォーマンスの向上は
のぞめますか?ストリームのようにデータを転送するのでメモリマップドファイル
にする場合は何かの方法で同期を取る必要があると思います。
931デフォルトの名無しさん:04/09/16 19:39:57
そのままにしておいた方が、ポテンシャル高くて後々おいしいような。
932デフォルトの名無しさん:04/09/16 19:49:54
ボトルネックになってるんだったらしゃーないような。
でも、プロセス巻通信がそんなに頻繁に起こるならいっそプロセス統合した方がよくないか?
933デフォルトの名無しさん:04/09/16 21:58:05
.NET Framework 1.1を使うアプリを公開したいのですが、
.NETのCLRがインストールされているか調べるにはどうしたらいいですか?
934デフォルトの名無しさん:04/09/16 22:10:45
>>933
漏れは VS .Net のウィザードで作ったインストーラプロジェクトの
インストーラでチェックしてるけど、API でチェックしたいってこと?
935933:04/09/16 22:51:59
>>934
そうです。
936デフォルトの名無しさん:04/09/16 23:42:33
レジストリを見るんじゃないの
937デフォルトの名無しさん:04/09/17 13:01:15
VC++6.0を使っています。
iphlpapi.hをインクルードしたいのですが
このファイルが無いようです。
どこから拾ってくればよいでしょうか?
938デフォルトの名無しさん:04/09/17 13:07:23
939デフォルトの名無しさん:04/09/17 16:20:34
>>934
レジストリ見るプログラムは何で作るの?
CLRに対応してるか確認するプログラムは
CLRを使う.NETじゃ書けないってことなのかな.
.NETって面倒だね.
940デフォルトの名無しさん:04/09/17 16:40:17
…( ゚Д゚)ポカーン
941デフォルトの名無しさん:04/09/17 17:18:58
駐在型ソフトだと、タスクバーから表示を消して、タスクトレイにアイコンを表示していますよね?
これをするにはどうしたら良いですか?
942デフォルトの名無しさん:04/09/17 17:24:33
駐在型?
943デフォルトの名無しさん:04/09/17 17:26:32
ウインドウを消してタスクトレイにアイコンを登録する。
944デフォルトの名無しさん:04/09/17 19:08:21
そのウィンドウの消し方教えてくださいよー ヽ(`Д´)ノ ウワワーン
945デフォルトの名無しさん:04/09/17 19:09:38
DestroyWindow
946デフォルトの名無しさん:04/09/17 19:17:25
ShowWindow
947デフォルトの名無しさん:04/09/17 20:39:07
ウインドウ非表示の方法ぐらい
知っててくださいよー ヽ(`Д´)ノ ウワワーン
948デフォルトの名無しさん:04/09/17 21:10:47
スタートボタンで終了したり、ShowWindow でウィンドウを消したりさせるマイクロソフトが悪い
949デフォルトの名無しさん:04/09/17 21:18:22
馬鹿は何でもMSのせいにするからなぁ w
950デフォルトの名無しさん:04/09/17 21:25:11
なんでもすぐ人のせいにするのは無能の典型
951デフォルトの名無しさん:04/09/17 21:43:15
>>950
勧告陣に言ってくださいw
次スレ〜たてて
952テンプレ1:04/09/18 04:00:01
953デフォルトの名無しさん:04/09/18 11:31:50
難民のあれか・・・。
どこかにミラーが残ってないかな?
954デフォルトの名無しさん:04/09/18 14:14:10
part15のログなら1000まで持ってるが
955デフォルトの名無しさん:04/09/18 14:25:23
part16のログなら1000まで持ってるが
956デフォルトの名無しさん:04/09/18 14:28:06
( ´_ゝ`)フーン
957デフォルトの名無しさん:04/09/18 14:32:39
part22のログなら1002まで持ってるが
958デフォルトの名無しさん:04/09/18 14:38:02
ウィンドウのどの位置にマウスポインタがあるか調べる方法を教えてください。
調べると、GetCursorPosをして、ClientToScreenで変換するとあったのですが、
ウィンドウの位置でなく、ディスプレイの位置のなのか、正しく調べられません。
959デフォルトの名無しさん:04/09/18 14:51:08
>>958
そこはClientToScreenじゃなくてScreenToClientじゃないか。
960958:04/09/18 14:55:48
>>959
ホントだ。逆の方を使っていました。
ありがとうございました。
961デフォルトの名無しさん:04/09/18 15:07:52
自分がつくったステータスバー(CreateStatusBarで作成)は、マウスを
うえにのせてもなにもメッセージをうけとったり、送信したりしないのに、
そのへんのアプリケーションのステータスバーはwm_nchittestを送信した
あとにいろいろやっています。それもどのアプリも大体共通した動作。
(メッセージのやりとりはspy++で見ました)

自分がつくったステータスバーにおいてもこれを実現するためには何を
すればいいのでしょうか?
962933:04/09/18 16:12:05
933です。
%windir%\system32\mscoree.dllのバージョンが1.1以上だったら
.NET Framework1.1がインストールされているされていると考えてよいのでしょうか。
Win32APIな話題からそれていますが、ほかの環境ではどうなのか知りたいのでお願いします。(当方WinXPSP2)
963デフォルトの名無しさん:04/09/18 16:21:39
>>961
サブクラス化しなさいよ
964デフォルトの名無しさん:04/09/18 16:43:36
パート15と16持ってる人いる?
うpってもらえれば、>>1のテンプレに追加して書いたり
965デフォルトの名無しさん:04/09/18 16:46:23
そのファイルだけコピーされてたらどうすんの?
966デフォルトの名無しさん:04/09/18 16:47:19
>>964
両方あるけど、Janeのログだから手を加えないとだめだよね?
967デフォルトの名無しさん:04/09/18 16:50:52
>>964
うぷろだにうぷっただけじゃすぐ消えちゃうよ
968964:04/09/18 16:54:10
2ch系のどっかのサイトが、基本的に消さないとかいう方針のうpロダがあったんだけど…
たしか、FLASH系サイトをまとめてるやつ

>>966
HTML化したほうがよさげ。
ttp://tatsu01.at.infoseek.co.jp/
969デフォルトの名無しさん:04/09/18 17:05:08
ほい。
ttp://up.isp.2ch.net/up/87d091951909.zip

当然すぐ繋がらなくなるから、誰か転載よろしく。
970964:04/09/18 17:42:02
15
ttp://saba.haiiro.info/uploader/file/0587.html
16
ttp://saba.haiiro.info/uploader/file/0588.html

使おうと思ってた、with2chはお休み中だった(つд`)
971ほんたま:04/09/18 19:33:36
WideCharToMultiByteを使って、unicodeをsift-jisに変えると、漢字などはちゃんと変換されるんですが、半角英数を変換すると文字化けするんですが…?
みなみなさまがた〜教えてくだされ〜♪
972デフォルトの名無しさん:04/09/18 19:39:20
沢村の新コテか
973デフォルトの名無しさん:04/09/18 19:50:31
文字化けするんですが…?

ってのはどこが質問なのかな
まあ、普通はそんなことにならないので答えようも無いが。
974ろろ:04/09/18 20:34:31
>>971さん
WideCharToMultiByte のオプションがまずいのではないかな?
どんなふうに呼び出しているの?
975デフォルトの名無しさん:04/09/19 01:28:31
プッシュボタンコントロールの外観を、
テキストではなくBMPにすることはできますでしょうか?
976デフォルトの名無しさん:04/09/19 01:59:23
出来ます。
977デフォルトの名無しさん:04/09/19 02:05:03
>>976
ありがとうございました。頑張ってみます。
978ほんたま:04/09/19 02:11:11
>>975
おみゃ〜よ、オナードローボタンにすればいいよ。
つくりかたは「猫でも…」に書いてあるよ。自分じわかる?
>>974
WideCharToMultiByte(CP_ACP,0,(unsigned short *)pctext,tempsize2,temptext,tpsize2-1,NULL,NULL);
というふうに呼び出しています。
pctextとtemptextはchar型の文字列です。
まずファイルのunicode文字をpctextに1字1字バイナリコピーします。
半角英数の「OK」なら「4F 00 6B 00」というのがその値です。
この時点で、pctextの内容を画面に表示してみると、unicode文字なのにすでに「ok」と表示されます。
でもこれを上のapiを使ってsift-jisに変換してからtemptextを表示すると、何故か「?」と文字化けして表示されるのです。
漢字や半角カタカナを変換する場合はまったく問題ないのですが…?
979デフォルトの名無しさん:04/09/19 02:18:52
S-JISのコードページはCP_ACP?
980デフォルトの名無しさん:04/09/19 02:18:55
そうですか。
981デフォルトの名無しさん:04/09/19 02:38:11
自己解決しました。
982ほんたま:04/09/19 02:38:58
「ok大下容子」という文字列の場合、
変換前のunicode文字列を表示すると「ok'Y・Nケ[P[」になり、
変換後のsift-jisを表示すると「?大下容子」になります。
つまり半角英数は変換前のほうがちゃんと表示され、漢字は変換後にちゃんと表示されます…?
みなみなさまがた〜教えて〜♪
983デフォルトの名無しさん:04/09/19 02:53:41
だから、普通はそんなことにならないから。
というわけで、終了
984デフォルトの名無しさん:04/09/19 02:55:56
>>978
tmpsize2, tpsize2 とかの実際の値はどーなってる?
WideCharToMutiByte() の返り値は?

日本語 Windows なら CP_ACP で問題はないです。
985ほんたま:04/09/19 02:59:54
勘違いでした。
エヘ♥
986デフォルトの名無しさん:04/09/19 03:04:15
他のアプリのボタンを押したいのですが
ツールバーの中にあるボタンのウィンドウハンドルはどうやったら取得できますか?
987デフォルトの名無しさん:04/09/19 03:05:05
wchar_t unitext[] = L"ok大下容子";
std::vector<char> tmp;
tmp.resize(::WideCharToMultiByte(CP_ACP, 0, unitext, -1, NULL, 0, NULL, NULL));
::WideCharToMultiByte(CP_ACP, 0, unitext, -1, &tmp[0], tmp.size(), NULL, NULL);

もんだいねぇけど。
988デフォルトの名無しさん:04/09/19 03:05:35
>>986
ありません
989デフォルトの名無しさん:04/09/19 03:09:49
ないですか
座標で押すのかな
位置が変わったりしないんだろうか
990デフォルトの名無しさん:04/09/19 03:13:11
あります
991デフォルトの名無しさん:04/09/19 03:19:08
>>989
座標からアイテムの情報が分かるから、
それを拾ってツールバーの親にメッセージを投げてやればいい。
992デフォルトの名無しさん:04/09/19 03:23:44
thx
そのやりかたであたってみます
993デフォルトの名無しさん:04/09/19 03:29:55
どうやってテキストを表示していますか?UTF-16LEだと最初の1オクテットには
oとkが含まれているので0x00を無視するような方法で出力してればokって文字列が
最初に見える。
そうじゃないのに「ok'Y・Nケ[P[」っていうのが見えるならファイル読み込みの部分
で「4F 00 6B 00」を「4F 6B」にしちゃってる。
994デフォルトの名無しさん:04/09/19 03:37:32
wifstreamを使ってないとか
ifstreamでバイナリモードにせずに読んでるとか
そんなとこじゃないの
995デフォルトの名無しさん:04/09/19 03:46:45
しかし沢村は相変わらずのズレっぷりだな
996デフォルトの名無しさん:04/09/19 04:00:35
次スレまだ〜?
997デフォルトの名無しさん:04/09/19 04:02:04
まだ
998デフォルトの名無しさん:04/09/19 04:02:20
埋めちゃうよ?
999デフォルトの名無しさん:04/09/19 04:09:06
だめ
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。