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


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

Win32API 質問箱 Build6
251 名前:デフォルトの名無しさん :02/10/02 14:59
おまえの脳内妄想なんかには付き合ってらんねーよ。
そのまま一生悩んでろ。

252 名前:デフォルトの名無しさん :02/10/02 15:23
>>248
DialogBox()使ってるの?
Win95以降MFC使ってるからDialogBox()の動作よくしらへんけど

253 名前:デフォルトの名無しさん :02/10/02 15:45
親にフォーカスが来たタイミングでダイアログにフォーカスを移してやれば
いいと思うんだがダメかね。

254 名前:デフォルトの名無しさん :02/10/02 16:05
MessageBox(hWndParent,"","",MB_OK);
としたときのメッセージボックスと
hWndParentの関係のようなものにしたいんですが
なんとかいっぱつでできるような方法はないでしょうか


255 名前:デフォルトの名無しさん :02/10/02 16:30
>>252
自前でって書いてるからアプリケーションモーダルの
ふるまいをエミュレートしたいって解釈したんだけど
>>254
違うんだったらDialogBox()
つーか>>252は無視か? とっとと首くくって氏ね

256 名前:デフォルトの名無しさん :02/10/02 16:31
MFCは、DoModalすると、modelessでdialogつくって、
親をEnableWindow(FALSE)してるが。

つか、何がどう違うんだよ。釣れた、とかいうのは勘弁な。

257 名前:252 :02/10/02 17:06
>>255
>自前でって書いてるからアプリケーションモーダルの
>ふるまいをエミュレートしたいって解釈したんだけど
書き込んでから248を読み直してきがついた。249が正解とオモタ
でも、どうやってダイアログを表示してるか書いてないんで
一応252の書き込みしててもいいかとオモタ

258 名前:デフォルトの名無しさん :02/10/02 17:11
ポップアップメニューって、位置とアラインを指定(TPM_XXALIGN)してやると、
領域が画面内に収まるように位置が自動調整されるじゃないですか。

これを普通のウィンドウでやりたいんですが、位置を計算してくれる APIなど
ありますか?やっぱ、自分でしこしこ計算するしかないんですかね?


259 名前:248 :02/10/02 17:13
ウィンドウを2つCreateWindow()で作成して
それを>>254のような関係にしたいんです。
言葉足らずですみません…


260 名前:252 :02/10/02 17:24
ところで、EnableWindow()やけどOLEオートメーションの動作に関係する?
Visio2002をオートメーションで制御使用として、オートメーションで取得したHWNDを
EnableWindow(FALSE)したら、それ以降オートメーションでの操作ができなくなったけど
ちなみにVisio2000までのバージョンなら正常に動作します。
オートメーションの仕様に変更か何かありました?
スレ違いかもしれませんし、別に困ってもいないんでほんとはどうでもいいです。
もし知ってる人が答えてくれたら夜ぐっすり眠れます(いまでもぐっすりですが)。


261 名前:248 :02/10/02 17:25
>>255
それです。。。
ウィンドウを自前で作成して
アプリケーションモーダルの動作をエミュレートしたいです


262 名前:デフォルトの名無しさん :02/10/02 17:32
>>261
249,256でいいと思うが253でもできる
というか、アプリケーションモーダルで意識のずれがある?

263 名前:デフォルトの名無しさん :02/10/02 21:52
NT系のOSではwaveOutOpenの引数にコールバック関数ではなく
スレッドを使用すべきという事を聞いたことがあるんですが
本当なんでしょうか?

264 名前:名無し@沢村 :02/10/02 22:15
皆様方、私はボタンが押されたときと、離されたときで違う処理をしたいと思ってここで聞いたら、
サブクラス化したらいいと教わったので、サブクラス化したところ、ちょっとうまういったんです^^;
違う処理については処理のようになったんですが、ボタンが押されたときにへこまないのです。
ボタンのプロシージャ内では、その処理についてだけ書いていますが、ボタンがへこむようにするには何か別なことも書かなくちゃいけないの?
ボタンが押されたときにへこむようにするにはどうすればいいのでしょう?

265 名前:デフォルトの名無しさん :02/10/02 22:25
>>264

もとのウィンドウ関数を実行している?

266 名前:デフォルトの名無しさん :02/10/02 22:46
恥をしのんで聞くけど、うまういったってどういう意味?

267 名前:名無し@沢村 :02/10/02 23:17
>>265
はい、 return (CallWindowProc(lpfnProc[i],hwnd,uMsg,wParam,lParam));とすれば
残りの処理はもとのウインドウ関数がやってくれると本で読んだので、一応書いています。
それ以上のことはさっぱりわからないです…^^;

268 名前:デフォルトの名無しさん :02/10/02 23:20
>>263
どこで聞きましたか?(void風)

以下俺の感想。

waveOutのコールバックが呼びだされるコンテキストって結構怪しかったと思う。
コールバックの中から呼び出せるAPIに限りがあったりするし。
↑こういうのをキモいと思うなら、別スレッドでEventをWaitForすると
スッキリするぜ、みたいな。

269 名前:デフォルトの名無しさん :02/10/02 23:45
>>267
(1) WM_LBUTTONDOWNの処理をした後にも元のウィンドウ関数を呼ぶ
(2) ネタと思われないよう、ちゃんとした日本語を書く

270 名前:248 :02/10/03 10:35
ごめんなさい>>251の言うとおりでした…
GetParent()を繰り返して一番親にあたるウィンドウを探して
それをEnableWindow()で無効にしていたんですが
親ウィンドウを探す処理でミスがあって
別のウィンドウを無効にしていたようです


271 名前:デフォルトの名無しさん :02/10/03 10:42
( ´,_ゝ`)プッ

272 名前:デフォルトの名無しさん :02/10/03 12:47
外部EXEからEXCELを操作しています。
プレビューを表示させようとして調べた結果(winshght32使用)

(親)XLMAIN->(子)XLDESK->(子)EXCEL7(キャプション=book1.xls)というウィンドウが

WM_SYSKEYDOWN Dispatched 12h 18d VK_MENU Scan 38h Alt Down
WM_SYSKEYDOWN Dispatched 46h 70d VK_F Scan 21h Alt Down
WM_SYSKEYUP Dispatched 46h 70d VK_F Scan 21h Alt Up
WM_KEYUP Dispatched 12h 18d VK_MENU Scan 38h Alt Up

上記のようなメッセージを受け取っていたので、次のようにコーディングしました。

HWND Hwnd = FindWindow( "XLMAIN", NULL )
Hwnd = FindWindowEx( Hwnd, NULL, "XLDESK", NULL );
Hwnd = FindWindowEx( Hwnd, NULL, "EXCEL7", "book1.xls";

PostMessage( Hwnd, WM_SYSKEYDOWN, VK_MENU, 0 );
PostMessage( Hwnd, WM_SYSKEYDOWN, 'f', 0 );
PostMessage( Hwnd, WM_SYSKEYUP, 'f', 0 );
PostMessage( Hwnd, WM_KEYUP, VK_MENU, 0 );

しかし、実行してみるとプレビューを表示できず、なぜか"6666"という文字が送信されてしまいます。

試行錯誤しながらやってみましたが、原因が私にはわかりません。
どなたか解決のためのヒントやアドバイスをいただけないでしょうか?

273 名前:デフォルトの名無しさん :02/10/03 13:13
>>272
keybd_event()使え

274 名前:デフォルトの名無しさん :02/10/03 13:26
>>273

フォーカスの問題をどうするのよ?

275 名前:デフォルトの名無しさん :02/10/03 13:38
プレビューするのにフォーカス関係あるのか?
フォーカス設定したいなら AttachThreadInput() でスレッドをアタッチしてから SetFocus() すればいい

276 名前:デフォルトの名無しさん :02/10/03 13:46
>外部EXEからEXCELを操作しています。
オートメーション使う手もあるが

277 名前:デフォルトの名無しさん :02/10/03 13:58
はじめまして。詳しい方にお聞きしたいのですが、
Win32APIのReadDirectoryChangesWはファイルの変更等を検知することが
できるらしいのですが、不正アクセスなど特殊な手法を用いることで、
この監視を逃れ、見事ファイルの改ざんを行うことが可能なのでしょうか?
皆様方よろしくお願いいたします。

278 名前:デフォルトの名無しさん :02/10/03 13:59
>> プレビューするのにフォーカス関係あるのか?

keybd_event() はフォーカスのあるウィンドウに対して送られる

>> AttachThreadInput() でスレッドをアタッチしてから SetFocus() すればいい

そんなら、本質問のようにメッセージを送って解決する方が簡単だね

279 名前:デフォルトの名無しさん :02/10/03 14:07
>そんなら、本質問のようにメッセージを送って解決する方が簡単だね

解決してないんじゃないの?解決してるの?
どっちだよ

280 名前:デフォルトの名無しさん :02/10/03 14:16
>> 解決してないんじゃないの?解決してるの?

解決してないんじゃないかな。

> PostMessage( Hwnd, WM_SYSKEYUP, 'f', 0 );

これが意味不明だし。
たんに ALT+F でメニュー項目を選択させたいんだから
WM_KeyDown/Up でいいんじゃないか?

281 名前:デフォルトの名無しさん :02/10/03 14:18
仮想キーコードは、アルファベットは大文字だったような…

282 名前:デフォルトの名無しさん :02/10/03 14:24
質問です。

現在ミュージックプレイヤーを作っているのですが
プレイヤーがすでに起動されている状態で
もういちどプレイヤーが起動したときに
もういちど起動された実行ファイルの引数(ファイル名)を
もともと起動していたほうのプログラムに渡し、
・多重起動の防止
・引数を渡してその引数が示す曲を再生させる
がしたいのですが
たいのですが
どうすればよいでしょう?

1日考えたり調べたりして
FindWindowをつかい同じ名前のウィンドウがあれば
SendMessageでファイル引数をchar*として渡す、

という方法でやったのですが
Win98ではうまくいってもWin2000だとうまくいきませんでした。
具体的には、文字がうまく渡されてないようで
表示させてみると変に表示されました。

方法が根本的に間違っているような気がしましたので質問させていただきました。
どうかよろしくおねがいします

283 名前:デフォルトの名無しさん :02/10/03 14:27
>>SendMessageでファイル引数をchar*として渡す、

メッセージは何を送ったの?

284 名前:デフォルトの名無しさん :02/10/03 14:28
MediaPlayer のラッパークラスってないの?

285 名前:248 :02/10/03 15:43
WM_USERは危険…

286 名前:デフォルトの名無しさん :02/10/03 16:22
>>282
NT系では特別に設計されたメッセージ以外は
プロセス境界をまたいでポインタを渡せない。
WM_COPYDATA使え。

287 名前:デフォルトの名無しさん :02/10/03 17:27
>>286

9x系だって渡せない

288 名前:デフォルトの名無しさん :02/10/03 17:32
>>287
はずだが>>282では何の偶然か渡せてるみたいだな
まあ何の保証もないからどちらにせよWM_COPYDATAを
使うように書き換えたほうがいいな

289 名前:デフォルトの名無しさん :02/10/03 18:06
>どちらにせよWM_COPYDATAを
>使うように書き換えたほうがいいな

どちらもプログラム可能なら苦労しないはず
いっそ一つにまとめれば

そうじゃないんでしょ?

290 名前:デフォルトの名無しさん :02/10/03 18:15
>>289
自作のミュージックプレイヤー同士での通信だろ、これ。

291 名前:282 :02/10/03 18:16
ここで皆さんが教えてくださった
"WM_COPYDATA"
を使ってさっそく書き換えてみたところ
2000と98で両方確かめましたがどっちもうまく行きました。

>>283-289さん
どうもありがとうございました、ほんとに助かりました。

292 名前:デフォルトの名無しさん :02/10/03 18:20
298 だが取り消し。アフォだった。すまん。

> もともと起動していたほうのプログラムに渡し、

これだね。288 さんに賛成

293 名前:デフォルトの名無しさん :02/10/03 18:23
>>291

ちなみに 98 では何のメッセージを送って成功してたの?

294 名前:デフォルトの名無しさん :02/10/03 18:26
WM_SETTEXT なら NT 系でも 9X 系でも必ず成功するよ。

295 名前:282 :02/10/03 18:28
最初はメッセージ
uint wm_id = RegisterWindowMessage("アプリケーション固有の文字列");
って感じで取得したウィンドウメッセージIDを使ってました。

98でうまくいったのは偶然かもしれないですけどね。

296 名前:デフォルトの名無しさん :02/10/03 18:38
>>295

回答ありがとう。

>98でうまくいったのは偶然かもしれないですけどね。

あり得ない、と思うけどねぇ。アドレス空間が別なんだから。

テキスト渡すだけなら、Width と Height がゼロの EDIT かスタティック
に WM_SETTEXT を送るのが簡単。親で通知メッセージを受け取って、その
変化を認識できる。WM_COPYDATA は、テキストに限らずどんなバイトブロック
でも送れるので、一度覚えてしまうと便利だね。

297 名前:デフォルトの名無しさん :02/10/03 19:12
ほかのアプリのウィンドウに貼りつくアプリを作っています。

対象アプリの移動やサイズ変更時追従することは出来るようになりま
した。

そこで、使用者に外部アプリによる貼り付けとわからないように、対
象アプリのタイトルバーの真下に表示させたいのですが、ウィンドウ
のタイトルバーの高さはどのようにして得るのでしょうか?

298 名前:297 :02/10/03 19:26
すいません、
GetSystemMetrics( SM_CYCAPTION )
でできました。

299 名前:名無し@沢村 :02/10/03 20:34
>>269
ありがとうございました。
(1) WM_LBUTTONDOWNの処理をした後にも元のウィンドウ関数を呼ぶ
これでやってみたら、ちゃんとなりました。
もうひとつ質問ですが、オーナードローボタンに付けたビットマップの絵柄をボタンが押されたときに描きかえるにはどうしたらいいのですか?
またそのようなことは可能ですか?

300 名前:デフォルトの名無しさん :02/10/03 20:42
>>299

元のウィンドウ関数を処理の<前に>呼んで実行しておく。そしてその後
WM_LBUTTONDOWN でビットマップをボタン表面に描く

301 名前:デフォルトの名無しさん :02/10/03 23:28
>>299
普通にWM_DRAWITEMの処理の中でビットマップを切り替えればいいのでは。
ボタンが押されている状態かどうかは、BM_GETSTATEを送ればわかる。

302 名前:263 :02/10/04 00:41
亀レスすいません。
265さん回答ありがとうございます。やはりマルチスレッド関係を
勉強しなければいけないみたいですね。

ちなみにこの話の元ねたは某SPCプレイヤーのReadmeからです。


303 名前:デフォルトの名無しさん :02/10/04 01:27
デスクトップのアイコンをツリービューに表示させたいのですが、
上手くいきません。違うアイコンが表示されてしまいます。

// アイテムIDリストを取得
LPITEMIDLISTpidl;
::SHGetSpecialFolderLocation( NULL, CSIDL_DESKTOPDIRECTORY, &pidl );
// イメージリストを作成
HIMAGELIST himagelist;
SHFILEINFO fileinfo;
himagelist = (HIMAGELIST)::SHGetFileInfo( (LPCSTR)pIDList, FILE_ATTRIBUTE_DIRECTORY, &fileinfo, sizeof(SHFILEINFO),
                  SHGFI_PIDL|SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_SMALLICON|SHGFI_SYSICONINDEX );
m_ImageList.Attach( himagelist );
CTreeCtrl &ctrl = GetTreeCtrl();
ctrl.SetImageList( &m_ImageList, TVSIL_NORMAL );

// ツリービューのルートにデスクトップを追加
TVINSERTSTRUCT TvItem;
TvItem.hParent = ctrl.GetRootItem();
TvItem.hInsertAfter = TVI_ROOT;
TvItem.item.mask = TVIF_CHILDREN|TVIF_TEXT|TVIF_IMAGE;
TvItem.item.pszText = pLabel;
TvItem.item.iImage = fileinfo.iIcon;
ctrl.InsertItem(&TvItem);

こんな感じのコードですけど、どこが悪いのでしょうか?

304 名前:デフォルトの名無しさん :02/10/04 01:33
>>302
> 某SPCプレイヤー

アレか...まあいいけど鵜呑みにするのはやめとき。

305 名前:名無し@沢村 :02/10/04 09:40
皆様方、midiの再生やループや停止の方法はわかったのですが、
ボリュームを上げたり下げたりする方法がわかりません…^^;
またテンポを上げたり下げたりする方法もわかりません。
よくホームページなどでmidiを聞くと、プレイヤーらしきものがホームページの左上についていて、
それを右クリックすると、ボリュームを上げたり下げたり、テンポを上げたり下げたりできるようになっているのですが、
あの機能はどうやって実現するのですか?

306 名前:デフォルトの名無しさん :02/10/04 12:57
現在起動中の他ウィンドウを最前面に持ってこないでアクティブにす
るにはどうすればよいのですか?

その時点で他のウィンドウの下にあればそのままの状態でそのウィン
ドウにフォーカスを移したいのですが。

307 名前:デフォルトの名無しさん :02/10/04 13:56
>306
そんな事ができるアプリを今まで見たことある?

308 名前:デフォルトの名無しさん :02/10/04 14:07
>>306 自分より手前のウィンドウを全部 TOPMOST にした後に...とか(w

309 名前:デフォルトの名無しさん :02/10/04 14:08
>>305
::MidiOutShortMsg()
::MidiOutLongMsg()
::SetTimeEvent()
で直接制御すればなんでもできるけど、まぁむずいわな・・・

310 名前:デフォルトの名無しさん :02/10/04 14:51
>>303
> CSIDL_DESKTOPDIRECTORY
シェルのネームスペースのルートなら
CSIDL_DESKTOP

311 名前:デフォルトの名無しさん :02/10/04 15:10
>>307
PowerToysに入ってたXMouse

312 名前:デフォルトの名無しさん :02/10/04 16:02
>>306
SetWindowPosでSWP_NOACTIVATEは付けないで
SWP_NOZORDERを付けるとか

313 名前:デフォルトの名無しさん :02/10/04 21:14
今後.NETが流行してAPIの知識が必要なくなったりしないのか?
そこら辺が良く分からんので漏れはわざわざプログラミングWindowsと
C#によるプログラミングWindowsを両方買ってしまったのだが。

314 名前:デフォルトの名無しさん :02/10/04 23:03
今からやるならC#だけとりあえずマスターすればいいんでないの。
OSの機能に直にアクセスしたくなったりしたら、
その都度必要なAPIをInterop使って呼び出せばいい。

315 名前:デフォルトの名無しさん :02/10/05 13:00
> 今後.NETが流行してAPIの知識が必要なくなったりしないのか?

CLR を使ってみれば分かるが、このライブラリはかなり良くできては
いる。その中だけでできることで済む場合は幸せになれる。ちょっと
こみいったことやカスタマイズをしようとするとすぐ限界が見えてくる。
Win アプリを作るなら、API の知識は絶対無駄にはならないと思うよ

316 名前:デフォルトの名無しさん :02/10/05 15:21
タスクバーから任意のアイコンを消去(アプリのウィンドウは表示したまま)す
るにはどうしたらよいですか?


317 名前:デフォルトの名無しさん :02/10/05 15:56
DLLについて質問です

例えばDLL側に下記のようなクラスがあるとして、
struct A
{
  static smartptr< hoge > a;
};

アプリケーションからこの"a"にインスタンスを代入しました。
するとアプリケーション終了時にこの"a"のデストラクターでアクセス違反が
起きてしまうんですが、このような場合はどうすればいいのでしょうか?




318 名前:デフォルトの名無しさん :02/10/05 15:58
関連するコードを全て書け

319 名前:317 :02/10/05 16:34
>>318
どういう風に書こうか考えてたら原因がわかりました。

//a.dll
struct A
{
  static smartptr< B > a;
};

struct B
{
  .....
};

//b.dll
struct C :B
{
  static C *createInstance();
};

//app.exe
smartptr< B > ref( C::createInstance() );

てな感じなんで、b.dllはLoadLibraryしてるものなんですが、
デストラクター呼ばれる前に、app終了時FreeLibraryしてるのが原因ですた!

320 名前:デフォルトの名無しさん :02/10/06 01:32
まともにプログラムを作るのであれば、APIの知識は無駄に
ならないというよりも、絶対に必要なものだよ。


321 名前:デフォルトの名無しさん :02/10/06 01:46
>>320
そこまで要求されている人ってほとんど居ないと思う

322 名前:デフォルトの名無しさん :02/10/06 02:20
>> そこまで要求されている人ってほとんど居ないと思う

それはレベルの低いプログラマのはなし

「まともにプログラムを作るのであれば」という前提に注目


323 名前:デフォルトの名無しさん :02/10/06 02:25
まともにプログラムを作るという要求自体がほとんどないという
意味だと思われ

趣味ならまともに作るヒマがあるだろうけどねぇ・・・

324 名前:デフォルトの名無しさん :02/10/06 03:07
「まともなプログラムを書くには機械語の知識は絶対必要」
とかいうヨタと同レベルだな

325 名前:デフォルトの名無しさん :02/10/06 03:30
>> 機械語

うふっ、今どき「機械語」なんていう?

326 名前:デフォルトの名無しさん :02/10/06 03:50
しょーもないことでレスのばすな。
必要ならやる。それだけ。

327 名前:デフォルトの名無しさん :02/10/06 09:10
まともっつーのは用はいろんな環境でもバグなしで動くっていうことでしょ。
動かなかったらいくらかっこいい/高機能でも始まらんから。
で、そういうつぶしていくような作業にはどうしたっていろんな知識が必要でしょ。
APIなんてライブラリーを後ろから支えているわけだし。

328 名前:デフォルトの名無しさん :02/10/06 10:28
> まともっつーのは用はいろんな環境でもバグなしで動くっていうことでしょ。

思い込みの押し付けカッコワルイ

329 名前:デフォルトの名無しさん :02/10/06 15:27
D&Dされたオブジェクトがファイルか
ディレクトリかを判断するには、どのようにすればいいのでしょうか?宜しくお願いします。

330 名前:デフォルトの名無しさん :02/10/06 16:54
ファイル名を取り出してからGetFileAttribute

331 名前:デフォルトの名無しさん :02/10/06 17:13
おい、お前ら!
>参考
>MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
ここにAPIのリファレンスなんてあるんですか?
見つからないのですが。

332 名前:デフォルトの名無しさん :02/10/06 17:14
>>330
このまま無視されて沈んでゆくのかと思ったよ(ワラ
こちらもMSDNで確認しました。
どうもありがとう。

333 名前:デフォルトの名無しさん :02/10/06 17:15
>>331 あるよ

334 名前:331 :02/10/06 17:17
>>333
嘘ついてんじゃねーぞ、ゴラー!

335 名前:本物の331 :02/10/06 17:20
>>334
氏ね


336 名前:デフォルトの名無しさん :02/10/06 17:26
>>331
http://www.microsoft.com/japan/developer/library/default.asp
の、プラットフォームSDKドキュメント>プラットフォームSDKドキュメント(日本語)

ウィンドウ関連はユーザーインターフェースサービスのウィンドウイングとか

どこに何があるのかサパーリ見当が付かないのもあるので
がんばってほじくりかえせ カス

337 名前:本物の331 :02/10/06 17:31
>>336
ありがとうございました!

338 名前:名無し@沢村 :02/10/07 22:03
皆様方、質問があります。
windowsにはボタンがありますよね?
ボタンなんですが、大きいボタンと小さいボタンをつくって、
小さいボタンを大きいボタンの上に重ねてつくり、
小さいボタンは押しても常に大きいボタンの上にある状態にしておくことは可能ですか?
また大きいボタンは小さいボタンの下に隠れている部分は押せずに、
見えている部分だけを押すようにすることはどうすればできますか?

339 名前:デフォルトの名無しさん :02/10/07 22:50
>>338
そのセンスはどうかと思うが、小さいボタンの親を大きいボタンにすればできる。

340 名前:デフォルトの名無しさん :02/10/07 23:19
Win32APIで分割ウインドウをつくるのって猫でも分かる〜にあるような方法でしか
出来ないものなのでしょうか。
ほかに何かいい方法があれば教えて欲しいです。

341 名前:デフォルトの名無しさん :02/10/07 23:19
だからスプリタのソース嫁よ、、

342 名前:デフォルトの名無しさん :02/10/07 23:30
>>341
ソースってどこにあるんでしょうか。
(開発環境はBC++5.5.1です)

343 名前:デフォルトの名無しさん :02/10/07 23:32
>>340
あんなもんだと思うが、何が気に入らんのだ?

344 名前:デフォルトの名無しさん :02/10/07 23:38
>342
http://www.gnomedia.com/cw/wtl/wtldocs/atlsplit_8h-source.html

345 名前:デフォルトの名無しさん :02/10/07 23:41
>>343
境界の上のほうや、下のほうにマウスで行くと斜めカーソルに変わって、ドラッグすると
一時的に子ウインドウの高さが変更されて汚くなるんです。
あと、スクロールバーが水平・垂直両方出ると、サイズ変更出来てしまう部分が出てしまったり。

そういうのを回避する方法とかってありますでしょうか?

346 名前:デフォルトの名無しさん :02/10/07 23:42
>>344
ありがとうございます。
ちょっと見てみます。

347 名前:デフォルトの名無しさん :02/10/07 23:45
>>345
WM_NCHITTESTを適切に処理したらどうかね?

348 名前:デフォルトの名無しさん :02/10/07 23:47
>>347
ありがとうございます。
それもちょっと調べてみます。

349 名前:名無し@沢村 :02/10/08 00:28
>>339
>小さいボタンの親を大きいボタンにすればできる

う〜ん、それは私のレベルでは難しい…他に方法はないでしょうか?

350 名前:デフォルトの名無しさん :02/10/08 00:32
それが難しいなら、他に方法はない。

351 名前:デフォルトの名無しさん :02/10/08 00:41
フリーのBorland C++ Compilerをダウンロードしてみたんですが、
早速ウインドウの作り方がわからずDOSのアプリケーションしか作れません。
Borland C++ Compilerに関数の 解説(Cライブラリのマニュアル?)
みたいものはないんでしょうか?


352 名前:デフォルトの名無しさん :02/10/08 00:42
猫でも読んでろ。

353 名前:名無し@沢村 :02/10/08 00:44
>>350
ボタンをリージョンにして大きいボタンをポリゴンにして小さいボタンを四角にして並べて、
小さいボタンが大きいボタンの上にか乗っかってるように見せかけるという方法なら私のレベルでもできそうです…。
しかしいままでリージョンのボタンはひとつしか作ったことないですが、
リージョンのボタンをたくさんつくって並べることは可能ですか?
またちょんと押せますか?
この方法でよろしいですか?

354 名前:デフォルトの名無しさん :02/10/08 00:49
メモ帳などの外部アプリのエディットコントロールで使用されているフォントの
サイズを取得したいのですが、どのようにすればよいのでしょうか?
どなたかご指導ください。

355 名前:デフォルトの名無しさん :02/10/08 00:52
Win32APIでHTML表示させるのは自力で解析しないとむりなんでつかね?

356 名前:デフォルトの名無しさん :02/10/08 01:05
>>354
WM_GETFONT -> GetObject

357 名前:デフォルトの名無しさん :02/10/08 01:23
>353
なぜSetParent使わないんだよ。

358 名前:354 :02/10/08 01:37
>>356
ありがとうございます。
Win標準のエディットコントロールはこれでいけるのですが、
独自に実装しているエディタの場合はどうすればいいでしょうか?

359 名前:John ◆Re0z.4Is5E :02/10/08 01:50
今でもAPIいじらなきゃならんのは、かわいそうだな。
アプリケーションが作りたいのに、
アセンブラの環境しかないのと似てる。

360 名前:デフォルトの名無しさん :02/10/08 01:50
>>358
無理。

361 名前:354 :02/10/08 02:27
>>360
そうなんですか。
どうもありがとうございました。

362 名前:デフォルトの名無しさん :02/10/08 11:34
>>355
無理。ATL使ってもいいならAtlAfxWinInit()して
CreateWindow("AtlAxWin", "Shell.Explorer", ...)
でIEコンポが使えるけど。

363 名前:デフォルトの名無しさん :02/10/08 22:31
おはつにおめにかかります。名無しともうします。
実は(今は)VB6.0使いなのですが、勉強で
floppyのdumpをとりたい&FileSystemを介さずにかきこむrawrite.exe
の二つのプログラムをかきたいのです。

ところが、VB6.0のFileSystemObject、C言語のfopen(),fprint()など、
すべてWindowsのFileSystemObjectをつかってるわけですよね。

floppyのセクタに直接アクセスできるAPIはないでしょうか?
みなさま、かってなお願いですが、よろしく教えていただけないでしょうか?

364 名前:デフォルトの名無しさん :02/10/08 22:48
エディットボックスをログの出力に使用しています。
それで、スクロールバーをプログラムで一番下に移動させるために、
エディットボックス内の垂直スクロールバーのハンドルを得たいのですが、うまくいきません。

hChild = GetWindow(hEdit, GW_CHILD);
dwStyle = GetWindowLong(hChild, GWL_STYLE);
while(dwStyle & SBS_VERT == 0){
  hChild = GetWindow(hChild, GW_HWNDNEXT);
  dwStyle = GetWindowLong(hChild, GWL_STYLE);
}
GetScrollRange(hChild, SB_CTL, NULL, &iMaxPos);
SetScrollPos(hChild, SB_CTL, iMaxPos, TRUE);

こんな感じで作りました。
どなかたか教えてください。お願いします


365 名前:デフォルトの名無しさん :02/10/08 22:52
素直にエディットコントロールに
WM_VSCROLL投げて、wParamにLOWORD(SB_BOTTOM)で良いんじゃない。

366 名前:デフォルトの名無しさん :02/10/08 22:53
>363
CreateFile, ReadFile

367 名前:デフォルトの名無しさん :02/10/08 22:54
>>363
DeviceIoControl


368 名前:デフォルトの名無しさん :02/10/08 22:56
>>364
EM_SETSELの方が簡単だと思うが。

369 名前:364 :02/10/08 23:00
>>365
どうもありがとうございました!

なんか違う方向逝ってたみたいですね・・・
こんなシンプルにできたのかぁ

370 名前:364 :02/10/08 23:02
>>368
どうも。
それは試しましたが、スクロールされなかったです。


371 名前:デフォルトの名無しさん :02/10/08 23:55
>>363
rawrite.exeのソースを参考に、
ftp://ftp.jp.freebsd.org/pub/FreeBSD/tools/srcs/rawrite/rawrite.c


372 名前:363 :02/10/09 00:15
皆様、情報ありがとうございます。
>366さん、367さん
書き忘れていたのですが、これはWindows2000でもつかえますか?

>371さん
以前、勉強に確認したのですが、
中でつかわれているBIOSをいじる関数が
たしかTurbo-Cのだったので、構成だけ参考にしたのです。
どうもありがとうございます。

373 名前:デフォルトの名無しさん :02/10/09 00:26
http://www.fdos.org/ripcord/rawrite/readme.html
http://ntrawrite.sourceforge.net/

374 名前:363 :02/10/09 00:34
>>373
ばかかおめーら、おれはVBでって言ってるだろうが。

375 名前:デフォルトの名無しさん :02/10/09 00:42
殺伐の予感

376 名前:デフォルトの名無しさん :02/10/09 00:47
>>372
> 書き忘れていたのですが、これはWindows2000でもつかえますか?
使える。Win9xでは使えないけど。

377 名前:363 :02/10/09 00:58
374さん、かってに私のまねをしないでください。
373さんには非常に感謝しております。
いろんなOSで参考になります。

VBでもAPIはつかえます。
今はVBしかもってないので、VBからAPIをつかうしかないのです。

376さんも情報ありがとうございました。

ちかごろ機械に近いところの勉強の必要性を痛感しておりまして、
いろいろとWebでさがしているのですが、FATの説明は海外の方がくわしかったですね。
私も集めた情報をもとにWebページをたちあげたいです。

この課題がおわったら、Formatとpartitionの設定プログラムを作ろうと
かんがえていますが、そのときも、もちろん自分でもしらべますが、
どうしてもわからないときはおしえてください。
それでは、ありがとうございました。

378 名前:名無し@沢村 :02/10/09 02:33
>>357
>なぜSetParent使わないんだよ。
小ウインドウと親ウインドウの関係だけでもややこしいのに、
そのまた子ウインドウをつくったら、ややこしすぎてフック関数をどう書けばいいか、
混乱してしまって、私の手に負えないからです…^^;


379 名前:デフォルトの名無しさん :02/10/09 03:49
>>377 >FATの説明は海外の方がくわしかったですね。
これ読んだか?
http://www.vector.co.jp/soft/data/prog/se044198.html

380 名前:デフォルトの名無しさん :02/10/09 04:23
>>372
NT系が >>366 で 9x系が >>367 だな。

381 名前:デフォルトの名無しさん :02/10/09 05:06
>フック関数
って何さ。

382 名前:名無し@沢村 :02/10/09 07:38
フック船長ですた。

383 名前:363 :02/10/09 10:12
>>>379
そこも調べたのですが、
あらためてdownloadしてみて、勘違いしてたことがわかりました。
LFN_TUT.DOCではなく、LFN.TUTをよむのですね。

ちなみにわたしが参考にしたのは、
日本のものでは、
ttp://www.geocities.co.jp/SiliconValley/7773/fs/fat.html
ttp://homepage2.nifty.com/railway_pc/pc_saguru_fd.htm

海外のものでは、
ttp://www.systweak.com/fat32/fat12.htm
ttp://averstak.tripod.com/fatdox/fatintro.htm

では、そろそろこのスレの趣旨にもはんするので、
FAT話はこれでおわりにします。

384 名前:デフォルトの名無しさん :02/10/09 13:31
>>383
>趣旨にもはんするので、
そうか?

本家のも見とけ
http://www.microsoft.com/hwdev/hardware/fatgen.asp

385 名前:名無し@沢村 :02/10/09 13:58
皆様方、ちょっとした発見をしたのでぜひ聞いてください!!
私は先日大きいボタンと小さいボタンをつくり、小さいボタンを大きいボタンの上に置いて、
ボタンを押してもそのままの状態で見える方法をここでお聞きしたんですよ。
そうしたら、小さいボタンを大きいボタンの子ウインドウにする以外方法はないとの答えでした。
しかし皆様方m私はとても簡単な方法を見つけたのですよ。
それは上になるボタンを初めにつくっておき、
下になるボタンをそのあとつくってそこのCreateWindowでWS_CLIPSIBLINGSを指定するだけでいいんですよ!!
そうしたら、どっちのボタンを押してもボタンの上下関係はそのままの状態になるんですよ。
いやあこんな簡単な方法があったなんて…!!
これで面倒な処理は一切なしにピアノの鍵盤がつくれました!!
皆様方、どうもありがとうございました♪


386 名前:デフォルトの名無しさん :02/10/09 15:32
うむ、ちゃんと解決方法まで報告したのは褒めてつかわす。
「解決しますた」しか書かないで消える奴多いからな。

387 名前:デフォルトの名無しさん :02/10/09 15:56
ピアノの鍵盤が作りたかったのか。
用途が一番気になってたので、わかってよかった。

388 名前:デフォルトの名無しさん :02/10/09 17:36

accept で取得した socket から
IPアドレスを取得するにはどうすればいいのですか?

389 名前:デフォルトの名無しさん :02/10/09 17:41
でも、鍵盤だと押した時に鳴るんじゃないの?
標準のボタンコントロールだと離した時に鳴る事になるのでは?
そこまで求めていないのかな?

390 名前:デフォルトの名無しさん :02/10/09 17:48
>>388
getpeername()

391 名前:デフォルトの名無しさん :02/10/09 17:50
> 標準のボタンコントロールだと離した時に鳴る事になるのでは?
そりゃ実装によるだろ。

392 名前:デフォルトの名無しさん :02/10/09 18:02
>>385
だれかZオーダー教えてやれよ。

393 名前:388 :02/10/09 18:32
>>390

レス thx です。

こんな感じでやったら OK ですた

sockaddr_in another_addr;
int len = sizeof(another_addr);
getpeername( s, (sockaddr*)&another_addr, &len );
ShowMessage(AnsiString(inet_ntoa(another_addr.sin_addr)) + "|" + AnsiString(ntohs(another_addr.sin_port)));


394 名前:デフォルトの名無しさん :02/10/09 19:18
マルチスレッドで質問です

ログをテキストファイルに出力する部分を別スレッド化したいのですが
具体的にどうして良いのか悩んでいます

一応考えついたのは、メインのスレッドでログをバッファへ溜めていって
出力スレッドはそれをクリティカルセッションで受け取って順次書き出すのかなぁという程度なんですが
それだと出力している間はバッファに書き込めなくなっちゃいますよね?

また、ログバッファに数値型を突っ込んだ場合に文字列に変換するような部分も
できれば別スレッド化したいのですが、これに関してはさっぱりアイデアが浮かびません・・・

何か検索ワードかヒントでも良いので教えて下さい

395 名前:デフォルトの名無しさん :02/10/09 19:54
SHFileOperationでファイルのコピーをおこなっているのですが、
直後に、転送されたであろうファイルのフルパスをFindFirstFileしても、
その時点ではファイルが見つかりません。Sleep等で待機してみましたが
どうも関数を抜けた後でないとコピーが完了しないみたいなのです。
SHFileOperation処理の完了を待つにはどうしたらよいのでしょうか?

ハンドルは自分のウインドウで、フラグは
FOF_SILENT | FOF_NOCONFIRMMKDIRとしています。
よろしくお願いします。

396 名前:395 :02/10/09 20:00
書き忘れましたOSはWindows2000です。
今思ったのですが、ライトキャッシュされているのかも。
でも解決策がわからない・・・


397 名前:デフォルトの名無しさん :02/10/09 20:15
>>395-396
さすがにファイルの存在・内容についてはキャッシュされていようと
一貫性は保たれてるはずだぞ。

ところで395の二行目の「直後」って、いったいどの時点なんだ?
4行目で関数を抜けた後とあるが、ということは抜ける前なのか?

398 名前:395 :02/10/09 20:20
どうもです
int test(〜)
{
 int result = ShFileOperation( 〜;

→私の言った直後はここです
}

CopyFile API でもだめでした・・・


399 名前:デフォルトの名無しさん :02/10/09 20:31
fopenもできない?

400 名前:デフォルトの名無しさん :02/10/09 22:11
>>398
……ありゃ、ほんとだ。
うちの環境でも再現できますた。
ちと驚き。

401 名前:デフォルトの名無しさん :02/10/09 22:28
>>389
>>264-267 >>299-301 あたりだな。結局あれで解決したのか?

402 名前:デフォルトの名無しさん :02/10/09 22:41
>>394はスレ違いですか?
マルチスレッド相談室ではWin環境依存な話題はWin32APIスレに書けとあったのですが・・・

403 名前:デフォルトの名無しさん :02/10/09 22:44
>>398
俺のWin98SEでは再現できなかった。

404 名前:デフォルトの名無しさん :02/10/10 00:37
この事象は、処理がatomicだから

405 名前:??? :02/10/10 00:41
この不景気の中、財布がホクホクです♪
先月は21万、ネットで稼がせて頂きました・
半信半疑始めたサイトでまさか生活できるとは
思ってなかったから実感があんまりないけど
とにかくうれしい!!!
はっきりいってなめてました
初心者の私もできた
なせばなる・
諦めないこと・
お陰さまで
来月ハワイへいってきま〜す
http://plaza15.mbn.or.jp/~u_club/

406 名前:デフォルトの名無しさん :02/10/10 01:20
>>395
FindFirstChangeNotificationでどうよ

407 名前:名無し@沢村 :02/10/10 01:40
>>389
>標準のボタンコントロールだと離した時に鳴る事になるのでは?

一応サブクラス化して押したときに鳴るようにしています。
で離したときにストリームに書き込むと…。
少し胸を張りたい気分です♪


408 名前:デフォルトの名無しさん :02/10/10 14:02
>>394
>ログをテキストファイルに出力する部分を別スレッド化したいのですが
明確な理由が無ければしないほうがよい

>それだと出力している間はバッファに書き込めなくなっちゃいますよね?
クリティカルセクションを使っている場合は、その時点でバッファに
書き込もうとしたスレッドがスリープの状態になるはず、出力している
スレッドがリーブクリティカルセクションした時点でスリープ状態が
解除される。
そもそも、書き込めないようにするためクリティカルセクションを使う

>また、ログバッファに数値型を突っ込んだ場合に文字列に変換する
わるいが何が言いたいのかわからん

409 名前:デフォルトの名無しさん :02/10/10 16:29
>>408
>明確な理由
ゲームエンジンのサブクラスなので、ファイルアクセスなどでイチイチ引っかかりたくないのです
そういう理由で
>バッファに書き込もうとしたスレッドがスリープの状態になる
のは困るのですが、うまい回避方法は無いのでしょうか

>>ログバッファに数値型を突っ込んだ場合に文字列に変換する
というのは、現在の実装だと

class ログ管理クラス
{
 std::string ログバッファ;
 template<class T> ログ管理クラス& operator <<(const T& arg)
 {
  std::ostringstream 型の違いを吸収してstd::stringにするための一時クラス
  一時クラス << arg;
  ログバッファ.append(一時クラス.str());
  return (*this);
 }
};

みたいな事やってるんです
で、operator <<()の部分がボトルネックになりそうだから
ここも別スレッド化できたらなぁという意味でございまする

410 名前:デフォルトの名無しさん :02/10/10 16:34
>で、operator <<()の部分がボトルネックになりそうだから
そんなもんなるかよハゲ。

411 名前:デフォルトの名無しさん :02/10/10 16:41
>>410
じゃあそっちはどうでもいいので
ファイルの書き込みを別スレッド化する方法を教えて下さい

もしかしてfopenのたんびに_beginthreadするだけですか?

412 名前:デフォルトの名無しさん :02/10/10 17:16
fopenも別スレでやればいいだろ。つーか普通そうする。

413 名前:名無し@沢村 :02/10/10 20:06
皆様方、私は初めてスクロールバーというものをつくってみたのですよ。
そして本に書いてあるとおりにしたら、動かないのですよ…^^;
本に書いてあるというのは、次のようなことでした。

switch(LOWORD(wParam))
{
case SB_LINERIGHT:
hpos++;SetScrollPos(hScroll,SB_CTL,hpos,TRUE);Debug(hwnd,hpos);
break;
}
つまり、スクロールバーを動かしたとき、hposの値を増やして、それでスクロールバーの位置をセットするというものですが、
何故かスクロールバーは元の位置に戻ってしまうのですが…。
上のプログラムで何か欠けてる部分がありましたら、ご指導の程よろしくお願いいたします。

414 名前:デフォルトの名無しさん :02/10/10 20:18
>>411

OutputDebugString 使っておけば?


415 名前:デフォルトの名無しさん :02/10/10 20:50
>>409
> >バッファに書き込もうとしたスレッドがスリープの状態になる
> のは困るのですが、うまい回避方法は無いのでしょうか

FIFO とか、リングバッファって知ってるか ?

416 名前:409=394 :02/10/10 21:42
>>415
FIFOバッファは桁溢れしたら溢れた分を一時待避するようなバッファでしたっけ?
リングバッファはバッファの末尾がバッファの先頭に繋がってるバッファですよね

それを実装しろという事ですか?
バッファがクリティカルにロックされててpushできなかったら
どっかに待避しとけと

わかったようなわからないような・・・

417 名前:デフォルトの名無しさん :02/10/10 21:55
>>416
デバグ用のログならこの程度でよいのでは?

書き込み側:
void Log(char* szFormat, ...)
{
char szMessage[MAX_MESSAGE_LEN];
va_list arglist;
va_start( arglist, szFormat );
vsprintf( szMessage, format, arglist );
va_end( arglist );

char* pszMsg = strdup(szMessage);
PostThreadMessage(idThread, MSG_LOG, 0, (LPARAM) pszMsg);
}

受け側スレッド:
FILE* fp=foprn(...);
BOOL bRet;
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0 && bRet != -1)
{
switch(msg.message) {
case WM_LOG:
fprintf(fp, "%s", (char*) msg.lParam);
free((char*) msg.lParam);
break;
case WM_QUIT;
return 0;
}
}


418 名前:デフォルトの名無しさん :02/10/10 21:59
>>416
> FIFOバッファは桁溢れしたら溢れた分を一時待避するようなバッファでしたっけ?

違う。ググルなりしてちゃんと勉強した方がいい。

ちなみに、リングバッファは FIFO を実現する手段の一つ。

419 名前:デフォルトの名無しさん :02/10/10 22:30
>>413
hposをstatic変数にしる。

420 名前:394 :02/10/10 22:33
>>418
>>バッファに書き込もうとしたスレッドがスリープの状態になる
>のは困るのですが、うまい回避方法は無いのでしょうか

への回答が、つまりFIFOバッファを使えっていう事ですか?

>>417
なるほど、だいたい感じは掴めました
(ofstreamとstringで実装してるのでもうちょっとややこしそうだけど・・・)

421 名前:名無し@沢村 :02/10/10 23:25
>>419
あなた様、スクロールバーが動かなかった件、めでたく解決いたしました!!
というのもWM_COMMANDでスクロールバーのIDをcase スクロールバーのID:break;としたところ、
突然スクロールバーが動くようになったのであります。
もちろんcase スクロールバーのID:とbreak;の間には何も書いていません。
ただcase スクロールバーのID:とbreak;と書いただけで動くようになったのは実に不思議…?
わけわからん…?
まあしかし動くようになったのでめでたしめでたしであります。

>hposをstatic変数にしる。

それも一案かもしれませんが、またの機会に…。
とにかくあなた様ありがとうございました!!♪


422 名前:デフォルトの名無しさん :02/10/10 23:58
Visual Fortran version 6.6でコンパイルしたアプリケーションが起動しません.
”C:\......exe は有効な Win32 アプリケーションではありません.”
と,言われてしまいます.
大きな配列を定義すると,怒られます.
この計算のために2GBのメモリを積んだPCを使ったのですが
どう考えても2GBも使用されてないと思われます.
Win32アプリケーションにはメモリの制限が何かあるのでしょうか?
また,メモリ2GBをフルに一つのアプリケーションで使うにはどうすればいいのでしょうか?

423 名前:デフォルトの名無しさん :02/10/11 00:12
>>422
確か静的には確保できる上限があった記憶。
メモリを動的に確保してみてください。

424 名前:デフォルトの名無しさん :02/10/11 00:24
>>422
積んであるメモリを全部アプリで使う?
簡単だろ。OSの機能を全てアプリに入れてしまえばいい。
そうすれば全てのメモリはお前のものだ。

425 名前:デフォルトの名無しさん :02/10/11 00:35
エクスプローラー等で表示される
自分自身のアイコンを書き換えるのはリソース書き換え以外には
方法無いんでしょうか?

426 名前:デフォルトの名無しさん :02/10/11 00:46
自分自身というのがexeファイルで、
自分のアイコンだけを変えたいということ?

シェル拡張用DLL(アイコンハンドラ)を作ればできるかもしれないが...
普通はできないと思った方がいいな。

427 名前:デフォルトの名無しさん :02/10/11 01:24
簡易的なアンインストーラを作ろうと、
GetModuleFileNameで自分自身のフルパスを取得し、
DeleteFileをやってみましたが、アクセスを拒否されます。
自分自身を削除する実行ファイルを作るには、
どうしたらいいでしょうか?

428 名前:デフォルトの名無しさん :02/10/11 01:26
>>427
ムリでしょ。

429 名前:デフォルトの名無しさん :02/10/11 01:27
wshで消す

430 名前:デフォルトの名無しさん :02/10/11 01:35
427ではないですが、興味アリなので。

一般的なアンインストーラはどうやって
自分自身を消しているのでしょうか?

431 名前:デフォルトの名無しさん :02/10/11 01:38
>>430
削除ツール専用の自分削除プロセスを立ち上げるんじゃないの?
それ自身はワケワカラントコロにインストールしておいて。

432 名前:デフォルトの名無しさん :02/10/11 01:42
一般的には
自分をTEMPフォルダ等にコピーして起動
元の自分自身を削除
WININIT.INI(9x系)かMoveFileEx(NT系)でTEMPの自分を消す
かな。

他にはバッチファイルを吐き出して実行とか
アンインストールはinfファイルで起動するとか

433 名前:デフォルトの名無しさん :02/10/11 01:42
ワンポイント・レッスン
最新Windowsプログラミングテクニック

という本にそんな話題が載ってたなぁ

434 名前:デフォルトの名無しさん :02/10/11 01:55
>>432
XPで試したところ、
MoveFileExで逝けました。ありがとうございます。

435 名前:427 :02/10/11 01:56
434=427です

436 名前:デフォルトの名無しさん :02/10/11 02:35
他のマシン(Win2000等)にメッセージボックスを
表示させるAPIってなんでしたっけ。
リモートデバッグとして使うように紹介されてた記憶があるのですが。
記憶違いですかね。

437 名前:デフォルトの名無しさん :02/10/11 02:37
>>436
APIは知らんけど、
NT系にはMessengerサービスが走ってるから、
net send でメッセージを送れる。

438 名前:デフォルトの名無しさん :02/10/11 02:49
>>436
NetMessageBufferSendのこと?

439 名前:436 :02/10/11 03:02
む、
かなり早いレスにびっくりです。

まだ、はっきりとわからないけど
NetMessageBufferSend
だと思います。
net send も遊んでみました。
どうも
ありがとうございました。

440 名前:425 :02/10/11 17:58
む〜、DelphiのTIconとかどーなってるんだ(;´Д`)

441 名前:デフォルトの名無しさん :02/10/11 19:11
>>425
> む〜、DelphiのTIconとかどーなってるんだ(;´Д`)

Delphi でも TApplication のアイコンはリソース(*.res) となっていて
exe に取り込まれてる。>>425 の問題は、リソース書き換えればいいのでは?
もちろん、リソースには複数のアイコンをいれられるよ。エクスプローラに
表示されるのは最初のやつなのかな。

442 名前:デフォルトの名無しさん :02/10/12 01:04
すいません。APIの質問というかWinアプリ全般についての相談なんですが・・・
皆さんWinアプリを作成する場合にどのように作成していますか?

コンポーネント化とやらを行って拡張性の高いアプリケーションを
作成したくなったのですが、いまいち道が見えません。

現状の自分のレベルとしては
1:WinMainから始まるような通常のアプリケーションは作成できる。
2:C++はそれなりにわかる。
3:超単純な独自インターフェイスのCOMコンポーネントは一応作成できる。
4:ActiveXはよくわかっていない。
5:ATLはよくわかっていない。
6:.NETとやらはこれから勉強する。
VS.NETはほとんど触ってない、VC++6.0とUI違いすぎでいまいちわからんです(^^;)


443 名前:442 :02/10/12 01:04
つづき

とりあえず考えているのはMDIアプリ風で外側のフレームだけ通常のWinMainのexeにして
実装等はすべてコンポーネント化したいのです。
イメージ的にはMicrosoftWebBrowser(IWebBrowserとか持ってこれるやつ)
みたいにある程度コンポーネント単体でほぼ実装が完結されているような
ものを作成していきたいのです。

そこでこれからのどの道に進んでいけばよいのかわからなくなっています。
今考えているのは
1:ActiveXを自力で作成する勉強をはじめる。
既存のインターフェイス(IOleXXですかね?)から派生してC++でゴリゴリ書く。
2:ATLを勉強してActiveXを作成する。
3:.NETを勉強する。
4:その他?

444 名前:442 :02/10/12 01:05
つづき

上記4つの方法についていろいろ悩んでいます。
疑問1:ActiveXはもう時代遅れなのだろうか?
これからは.NETというものが主流?
疑問2:ActiveXを自力で作成するのは無意味?
勉強にはいいかもしれないけど、普通はATLで作成するもの?
疑問3:ATLはもう時代遅れなのだろうか?(.NET?)
疑問4:.NETとやらはちゃんと主流になるのか?
(なんかいまいち普及してない感じがしてますが)
疑問5:それいぜんにActiveX、ATL、.NETのどれも普及していない?

どのような道を進むべきか皆さんのご意見をご教授願います。







445 名前:デフォルトの名無しさん :02/10/12 01:16
>>442-444

以下に、あおりでも荒らしでもなく、まじめに答えるつもりです。
是非、Delphi をお試しください。簡単な WebBrowser なら
人にもよりますが、入門して1週間で作れるようになります。
また、将来、来年 .NET にも対応する予定です。C#.NET への
移行も言語やライブラリの構造が似ているため簡単です。

Delphi と C++ と C# ユーザからのアドバイスです。

446 名前:デフォルトの名無しさん :02/10/12 01:22
ATLなら1日で作れるけどね

447 名前:デフォルトの名無しさん :02/10/12 01:22
445です。

追加しますと、Delphi では API レベルの細かなカスタマイズも簡単ですし、
たとえば MDI にもプロパティーをひとつ変更することです容易に対応できます
し、タブコントロールなどのコンポーネントも豊富にありますし、Delphi 自体で
コンポネントを作成して拡張できますし、ActiveX の取り込みもできます。

448 名前:デフォルトの名無しさん :02/10/12 01:25
コンポーネント化といっても程度によりけりですよね。

部品を他のプログラムからも利用したい
→VB、ATL、MFC、etc…汎用を目指す
 →ActiveX
→Borland開発環境に限定してOK
 →VCLコンポーネント
→C#、VB.NET、etc…マネージド言語から使えればいい
 →.NETコンポーネント
→静的リンクできればそれでいい
 →単にC++のクラスとして作る

えとせとら

449 名前:デフォルトの名無しさん :02/10/12 01:29
質問させていただきます。
検索はかけましたが相応しくないかもしれません。その際はご容赦ください。

最近フルカラー640*480で、D3DもDirectDrawも使わないのに高速半透明をするゲームが増えてきました
半透明というとDIBで1ドットずつ計算くらいしか思いつかないのですが、
こんな方法ではろくなスピードがでません(実際作りました)

あのゲームたちはどのような方法を使っているのでしょうか
VRAMを直接いじる方法は存在しなかったと思いますが…。

450 名前:デフォルトの名無しさん :02/10/12 01:47
DiBSectionは試した?

451 名前:デフォルトの名無しさん :02/10/12 02:03
>>450
ええ、もちろんです
CreateDIBSectionで関連づけて

ついでに透明度を256段階と決めて、1バイトでの混ぜ合わせテーブルをつくりました
120と64を、透明度128でまぜあわせたら92 などのテーブルです
3バイトの混ぜ合わせテーブルはつくるの不可能ですから…。

それを使ってforループでまわして書き換え
でもこれではそんなにスピードでないんですよ…

452 名前:デフォルトの名無しさん :02/10/12 02:05
>>449

GDI+ ライブラリをつかってアルファブレンドしてるとか

453 名前:442 :02/10/12 02:12
レスありがとうございます。
>>445
>>447
Delphiに関してはまったく知識がないのですが、
どちらかというとコンポーネントを
「使う」のではなく「作る(再利用可能&汎用性あり)」方が主な目的です。
Delphiで作成したコンポーネントをVCに取り込むことは可能でしょうか?

>>448
>→VB、ATL、MFC、etc…汎用を目指す
目的としては汎用的なコンポーネントを目指したいなと考えています。
ActiveXが有力候補でしょうか?
ActiveXはやはりATLで作成するのが普通なのでしょうか?

>Borland開発環境に限定してOK
出来ればVC等MS系開発環境でも使用できる方がいいと考えています。

>→C#、VB.NET、etc…マネージド言語から使えればいい
現状マネージド言語(すいませんまだあまり理解していません)を使用している人が
自分の周りにいないので、普及度とかがよくわからないのですが・・・・
今後はその方向にむかっていくのでしょうか・・・

>→静的リンクできればそれでいい
一応動的なものを考えています。



454 名前:デフォルトの名無しさん :02/10/12 02:17
>>Delphiで作成したコンポーネントをVCに取り込むことは可能でしょうか?

それはできません。ActiveX にすると良いのかも知れませんが面倒です。
Delphi のなかで使うのならラクチンですけど。

>> 出来ればVC等MS系開発環境でも使用できる方がいいと考えています。

こういう場合は、Delphi をおすすめいたしません。

しかし、言語や開発環境は道具です。良いものをなるべく容易に迅速に
つくれるのなら、道具にこだわるべきではないとも思うんですが。

455 名前:デフォルトの名無しさん :02/10/12 02:20
>>453
> 今後はその方向にむかっていくのでしょうか・・・

これはいまのところ誰にもわからないのではないでしょうか。
もし、否定/肯定いずれでも断言する方がいたとしても
現状では信じない方が無難です。

456 名前:デフォルトの名無しさん :02/10/12 02:32
>Delphiで作成したコンポーネントをVCに取り込むことは可能でしょうか?
一応DelphiでもActiveXは作れるので、その機能を用いて
ラッパーを一枚噛ませればできますけどね。
でも、素直にATLの方がいいかも(って僕はATL知りませんけれど)

作ったコンポーネントを、どういう風に活用するつもりですか?
それがわかれば絞れるかも。

457 名前:デフォルトの名無しさん :02/10/12 02:54
>>451
単にお前がヘボなだけ

458 名前:名無し@沢村 :02/10/12 06:50
皆様方、私はいまmidiシーケンサーに取り組んでいるところですが、
初歩的なところでつまずいているのでぜひ教えてください♪
それはmidiファイルに保存するとき、音色指定で、
32 の Guitar harmonics まではプレイヤーで聞いてみると音が出るのですが、
33 の Acoustic Bass 以降の音は出ないのですよ。
バイナリエディタで開いてみると、33 の Acoustic Bass 以降の音を指定した場合、
どうもファイルがこわれているようなのですよ…?
皆様方、これは一体どういうことなのでしょうか?
32 の Guitar harmonics までと33 の Acoustic Bass 以降とでは音色の指定の仕方が違うのでしょうか?
ちなみにMidiOutShortMessageでは同じように指定して同じように音が出るのですが…?
ぜひ教えてください!!



459 名前:デフォルトの名無しさん :02/10/12 08:52
>>449
ゲームは画像ファイルにアルファデータくっついてることが多いので
>>449が言ってるゲームもアルファ合成じゃないかと思います。

んで、以前アルファデータについて検索かけたとき
intelのパフォーマンスライブラリ(Image Processing Library)が引っかかりました。
http://www.intel.co.jp/jp/developer/software/products/perflib/ipl/index.htm
intelがMMX以降のPentium系CPUの実力を発揮させるために作ったライブラリのようです。
これ使ってみてはどうでしょう?

現在、本家英語サイトはIPPβ3.0に吸収されたようでIPLのページがありませんでした。


460 名前:デフォルトの名無しさん :02/10/12 11:19
>>457
へぼいのでこの程度の方法しか思いつかないのです。
よろしかったらご教授をお願いいたします。
ループ部分をアセンブラで書くことによって、1.5倍程度の処理速度UPはできましたが、
それでもゲームでリアルタイムに使うのはきつかったです。

>>459
αデータつきの画像というと、DDSなどのD3D用画像が思いつきます。
でもとりあえずWin32APIにはαブレンディング合成の関数は存在しませんよね。

おもしろいライブラリを教えていただきありがとうございます。
Intel系PCのみの動作となっていますが、研究する価値はありそうですね。
近くまとまった休みがとれたら使用して報告させていただきます。

<->
自前で高速αブレンディング合成を作成された方、アルゴリズムをご存知の方、解説サイトを
ご存知の方がいらっしゃいましたらご一報くださると幸いです。

461 名前:デフォルトの名無しさん :02/10/12 11:26
>>452さんのおかげで気付かせていただきました

大変申し訳ありません。
GDIにAlphaBlend()という関数が存在するのですね。
Win98以降のみサポートだそうです。

抜き色転送もめんどうなBitBltくらいしかないので、そんなものはあるはずないと
決め付けておりました。

近く実験を行い報告させていただくことでおわびとさせていただこうと思います
スレ汚し失礼いたしました

462 名前:デフォルトの名無しさん :02/10/12 16:54
使ったことないから知らんけどAlphaBlend()つっても
結局内部ではCPUでシコシコやってんじゃないの?

俺もDIBで32ビット処理とか一応やってるけどMMX使うくらいしか思いつかないな。
アセンブラで組んでるとこにMMXまだ使ってないのなら適用してみれ。

実験するんなら事後報告よろしく>>461

463 名前:デフォルトの名無しさん :02/10/12 16:54
マルチスレッドで
メインスレッドからPostThreadMessageして
ワーカースレッドでGetMessageする場合
ワーカースレッドをコールバック関数にしたりする必要ありますか?

あとワーカースレッドにメッセージキューを実装しなければならない
というようなことがMSDNに書かれていたのですが
具体的にどういう事なんでしょうか?

464 名前:デフォルトの名無しさん :02/10/12 17:33
>VCLとか言ってる話題
Delphi氏ランなら
BorlandC++Builder使ったら?
言語がC++だから
簡単に入れると思うよ。

>DIBで重い言ってる
バックバッファとしてDIB作って
普通にCでソフトウエアレンダリングして
それをBitBltしてるだけでも、結構な速度が出ますよ。
そりゃSIMD使うともっと速くなるけど。
普通に640x480 8bit で、
画面全体を塗りつぶすだけ
for(i=0;i<(640*480);i++)p[i]=255; // わざと遅く書いた。

余裕で60fps切るようだったら、DIB生成かBitBltあたりに何か問題があると思う。



465 名前:デフォルトの名無しさん :02/10/12 18:08
>>464
8bitならかなり速いです。
あらかじめ合成用のテーブル持てるし。
問題は16や32なわけでして

早く家に帰ってためしたいです。はい…

466 名前:デフォルトの名無しさん :02/10/12 19:04
>>462
> 使ったことないから知らんけどAlphaBlend()つっても
> 結局内部ではCPUでシコシコやってんじゃないの?

アクセラレーションが有効ならドライバが直に実行するんでない?

467 名前:名無し@沢村 :02/10/12 19:51
皆様方、私はいまmidiシーケンサーに取り組んでいるところですが、
初歩的なところでつまずいているのでぜひ教えてください♪
それはmidiファイルに保存するとき、音色指定で、
32 の Guitar harmonics まではプレイヤーで聞いてみると音が出るのですが、
33 の Acoustic Bass 以降の音は出ないのですよ。
バイナリエディタで開いてみると、33 の Acoustic Bass 以降の音を指定した場合、
どうもファイルがこわれているようなのですよ…?
皆様方、これは一体どういうことなのでしょうか?
32 の Guitar harmonics までと33 の Acoustic Bass 以降とでは音色の指定の仕方が違うのでしょうか?
ちなみにMidiOutShortMessageでは同じように指定して同じように音が出るのですが…?
ぜひ教えてください!!


468 名前:デフォルトの名無しさん :02/10/12 19:54
>>467
音源はなに?

469 名前:デフォルトの名無しさん :02/10/12 19:56
つーか板違い

470 名前:名無し@沢村 :02/10/12 20:05
>>469
板違い ではありませんぞ。
素で音色をならすときは、WinAPIのMidiOutShortMessageを使ってますし、
ファイルに書き込むときは、同じくWinAPIのWrightFileを使ってますから…。
>>468
それが私は音源にうとく、音源が何かはわからないのですよ…。
ただファイルが壊れることと、音源とはあまり関係なさそうに思うのですが…。

471 名前:デフォルトの名無しさん :02/10/12 20:06
MIDIに詳しくないのにMIDIシーケンサ作るの?

472 名前:デフォルトの名無しさん :02/10/12 20:12
微妙にスレ違いかもしれませんがご容赦を。
CDの自動再生機能でhtmlを表示したいのですが、
「標準のブラウザ」で開くにはどうすればいいのでしょうか?
open=IEXPLORE.EXE ***
ではネスケ等に対応できません。

ShellExecute()させるだけの実行ファイルを作るといのが考えられますが。
ヨロシコ

473 名前:デフォルトの名無しさん :02/10/12 20:12
>>466
試してみたいけど過去スレに実質WinMe/2000以降限定とか書いてあるから
俺の環境じゃ試せねー。
まあ実際問題としてOS限定するなら使いづらいAPIだな。少なくとも俺は使いたくない。

474 名前:名無し@沢村 :02/10/12 20:12
>>471
そう、わかった部分だけでとりあえずつくって、新しいことがわかるたびに機能をつけたす。

475 名前:デフォルトの名無しさん :02/10/12 20:14
>>473
俺は必要になったら使うだろうなあ。
家のPC、2000とXPだし。

476 名前:デフォルトの名無しさん :02/10/12 20:27
>>472
open=rundll32.exe url.dll,FileProtocolHandler index.html

477 名前:472 :02/10/12 20:44
>>476
即レスありがとうございます。

478 名前:名無し@沢村 :02/10/13 02:07
皆様方、私はいまmidiシーケンサーに取り組んでいるところですが、
初歩的なところでつまずいているのでぜひ教えてください♪
それはmidiファイルに保存するとき、音色指定で、
32 の Guitar harmonics まではプレイヤーで聞いてみると音が出るのですが、
33 の Acoustic Bass 以降の音は出ないのですよ。
バイナリエディタで開いてみると、33 の Acoustic Bass 以降の音を指定した場合、
どうもファイルがこわれているようなのですよ…?
皆様方、これは一体どういうことなのでしょうか?
32 の Guitar harmonics までと33 の Acoustic Bass 以降とでは音色の指定の仕方が違うのでしょうか?
ちなみにMidiOutShortMessageでは同じように指定して同じように音が出るのですが…?
ぜひ教えてください!!


479 名前:デフォルトの名無しさん :02/10/13 02:12
>>478
> 皆様方、これは一体どういうことなのでしょうか?

ファイルが壊れているのなら、MIDIうんぬんではなく
ファイル(またはメモリ)操作にバグがあるということでしょ。

480 名前:デフォルトの名無しさん :02/10/13 02:13
MIDIの知識を身につけるまで書き込むな馬鹿

481 名前:デフォルトの名無しさん :02/10/13 11:02
>>465
素直にやねうらお氏のWebページか書籍を読むべし。


482 名前:デフォルトの名無しさん :02/10/13 12:08
>>478
いいかげんにコピペやめれ

483 名前:デフォルトの名無しさん :02/10/13 13:00
ディスクドライブのデバイス名を取得する方法はありませんか?
HDD,CD-ROM、リムーバブルなどです。
ボリューム名の取得ならわかるのですが。。。

484 名前:デフォルトの名無しさん :02/10/13 13:14
デバイスタイプしか分からないんじゃない?

485 名前:デフォルトの名無しさん :02/10/13 15:34
プログラム上からモニタの自動電源オフ機能を無効にするにはどうすれば
いいのでしょうか?
長時間何も入力がなくても画像を提示し続けるプログラムを作りたいのですが。

SystemParametersInfo() の SPI_SETPOWEROFFACTIVE を試してみたら
正常終了したという返事が返ってくるにも拘わらず電源は切れてしまいます。
これはうちのマシンだけの現象なのでしょうか?

どなたか教えてください。環境はWindows98および2000です。

486 名前:デフォルトの名無しさん :02/10/13 16:19
SetThreadExecutionStateでどうよ

487 名前:デフォルトの名無しさん :02/10/13 16:29
>>483
Win98ならレジストリのHKEY_LOCAL_MACHINE\Enum辺りに記録してある。
あとSCSIならInquiryコマンド使うとか。

488 名前:デフォルトの名無しさん :02/10/13 17:07
>>483
エクスプローラで表示されてるものと同じものが得たいならSHGetFileInfo()

489 名前:デフォルトの名無しさん :02/10/13 20:54
Microsoft WindowsのインクルードヘッダはC++で使いにくくて仕方がありません。
例えば、winuser.hの以下の部分。

WINUSERAPI HWND WINAPI CreateWindowExA(…);
WINUSERAPI HWND WINAPI CreateWindowExW(…);
#ifdef UNICODE
#define CreateWindowEx CreateWindowExW
#else
#define CreateWindowEx CreateWindowExA
#endif // !UNICODE

なぜ、#defineでやってしまうのでしょうか?こうすると

MyClass::CreateWindowEx(…);

などがまともにコンパイルされないではありませんか!
これをせめて

WINUSERAPI HWND WINAPI CreateWindowEx(…)
{
#ifdef UNICODE
 return CreateWindowExW(…);
#else
 return CreateWindowExA(…);
#endif // !UNICODE
}

等とやってくれればまだ使い物になると思うのですが、どうでしょう?
このようなヘッダがどこかに存在するということはないでしょうか?

490 名前:デフォルトの名無しさん :02/10/13 21:29
>489
とりあえず引数も正確に書いてみろや。

491 名前:デフォルトの名無しさん :02/10/13 21:34
>>490
ハア?

492 名前:デフォルトの名無しさん :02/10/13 21:42
名前がぶつかる悲劇か・・・

493 名前:デフォルトの名無しさん :02/10/13 22:18
>>491
> ハア?

とか言ってる暇合ったら、>>490 の言うように CreateWindowExW() と CreateWindowExA() の引数の型をちゃんと書いてみなよ。
あんたの書いてる CreateWindowEx() の引数をどうすればいいか悩むと思うから。

494 名前:デフォルトの名無しさん :02/10/13 22:26
>>493
ハア?

WINUSERAPI HWND WINAPI CreateWindowEx(
#ifdef UNICODE
 …
#else
 …
#endif
)
{
 …
}

495 名前:デフォルトの名無しさん :02/10/13 22:37
>>493
ハア?

WINUSERAPI HWND WINAPI CreateWindowEx(
  DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName,
  DWORD dwStyle, int X, int Y, int nWidth, int nHeight,
  HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam)
{
 …
}

496 名前:デフォルトの名無しさん :02/10/13 22:39
>>494-495
lccやmingwのヘッダはそうなってるけど
それだと#define UNICODEして明示的にANSI版を呼び出したいとき
(あるいはその逆)ではまる罠

497 名前:デフォルトの名無しさん :02/10/13 22:46
> それだと#define UNICODEして明示的にANSI版を呼び出したいとき
> (あるいはその逆)ではまる罠

CreateWindowExWかCreateWindowExAを呼べばいいだけ。

498 名前:デフォルトの名無しさん :02/10/13 22:51
>>494
ププッ、やっとわかったか。
で、あんたの方法だとラップ関数を経由するから、それが嫌だったんだろ。

499 名前:デフォルトの名無しさん :02/10/13 22:57
まあ実際のところは、関数定義をヘッダに入れるなんて嫌だな。
実体はLibファイルにでも入れて、それを切り換える方がいいかも。

500 名前:デフォルトの名無しさん :02/10/13 23:02
>>498
> ププッ、やっとわかったか。

( ´,_ゝ`) プッ

自分の勘違いは素直に認めた方がいいよ。


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