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


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

Win32API質問箱 Build41
501 名前:デフォルトの名無しさん :2006/03/25(土) 12:27:05
>>500
WM_ACTIVATEAPPじゃダメなんか?

502 名前:デフォルトの名無しさん :2006/03/25(土) 12:33:26
全ての流れを掌握してるシステムより先に検知することなどできはしない

503 名前:デフォルトの名無しさん :2006/03/25(土) 12:39:16
キーボードドライバになんかかませばOSより先に知れるが。

504 名前:デフォルトの名無しさん :2006/03/25(土) 12:46:46
そんなことを知ってるヤツがここで聞くかよw

505 名前:500 :2006/03/25(土) 13:08:30
えっと別に抑止したいとかOSより先にっとかゆんじゃなくて、
タイミングが知りたいだけなんですが…
WM_ACTIVATEAPPはAlt + Tabによる切り替えなのか
判断できないと思うんですけど、何か方法があるんでしょうか?
クリック操作でウィンドウが背後に回る時とかも来ますよね…

506 名前:デフォルトの名無しさん :2006/03/25(土) 13:20:30
GetKeyState取るとか。
フック掛ければ早そうだが。

507 名前:デフォルトの名無しさん :2006/03/25(土) 13:57:59
フックかければ、ユーザモードアプリより先に取れるはずだよ。
昔、それで、Alt+Tabを独自アプリに切り替えるプログラムがサンプルで Dr.GUIに出てたはず。


508 名前:デフォルトの名無しさん :2006/03/25(土) 14:01:56
win2000とかなら取れるけどwin9x系だと取れないことない?
以前winキーのフックができなくて困った記憶がある

509 名前:デフォルトの名無しさん :2006/03/25(土) 14:04:31
ローレベルフックしようとしたということではあるまいな

510 名前:デフォルトの名無しさん :2006/03/25(土) 14:06:50
そうそうローレベルフックしようとしてたような希ガス
だってローレベルじゃないとWinキー拾えないっしょ?

511 名前:510 :2006/03/25(土) 14:08:52
記憶が定かじゃないんで間違ってるかもw

512 名前:デフォルトの名無しさん :2006/03/25(土) 16:42:52
同じくWinキーはローレベルフックでないと駄目だった記憶が…

513 名前:デフォルトの名無しさん :2006/03/25(土) 18:35:02
はじめまして 
同じDLLをLoadLibraryで複数ロードした場合
h1=LoadLibrary("test.dll")
h2=LoadLibrary("test.dll")
インスタンスが複数できるイメージでいたのですが
あくまでもインスタンスは1つなんですね
これを上記 h1,h2で個別のメモリを共有しない方法あります?
検索すると逆に アプリケーション間でメモリを共有する
方法はたくさん載ってるのですが
よろしくお願いします




514 名前:デフォルトの名無しさん :2006/03/25(土) 18:58:03
>>513
test.dllを別名で保存してロードすればいい

515 名前:デフォルトの名無しさん :2006/03/25(土) 21:36:22
LoadLibraryがやってることを全て自前で実装してしまえばどうとでもできる。

516 名前:デフォルトの名無しさん :2006/03/25(土) 22:04:11
モーダルダイアログをモードレスダイアログのように親ウィンドウとアクティブ/非アクティブ
などの動作を共有する方法はないでしょうか?
別のウィンドウに親と自ウィンドウが隠されて、親ウィンドウがアクティブになった歳に
一緒に前面にくるような仕組みを行いたいのです、よろしくお願いします。

517 名前:デフォルトの名無しさん :2006/03/25(土) 22:13:01
モーダルといえば、ふつうそうなるけど。
モードレスのときに、モーダルのように、親からアクティブにしてほしい、ってことか?

518 名前:デフォルトの名無しさん :2006/03/25(土) 22:30:11
モーダルダイアログしか作成できないので、擬似的にでもモードレスと同じ動作をしたいのです。

現状では、スレッドを作成してモーダルダイアログを作成して、親ウィンドウと別々の
動作を可能にしているのですが、親ウィンドウが前面に出てくる時に
自ダイアログが前面に来ないのでこれをモードレスと同じような動きを作りたいと思って
質問させていただいています。

519 名前:デフォルトの名無しさん :2006/03/25(土) 22:35:14
モーダル、モードレスじゃなく、ウィンドウの親子関係の問題の気がするが…

520 名前:デフォルトの名無しさん :2006/03/25(土) 22:54:16
どうにかしてモーダルダイアログのHWND持ってくる必要があるが、
SetWindowPosとかでZオーダー変えればいいんじゃねーの?

つーか、

> モーダルダイアログしか作成できないので

コレがさっぱりワカンネ

521 名前:デフォルトの名無しさん :2006/03/25(土) 22:59:59
モーダルにしたければ、親ウインドウを無効にするだけでできるんだが、
まさかリソース系の専用のAPIを使わなければできないとか思ってるのか?

522 名前:デフォルトの名無しさん :2006/03/25(土) 23:06:12
モーダルで作成して、SetParentで親ウィンドウを指定したのですが
親ウィンドウ内にダイアログが作成されてしまいました。

モードレスも作成は出来るのですが、メッセージループにIsDialogMessageをかませられないので
正常に動作しなかったのです。

523 名前:デフォルトの名無しさん :2006/03/25(土) 23:08:56
ウインドウスタイルの設定すらまともにできないのなら、
猫のページを見て、やり方を覚えてからにしろ。

524 名前:デフォルトの名無しさん :2006/03/25(土) 23:36:46
>>513
逆に聞くが、なんで別のメモリにしたいの?

525 名前:デフォルトの名無しさん :2006/03/26(日) 00:03:09
スレッドセーフじゃないDLLを使わなくちゃいけなかったときに
>>514の方法をやったことがあるな。
>>513が同じ理由なのかは知らんけど。

526 名前:デフォルトの名無しさん :2006/03/26(日) 01:49:41
>>525
それよりも、スレッドセーフにするラッパーDLL作った方がいいんじゃない?

527 名前:デフォルトの名無しさん :2006/03/26(日) 08:18:02
>>526
kwsk

DLLの関数Aを呼んだあとで関数Bを呼ぶんだけど、
Aの結果を受けてBの動作が変わるという仕様だった。
「Aの結果」というのを、たぶんグローバル変数で持ってたんだな。
で、マルチスレッドで問題が起きた、と。
そのときの俺には>>514以外にいい方法が思いつかなかったんだ。

528 名前:デフォルトの名無しさん :2006/03/26(日) 09:49:45
>>520
ダイアログボックスを作るのにはDialogBox関数しかないとか思っているオチではないかと

529 名前:デフォルトの名無しさん :2006/03/26(日) 11:55:12
CreateDialogだろ、知ってるよ。IsDialogMessageをメッセージループに入れられないから
正常に動作しないんだよ。
自己解決するのでもう質問への回答はいらないです、失礼します。

530 名前:デフォルトの名無しさん :2006/03/26(日) 11:56:29
>>10
研究成果は国民の共有財産だ。
即物的なものにしか価値を認めないDQNにはわからないかもしれないがね。

531 名前:デフォルトの名無しさん :2006/03/26(日) 12:00:19
  _, ._
Σ(゚Д゚) ←>>10

532 名前:デフォルトの名無しさん :2006/03/26(日) 12:11:07
>>527
ラッパーDLL内で元のDLLをCopyFile

533 名前:デフォルトの名無しさん :2006/03/26(日) 12:27:36
>>10は三週間も経った後に
見当違いのレスされてカワイソス

534 名前:デフォルトの名無しさん :2006/03/26(日) 13:31:03
>>529
本当にしたいことを捨て台詞とともに書くようじゃ、まっとうな回答は得られる訳ないな

535 名前:デフォルトの名無しさん :2006/03/27(月) 15:27:13
まともな質問もできないから自分に逆切れしてるだけかと

536 名前:デフォルトの名無しさん :2006/03/27(月) 22:19:44
エディットボックスでダブルクリックを検知したいんですけど、どうすればよいでしょうか?

537 名前:デフォルトの名無しさん :2006/03/27(月) 22:49:02
勇気で補え

538 名前:デフォルトの名無しさん :2006/03/27(月) 22:50:09
ttp://www14.big.or.jp/~ken1/tech/tech9.html
ここの下記のコード、コピっても全く反応がありません。
case WM_PAINT:
{
PAINTSTRUCT ps;

hdc = BeginPaint(hWnd , &ps);

Blit(hdc,hdc,0,100,50,50,400,260,RGB(0,0,0));

EndPaint(hWnd , &ps);
}
break;
どこが悪いか教えてください。お願いします。

539 名前:デフォルトの名無しさん :2006/03/27(月) 22:54:21
>>536

Edit Boxぐらい自前で作れるよ。そうすりゃ簡単。

どうしても、いやならメッセージをフックしろ。


540 名前:デフォルトの名無しさん :2006/03/27(月) 23:00:02
GDIナツカシス
>>538
透過部分を黒(0)、描画部分を白(1)にしたマスク画像を作って
まずマスク画像をBitBleでラスタオペレーションにSRCPAINTで描画、
そのあと本画像をSRCANDで描画すると透過処理できる

「背景とマスクをSRCPAINT(論理和)で結合し、そのあとSRCAND(論理積)で結合することによって
黒(0)の部分は全て0になり、白(1)の部分だけに描画される」

とか俺のAPIメモに書いてあった

541 名前:デフォルトの名無しさん :2006/03/27(月) 23:00:42
フックってDLL作るのがメンドイよなー
実行ファイルでも大丈夫って噂を聞いたが本当だろうか

542 名前:デフォルトの名無しさん :2006/03/27(月) 23:04:34
前提条件が他プロセスなのか?
情報を小出しにしないで、できる限り説明してから質問しろ。

543 名前:デフォルトの名無しさん :2006/03/27(月) 23:05:49
>>536
NM_DBLCLK or サブクラス化

544 名前:デフォルトの名無しさん :2006/03/27(月) 23:09:15
>>539
どうやって作るのかも言えよ!
つかえねえなボケが。

545 名前:デフォルトの名無しさん :2006/03/27(月) 23:24:43
EditBoxくらい、っていうけど、ちゃんとしたEditBox作るのは結構大変だよ。
たとえば、「右から左へ読む」とか「UNICODE制御文字の挿入」とか。

546 名前:デフォルトの名無しさん :2006/03/27(月) 23:30:13
大変って何が大変なんだ? アルゴリズムを考えるのが大変なら、自分の脳味噌を呪えよ。


547 名前:デフォルトの名無しさん :2006/03/28(火) 08:49:14
エディットボックスのダブルクリック検知くらいでフックとかアホかと・・・


548 名前:デフォルトの名無しさん :2006/03/28(火) 08:51:00
>>543
NM系はコモンコントロールの通知メッセージで標準コントロールじゃない


549 名前:デフォルトの名無しさん :2006/03/28(火) 09:31:27
>>548
御意

550 名前:デフォルトの名無しさん :2006/03/28(火) 10:33:51
故にサブクラス化にしる

551 名前:デフォルトの名無しさん :2006/03/28(火) 12:13:40
>>540
ありがとうございます。

552 名前:デフォルトの名無しさん :2006/03/28(火) 16:26:02
すみません、CreateFont/CreateFontIndirectで、固定ピッチの太字フォントを強制することは出来ますでしょうか?

LOGFONT logFont = {0};
HFONT hFont;
HDC hDC = GetDC(NULL);

logFont.lfHeight = nHeight;
logFont.lfWidth = 0;
logFont.lfWeight = bBold ? FW_BOLD : FW_NORMAL;
logFont.lfCharSet = SHIFTJIS_CHARSET;
logFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont.lfQuality = DEFAULT_QUALITY;
logFont.lfPitchAndFamily = FIXED_PITCH | FF_DONTCARE;
_tcscpy(logFont.lfFaceName, _T(pszFontName));

hFont = CreateFontIndirect(&logFont);

こんなコードを書いているのですが、FW_NORMALではフォント幅が
たとえば半角8pixel/全角16pixelで全て固定できるのですが
FW_BOLDの場合は9pixelとか17pixelとかの半端な文字が出てしまいます。

何か方法がありましたらご教示頂けませんでしょうか。

553 名前:デフォルトの名無しさん :2006/03/28(火) 16:36:14
>>552
8+1→9
16+1→17

554 名前:デフォルトの名無しさん :2006/03/28(火) 16:45:39
・日本語をあきらめ、Courier等を使う。
・太字描画処理を自分でやる。

555 名前:デフォルトの名無しさん :2006/03/28(火) 16:52:00
それを聞いて思ったんだが、オマイラもちろん
コード書くときのフォントはCourier(New)だよな!?

556 名前:デフォルトの名無しさん :2006/03/28(火) 16:54:57
Lucida Console です。


557 名前:デフォルトの名無しさん :2006/03/28(火) 17:02:57
ああ...書き方がまずかったですね、すみません

・lfWidthを8と指定しても9になる
・全角が半角の2倍にならない

など、FW_BOLD指定時とFW_NORMAL指定時でフォントの論理的な属性が
異なってしまう点で行き詰まっています。

明示的に指定した値そのもので、かつ全角が半角のきっちり倍になるような
太字フォントで描画することは可能でしょうか?

558 名前:デフォルトの名無しさん :2006/03/28(火) 17:03:05
自作フォントです

559 名前:デフォルトの名無しさん :2006/03/28(火) 17:04:58
目が見えません

560 名前:デフォルトの名無しさん :2006/03/28(火) 17:08:04
>>554, 558
無理ですか...ありがとうございました。

561 名前:デフォルトの名無しさん :2006/03/28(火) 17:09:29
太さがNGなら色で区別つければ?
# 多分見難いかもしれんけど・・・

562 名前:デフォルトの名無しさん :2006/03/28(火) 17:16:46
>>558
うp

563 名前:デフォルトの名無しさん :2006/03/28(火) 17:43:01
固定ピッチのフォントは、ピッチが固定してるだけであって、2byte文字が1byte文字の2倍の幅とは限らない。
自前のウィンドウに描画するなら、1文字づつDrawTextすれば?
あるいは、2倍幅になるようなlfWidthのみを使う。


564 名前:563 :2006/03/28(火) 17:49:54
>固定ピッチのフォントは、ピッチが固定してるだけであって、2byte文字が1byte文字の2倍の幅とは限らない。
(追記) BOLDにしなくてもサイズによっては、2倍になりません。



565 名前:563 :2006/03/28(火) 17:51:32
>あるいは、2倍幅になるようなlfWidthのみを使う。
(訂正)あるいは、2倍幅になるようなlfHeightのみを使う。

566 名前:デフォルトの名無しさん :2006/03/28(火) 18:13:22
プログラミングにMSゴシック使っている俺は負け組?

567 名前:デフォルトの名無しさん :2006/03/28(火) 18:39:37
基本でしょう

568 名前:デフォルトの名無しさん :2006/03/28(火) 19:18:49
> 1文字づつDrawTextすれば?
ClearTypeとの相性最悪だから俺は好きでない。

569 名前:デフォルトの名無しさん :2006/03/28(火) 22:16:32
東風明朝
さざなみ明朝

1 l I | の区別が楽。
0の中に点があれば、もっとよかったけど。

570 名前:デフォルトの名無しさん :2006/03/28(火) 23:56:48
SMゴシップ

571 名前:デフォルトの名無しさん :2006/03/29(水) 00:04:03
>>557
フォントの指定を持って厳密におこなうと、lfWidthが8の場合も取れる事がある。
ただし、WIFE時代のフォントだけじゃないかな。日本語だと。
列挙して獲得 DCにセット後、論理フォントで確認、まですれば完璧。

一般的には、文字を描画するときに文字間が指定できる API があるから、それを使う。


572 名前:デフォルトの名無しさん :2006/03/29(水) 12:18:47
IMEで入力中というか、未確定文字列があるかどうかを知るには
どの関数が適してますか?

573 名前:デフォルトの名無しさん :2006/03/29(水) 12:31:26
質問です
自分の作ったアプリがWinXPでは動くけど、9xでは動かない時、原因としてどのような事が考えられるでしょうか。
・WINVER, _WIN32_WINNT, _WIN32_WINDOWSのバージョンを適切に設定する
・ユニコードビルドしない
くらいしか思いつかないのですが、何か他に気をつけなければならない点があったら教えていただけないでしょうか

574 名前:デフォルトの名無しさん :2006/03/29(水) 12:52:38
>>573
XPにも9xにも実装されている関数だとしても油断してはならない。
細かい差異が存在する可能性がある。

たとえばCreateWindow(Ex)では、
NTならHINSTANCEはヌルにして良いが、9xではヌルにできないと言う違いがある。

そんな具合なんでエラーになる箇所で呼んでいる関数をMSDNなんかで調べてみな。

575 名前:デフォルトの名無しさん :2006/03/29(水) 12:54:47
・IEのバージョン
・使用しているAPIが9xに対応したものかどうか

576 名前:デフォルトの名無しさん :2006/03/29(水) 12:57:42
>>574
なるほど、そりゃキツい
というか、9x系列のOSを持ってないので、9xでも動くように開発するのは無理そうですね…

577 名前:は@ c178.016.c3-net.ne.jp ◆cplnFO9T0I :2006/03/29(水) 13:07:19 ?
GetDlgItemTextを行うためにDialogBoxで呼び出したダイアログボックスのハンドルを知る方法って無いですか?

578 名前:デフォルトの名無しさん :2006/03/29(水) 13:18:36
教えてオーナードロー&visual-styleに詳しい人

Vistaでプッシュボタンにカーソルを合わせると、じわぁと色が変るのですがあれってどうやるんでしょうか?

579 名前:デフォルトの名無しさん :2006/03/29(水) 13:21:08
>>577
LRESULT CALLBACK About( HWND hDlg,....)
{
n = hDlg;

......
}

これじゃダメなの?

580 名前:578 :2006/03/29(水) 13:44:55
自己解決(してないけど)

MSDNフォーラムみてたら
「まだサポートしてない、Beta2辺りで新しいAPIを公開するかもしれないから待ってね」(適当に訳した)
とあった…orz

>>577
つ FindWindow()
ってDialogBox()で指定するDLGPROCのHWNDでいいんジャマイカ?

581 名前:デフォルトの名無しさん :2006/03/29(水) 15:05:33
ここで質問していいのかわからないのですけど、
「ファイル名を指定して実行」ダイアログのログってどこに保存されてます?

582 名前:デフォルトの名無しさん :2006/03/29(水) 15:12:18
レジストリのどこか

583 名前:デフォルトの名無しさん :2006/03/29(水) 15:13:37
>>581
レジストリ
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU

584 名前:デフォルトの名無しさん :2006/03/29(水) 15:26:40
ありがとうございました。

585 名前:デフォルトの名無しさん :2006/03/29(水) 15:30:43
パソコン初心者も見てるんだ

586 名前:は@ c178.016.c3-net.ne.jp ◆cplnFO9T0I :2006/03/29(水) 15:41:45 ?
>>579
これで実行したものの、c_tempの中身が空になって終わりなんですよ。
ちなみにEndDialog(hDig, LOWORD(wParam));の前にブレークポイントを置いて確認しました。
LRESULT CALLBACK WProc_DISC_NAME(HWND hDig, UINT message, WPARAM wParam, LPARAM lParam){
switch(message){
case WM_INITDIALOG :
return FALSE;
case WM_COMMAND :
switch(LOWORD(wParam)){
case BTN_OK :
GetDlgItemText(hDig, TXT_DB, c_temp, sizeof(c_temp));
EndDialog(hDig, LOWORD(wParam));
return TRUE;
break;
default:
break;
}
break;
default:
break;
}
return FALSE;
}

587 名前:は@ c178.016.c3-net.ne.jp ◆cplnFO9T0I :2006/03/29(水) 15:49:23 ?
>>586
訂正
×:空になって
○:空のままで

588 名前:デフォルトの名無しさん :2006/03/29(水) 15:52:44
c_tempの宣言はちゃんとしてる?
TXT_DBというコントロールにちゃんと文字列はあるの?
なんでGetDlgItemTextの戻り値をチェックしないんだ?

589 名前:は@ c178.016.c3-net.ne.jp ◆cplnFO9T0I :2006/03/29(水) 16:28:17 ?
>>588
>c_tempの宣言はちゃんとしてる?
グローバル変数として宣言してあります。
>TXT_DBというコントロールにちゃんと文字列はあるの?
TXT_DBは別のダイアログでした。
>なんでGetDlgItemTextの戻り値をチェックしないんだ?
クイックウォッチで無いと返されました。
結論:バグ取りに手伝わせてしまい非常にすみませんでした。
(何故かメインのダイアログにあるTXT_DBをGetDlgItemTextの引数に指定していた上に
このダイアログのエディットボックスのIDをちゃんと変えていなかった為。
ちゃんとIDを決めてそのIDを引数にしたら上手く取り込めました。)

590 名前:デフォルトの名無しさん :2006/03/29(水) 20:35:25
>>555
Fixed98
斜線つきの0が好きなので

>>576
難しいけど無理ではない

591 名前:デフォルトの名無しさん :2006/03/29(水) 20:39:57
>555
Anonymous  最近聞いた。

592 名前:デフォルトの名無しさん :2006/03/29(水) 20:46:26
>>555
みそ字 が欲しいなぁ

593 名前:デフォルトの名無しさん :2006/03/29(水) 23:10:26
タスクトレイアイコンの上でマウス動かすとツールチップ出てくるけど、
あれをコードで出すにはどうすれば良いの?

594 名前:デフォルトの名無しさん :2006/03/29(水) 23:21:45
TextOut

595 名前:593 :2006/03/29(水) 23:48:44
>>594
それってオレに対するレス?
だとしたらもう少しヒントお願い…

596 名前:デフォルトの名無しさん :2006/03/30(木) 00:06:24
>>593
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shell_notifyicon.asp
これじゃないのか?ちょっと検索したらすぐ見付かったが

597 名前:デフォルトの名無しさん :2006/03/30(木) 00:49:25
メモリデバイスコンテキスト関連の質問です。

SelectObject (hdcMemM1, ii[0]) ;
SelectObject (hdcMemM2, ii[1]) ;

BitBlt (hdc, pos[0].x, pos[0].y, cxSource, cySource, hdcMemM1, 0, 0, SRCCOPY) ;
BitBlt (hdc, pos[1].x, pos[1].y, cxSource, cySource, hdcMemM2, 0, 0, SRCCOPY) ;

ここの部分を、下に直すと上手く動かなくなります。

SelectObject (hdcMemM1, ii[0]) ;
SelectObject (hdcMemM2, ii[0]) ;

BitBlt (hdc, pos[0].x, pos[0].y, cxSource, cySource, hdcMemM1, 0, 0, SRCCOPY) ;
BitBlt (hdc, pos[1].x, pos[1].y, cxSource, cySource, hdcMemM2, 0, 0, SRCCOPY) ;

出力したい画像が同じで、bitbltを使う場合同じ画像の出力がうまくいきません。
この場合メモリデバイスコンテキストはどのようにするのがヨイんでしょうか?

598 名前:593 :2006/03/30(木) 00:50:57
>>596
バルーンはNIM_MODIFYすると直ぐ表示されるけど、
ツールチップはNIM_MODIFYしても何か表示されないっぽくて困ってます

599 名前:デフォルトの名無しさん :2006/03/30(木) 00:54:11
>>597
なんで転送元二つも必要なん?
画像が同じなら一つでいいじゃん。

600 名前:デフォルトの名無しさん :2006/03/30(木) 01:05:06
>>599
トンクスです。
ビットマップハンドルをコピーしてるのが良くなかった気がする。。
デバイスコンテキストハンドルのコピーで増やしてみる。
デバイスコンテキストだけで、128枚画像あるorz 疲れた

601 名前:デフォルトの名無しさん :2006/03/30(木) 08:27:57
>>597
1つのオブジェクトを複数のデバイスコンテキストが同時にSelectすることは出来ない。

602 名前:デフォルトの名無しさん :2006/03/30(木) 13:23:06
一つの「ビットマップは」だろ。

603 名前:602 :2006/03/30(木) 13:33:28
>>753
動的にメモリを確保したいときに使う。
mallocしてしっかりfreeしないと、メモリリークが激しいよ。うん。激しいよ。

604 名前:602 :2006/03/30(木) 13:34:05
あ・・・っ!激し・・すぎ・・!

605 名前:デフォルトの名無しさん :2006/03/30(木) 13:34:45
>>753
動的にメモリを確保したいときに使う。
mallocしてしっかりfreeしないと、メモリリークが激しいよ。うん。激しいよ。

606 名前:602 :2006/03/30(木) 13:35:16
あ・・・っ!激し・・すぎ・・!

607 名前:602 :2006/03/30(木) 13:38:24
誤爆しましたorz

C言語なら俺に聞け! Part 124
http://pc8.2ch.net/test/read.cgi/tech/1142302804/752-760

608 名前:デフォルトの名無しさん :2006/03/30(木) 15:55:04
つまり

SelectObject (hdcMemM1, ii[0]) ;

BitBlt (hdc, pos[0].x, pos[0].y, cxSource, cySource, hdcMemM1, 0, 0, SRCCOPY) ;
BitBlt (hdc, pos[1].x, pos[1].y, cxSource, cySource, hdcMemM1, 0, 0, SRCCOPY) ;

609 名前:デフォルトの名無しさん :2006/03/30(木) 19:39:01
>>605
malloc/freeだとフラグメント解消できないから、
プロはHeapCreate(0,0,0)してHeapAllocを使う。

610 名前:デフォルトの名無しさん :2006/03/30(木) 19:44:17
CreateThreadもリークしますよね?
どうしよ・・・・

611 名前:デフォルトの名無しさん :2006/03/30(木) 23:59:01
C++NETでSMTPによるメール送信プログラムを実装しました
次にSocketを使用して、SMTPメール送信するプログラムの実装をして見ようと
思うのですが、大まかな流れは
1 Socketの初期化
2 TCP/IPを設定
3 SMTP設定
4 Socketを閉じる
こんな感じでいいでしょうか?


612 名前:デフォルトの名無しさん :2006/03/31(金) 06:21:07
普通はプロトコルとかエンコードとかを考えると思うが

613 名前:デフォルトの名無しさん :2006/03/31(金) 06:33:09
うむ
まずはプロとコルだな
プロをマスターした後にコルを習得せよ

614 名前:デフォルトの名無しさん :2006/03/31(金) 08:38:24
ドトネトがやってくれるんじゃね

615 名前:デフォルトの名無しさん :2006/03/31(金) 10:25:30
>>610
後始末をすればリークしない

616 名前:デフォルトの名無しさん :2006/03/31(金) 12:32:28
>>611だす
みなさんどうもです
PCからカキコ出来ないので、携帯からです
実は、TC/IPプロトコル部分をrawSocketを用いて実装したくて
WIN32APIをC++でコーディングした方がいいかと思い、このスレで質問させて
もらいましたが、ドットネットでもrawSocketの関数は用意してあるのでしょうか?

617 名前:デフォルトの名無しさん :2006/03/31(金) 12:47:40
サンプルはpingだけどこのあたり。
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/advanced.html#rawsocket

618 名前:デフォルトの名無しさん :2006/03/31(金) 13:26:05
>>611
Cygwin使えばUnix用のsmtpsendのソースがそのまま使えるよ。
#WinSockは色々互換性がないので注意。
いずれにしても、後はネットワークプログラミングスレにでも。

619 名前:デフォルトの名無しさん :2006/03/31(金) 14:25:38
SMTP (Simple Mail Transfer Protocol)
そんなに難むほど難しいことかな?

620 名前:デフォルトの名無しさん :2006/03/31(金) 17:01:04
HTTPよりはムズイんじゃない?

621 名前:デフォルトの名無しさん :2006/03/31(金) 17:17:34
ウィンドウ内に二つの違う画像を並べるのってどうやるの?
______________
|      |
| ◎ △ |
|____________|

こんな感じで、メニューで開いた画像を左にとかやりたいんだけども


622 名前:デフォルトの名無しさん :2006/03/31(金) 17:20:25
>>620
全然

620が「何処がどうムズイと思うのか」が知りたい


623 名前:デフォルトの名無しさん :2006/03/31(金) 17:21:18
それから、巨大な画像も
描画エリア内に収まるように縮小したりしたいんだけど

画像を扱うTIPがあまりなくて(´・ω・`)

624 名前:デフォルトの名無しさん :2006/03/31(金) 17:22:12
>>621
座標を指定すればいいじゃん

625 名前:デフォルトの名無しさん :2006/03/31(金) 17:23:11
>>623
つ StretchBlt

626 名前:デフォルトの名無しさん :2006/03/31(金) 17:27:10
Win32APIを始めようと、サイトを見ながら導入しようとしました。コンパイラはBorland C++ Compiler 5.5で、
サイトに書いてある通り、bcc32 -W test.c としてコンパイルしても

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.c:
警告 W8057 test.c 9: パラメータ 'hInstance' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 9: パラメータ 'hPrevInstance' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 9: パラメータ 'lpCmdLine' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 9: パラメータ 'nCmdShow' は一度も使用されない(関数 WinMain )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)

このようなエラーが出てしまいます。どこが問題なのか指摘して頂きたいのですが、お願いします。

627 名前:デフォルトの名無しさん :2006/03/31(金) 17:27:44
>>621
好きなように描け。

>>623
好きなように縮小しろ。

>>620
もしや、POP before SMTPとかSMTP認証とかと勘違いしていないか?
SMTP自体はCHAT作るより簡単だぞ。

628 名前:デフォルトの名無しさん :2006/03/31(金) 17:33:31
POP before SMTP だって、ソケット通信さえ出来ればどうということ無いしなあ。

メール関係で一番面倒なのは、メールメッセージそのものを作るところだよ。

629 名前:デフォルトの名無しさん :2006/03/31(金) 17:43:31
>>624-625
ありがd
ちょいと色々いじくってるけどまだ上手くいってない

>>627
それが出来ないから聞いてるんだよ('A`;

あと読み込んだ画像データを
ボタン押したらCUIプログラムに送って実行させるみたいな風にするにはどうしたらいいかな
それが一番やりたい

630 名前:デフォルトの名無しさん :2006/03/31(金) 17:47:50
>>629
つ WinExec

631 名前:デフォルトの名無しさん :2006/03/31(金) 18:11:25
>>626
-Wがあるから大丈夫なはずだけど何でだろう。
間のスペースが全角なのは、ここに書くときにそうしたと思うし。

632 名前:デフォルトの名無しさん :2006/03/31(金) 18:15:09
>>621
位置変えはBitBltの第2、第3引数に普通にあるような。

>>629
CreateProcess。

633 名前:デフォルトの名無しさん :2006/03/31(金) 18:17:33
>>631
そうですか・・・もう少し検索して方法を探してみる事にします。レス有難う御座います。

634 名前:デフォルトの名無しさん :2006/03/31(金) 18:27:07
-tWでないっけ?

635 名前:デフォルトの名無しさん :2006/03/31(金) 18:37:13
windows.hを挿入してないとか
PlatformSDKをいんぽしていないとか

もしそうなら抜くぞ

636 名前:デフォルトの名無しさん :2006/03/31(金) 18:45:45
>>634
両方試してみましたができませんでした。
>>635
サンプルコードですので、間違ってはいないと思うのですが・・・。
SDKをもう一度インストールし直してみます。

ダメであれば諦めます。有難う御座いました。

637 名前:デフォルトの名無しさん :2006/03/31(金) 18:48:20
>>626
というか真面目に学ぼうとするなら今更BCCなんて使うなや

638 名前:デフォルトの名無しさん :2006/03/31(金) 19:00:50
そうだな
VC++2005ExpressEditionが無償で配布されてるんだからそっち使った方がいい
俺もBCCから乗り換えた

639 名前:デフォルトの名無しさん :2006/03/31(金) 19:37:16
そして、LPTSTR hoge="hoge"; みたいなサンプルでハマる、と。

640 名前:デフォルトの名無しさん :2006/03/31(金) 19:41:56
プロジェクトの文字セット設定を変えればよろし

641 名前:デフォルトの名無しさん :2006/03/31(金) 19:55:01
最初からTEXTマクロとかTCHARを使って書けばいいんだけど、最初はウェブからコピペしちゃうよね。
VS2005でもエラーがなく通るのはPetzoldのサンプルコードぐらいか。

642 名前:デフォルトの名無しさん :2006/03/31(金) 20:13:43
TEXTマクロなんか使わなくても普通に通る

643 名前:デフォルトの名無しさん :2006/03/31(金) 20:32:59
デフォルトで_UNICODEとなってからはTEXTとかTCHARとかやめてwchar_t, L""で書いてる

644 名前:デフォルトの名無しさん :2006/03/31(金) 20:34:13
MFCのウィザードで自動で作られるようなメニューのサンプルってどこかにない?
開く・貼り付け・ヴァージョン情報あたりで十分なんだけど

645 名前:デフォルトの名無しさん :2006/03/31(金) 20:51:08
できね・・・Orz。最後に一つだけ質問させて下さい。SDKは25MBをDLして、CoreSDK-common.1.2.cab
のフォルダをbcc32.exeと同じ場所に置けばいいのですよね?

646 名前:デフォルトの名無しさん :2006/03/31(金) 20:58:22
>>643
引数がLPCTSTRになってる奴にwchar_t*って渡せたっけ?と思って
MSDNライブラリにあった型定義一覧を探してたが見つからない・・・
誰かどこにあったか知らない?

647 名前:デフォルトの名無しさん :2006/03/31(金) 21:10:55
そもそも簡単なサンプルのコンパイルならPSDKイラネはずだが。
最低限のSDKはBCCに付いてくる。

648 名前:デフォルトの名無しさん :2006/03/31(金) 21:11:48
>>646
LPCTSTRで検索したら普通に出てきたぞ
#ifdef UNICODE
typedef LPCWSTR LPCTSTR;
#else
typedef LPCSTR LPCTSTR;
#endif
typedef CONST WCHAR *LPCWSTR;
typedef __nullterminated CONST CHAR *LPCSTR;
なのでLPCTSTRにwchar_t*は渡せない
const wchar_t*なら渡せる

649 名前:デフォルトの名無しさん :2006/03/31(金) 21:15:30
>>648

非constなポインタ引数にはconstポインタは渡せない。

650 名前:デフォルトの名無しさん :2006/03/31(金) 21:19:27
>>647
自分には無理な様なので脳内コンパイルで楽しみます。ご迷惑お掛けしました。
助言して下さった方々有難う御座いました!諦めます。

651 名前:デフォルトの名無しさん :2006/03/31(金) 21:21:46
実は警告とエラーの区別が付いていないだけと予想。

652 名前:デフォルトの名無しさん :2006/03/31(金) 21:33:37
>>651
ぬォォォォォォォォォぉぉぉできたーーーーーーーーーー!!!!
出来ましたよ!警告とエラーと言う意味深な発言をしてくれたので、まさかと思い実行しましたら
ウインドウが表示されました。有難う御座います。
コンパイル結果が警告が出たので先入観から無理と判断してしまってました・・・。
警告が出て違和感ありますが、出来てよかったです。

653 名前:648 :2006/03/31(金) 21:36:44
>>646
漏れも>>649も寝ぼけてたようだww
(>>649の二行目は正しい)
LPCTSTRにはwchar_t*もcons wchar_t*も渡せる。
誤解のないように他のも言っておくと、
当然const LPCWSTR(=const wchar_t* const)やconst LPWSTR(wchar_t* const)も渡せる
(シグネチャは同じだしね)

654 名前:デフォルトの名無しさん :2006/03/31(金) 21:37:27
ちゅか誰か俺の644に応えて

655 名前:デフォルトの名無しさん :2006/03/31(金) 21:40:34
>>652
Warning も全部解決しる
メッセージをよーーーーーく読めばどうすれば分かるはず

656 名前:デフォルトの名無しさん :2006/03/31(金) 22:08:24
C++限定の方法。
int WINAPI WinMain(HINSTANCE, HINSTANCE, char*, int)

657 名前:デフォルトの名無しさん :2006/03/31(金) 22:18:36
>>654
猫でも分かる

658 名前:デフォルトの名無しさん :2006/03/31(金) 22:27:30
ある区間のコードだけは他のスレッドに制御が移らないように出来ますか?

659 名前:デフォルトの名無しさん :2006/03/31(金) 22:28:56
書籍やウェブサイトどおりに
int WINAPI WinMain(・・・){
・・・
return msg.wParam;
}

とすると警告が出るのですが、return (int)msg.wParam; にしたほうがいいんですか?

660 名前:デフォルトの名無しさん :2006/03/31(金) 22:31:05
無害な警告だし、明示的にキャストして消しても問題ないと思われ

661 名前:デフォルトの名無しさん :2006/03/31(金) 22:34:00
>>660
ありがとうございます。周りに合わせてキャストせずに放っておくことにします。

662 名前:デフォルトの名無しさん :2006/03/31(金) 22:34:33
x64 だと問題があるが、まあ意味はないな

663 名前:デフォルトの名無しさん :2006/03/31(金) 22:35:16
>>655
どう試してみても消える事が無いです。基本から始めていきいつか警告の意味を理解してみます。
WinAPIは楽しいですね。

664 名前:デフォルトの名無しさん :2006/03/31(金) 22:37:06
俺はstatic_castする。

665 名前:デフォルトの名無しさん :2006/03/31(金) 22:43:16
>>664
誰もそんなこと聞いてねーよボケ
だいたいC++かどうかもワカンネーだろ

666 名前:デフォルトの名無しさん :2006/03/31(金) 22:57:32
_tWinMainにしろ。

667 名前:デフォルトの名無しさん :2006/03/31(金) 23:19:59
>>658
ひたすらSuspendThread

668 名前:デフォルトの名無しさん :2006/03/32(土) 00:34:25
>>658

カーネルレベルで共有セマフォをねじる。
または、それが発生するような処理を「中途半端」に実行する。

スレッドレベルならば、リソースは共有されているわけで、ひたすら suspend すりゃいいと言うのが妥当。


669 名前:デフォルトの名無しさん :2006/03/32(土) 00:59:37
スレッドの優先順位を最高レベルに上げる。

670 名前:デフォルトの名無しさん :2006/03/32(土) 01:28:18
>>669

それだけは、やるな。

止めたいスレッド以外、つまりほかのプロセスまで止まる。
システムがCPUパワーをどのように割り振ってるか調べればわかるはず。



671 名前:デフォルトの名無しさん :2006/03/32(土) 04:41:34
>>670
調べるからAdvanced Windowsくれ。

672 名前:デフォルトの名無しさん :2006/03/32(土) 08:43:17
_tmemset() なぜないんだ

673 名前:デフォルトの名無しさん :2006/03/32(土) 09:27:42
>>672
つstd::fill_n
C++だけど。

674 名前:デフォルトの名無しさん :2006/03/32(土) 09:28:55
>>670
他のプロセスを止めてはいけないという前提条件は定義されていない。

675 名前:デフォルトの名無しさん :2006/03/32(土) 09:45:43
CPUが2つ以上あったら、suspendThread以外の手法では
並列実行されるけどそれは、「制御が移らない」という条件を満たすといえるの?

676 名前:デフォルトの名無しさん :2006/03/32(土) 09:51:37
複数のプロセッサを考慮するという前提条件が存在しないが、
それを追加するならプロセスの使用するプロセッサをマスクすればいいだけ。

677 名前:デフォルトの名無しさん :2006/03/32(土) 09:56:58
DualCoreとかHTとかある現状で、マルチスレッドプログラムが
マルチプロセッサを考慮しないのはとっても危険だと思うが。

678 名前:デフォルトの名無しさん :2006/03/32(土) 10:08:27
>>675が思いつかなかった、回避方法は示したが、
解決したら逆にグダグダ文句を言い続ける。
相手に勝利するためのだけの議論のふっかけ乙。

679 名前:デフォルトの名無しさん :2006/03/32(土) 13:49:53
パソコン起動時に壁紙を自動で変更するプログラム作りたいんですが、

壁紙を変更する方法(どのファイルを書き換えればいいか?)と、
起動時にプログラムを自動実行させる方法を教えてください。お願いします。

680 名前:デフォルトの名無しさん :2006/03/32(土) 13:49:55
>>671

わかってるなら、いらないだろ。Advanced Windows。俺のは初版だから古いぞ。


681 名前:デフォルトの名無しさん :2006/03/32(土) 14:15:38
>>679
ファイル名を決め打ちで持っておいて、任意の壁紙ファイルをその名前にコピーするのが簡単。
#IrfanViewやブラウザがやってる方法もこれ。
その決め打ちのファイルを設定するのはレジストリだが、その位はユーザに選ばせてもいいかも。

自動実行は、スタートアップにショートカットを入れてしまうのがいちばん簡単かな。
これも、場合によってはユーザができることだし。

682 名前:デフォルトの名無しさん :2006/03/32(土) 15:08:44
>>679
[HKEY_CURRENT_USER\Control Panel\Desktop]
"Wallpaper"="C:\\WINDOWS\\Walking_Home_by_x_horizon.bmp"
"WallpaperStyle"="0"

この辺。

683 名前:デフォルトの名無しさん :2006/03/32(土) 15:19:55
レジストリで直接変更するとログインし直さないといけなくなるけど。
APIで用意されているのに使わない理由が何かあるの?

684 名前:デフォルトの名無しさん :2006/03/32(土) 15:28:49
>>681,682
おお、なるほど。これなら、出来そうです。サンクス!
>>683
APIであったんですか。調べてみます、サンクス。

685 名前:デフォルトの名無しさん :2006/03/32(土) 16:23:15
リバーコントロールの上にスライダを乗せているのですが
スライダの背景色が描画されてしまいXPだと綺麗に見えません。
そこでリバーをサブクラス化して、WM_CTLCOLORSTATICで
SetBkMode((HDC)wParam, TRANSPARENT);
return (LRESULT)GetStockObject(NULL_BRUSH);
としてみたのですが、背景色が透明になるどころか
なぜか黒くなってしまいました。
原因や解決策をご存知の方はいらっしゃいませんか?

686 名前:デフォルトの名無しさん :2006/03/32(土) 20:00:49
>>684
APIであると言われて調べるのなら
なぜはじめに調べてみないんだろうか…

687 名前:デフォルトの名無しさん :2006/03/32(土) 20:09:56
APIであるなんて考えもしない
俺の場合

688 名前:デフォルトの名無しさん :2006/03/32(土) 21:07:32
ものすごくくだらない機能のAPIがあったような気がしたんだが
なんだっけ?

689 名前:デフォルトの名無しさん :2006/03/32(土) 21:14:19
それはようするに、誰が一番くだらないAPIを見つけられるかという
ネタ振りだな?

690 名前:デフォルトの名無しさん :2006/03/32(土) 21:25:04
CharNextを馬鹿にするな!

691 名前:デフォルトの名無しさん :2006/03/32(土) 21:39:19
ウィンドウが何のフォントを使っているのか調べる方法はあるのでしょうか?
MSDNを調べた結果、GetTextFace()だと思ったのですが、自プロセスのEditコントロールから取得すると何のフォントが使われていても"System"という文字列しか返ってこないようなのですが・・・?


692 名前:デフォルトの名無しさん :2006/03/32(土) 22:56:12
WM_GETFONT

693 名前:デフォルトの名無しさん :2006/03/32(土) 23:33:37
>>690
CharNext()は別に下らなくないだろ

694 名前:デフォルトの名無しさん :2006/04/02(日) 01:42:30
じゃあ、FreeLibraryAndExitThreadとか言ってみるテスツ

695 名前:デフォルトの名無しさん :2006/04/02(日) 02:00:58
画像を窓に表示させたいんだけど
これって勝手にスクロールバーとか出てこないの?

696 名前:Win32API :2006/04/02(日) 03:13:17
出てくるわけねーだろ
甘えんなヴォケ

697 名前:デフォルトの名無しさん :2006/04/02(日) 08:23:01
>>695
検索用キーワード
CreateWindow WS_VSCROLL WM_VSCROLL

698 名前:デフォルトの名無しさん :2006/04/02(日) 09:13:15
>>695
おれもあってもイイと思うがない。
high level の bmp control とか image control。audio control か sound control か
wave control とか。edit control, rich edit control があるもんな。
画像を扱う third party 保護といえば保護なんかな。

win98 時代にも jpeg, tiff などの filter も持っているのに公開していない。
自前で decode しないといけなかった。

API の説明も分かり難いものがある。使う側がテストしながら使うはめになる。
説明書くのを手抜きしたいなら、ソースを公開すればいいと思うんだが。

699 名前:デフォルトの名無しさん :2006/04/02(日) 09:40:48
>>698
( ゚Д゚)・・・

(゚Д゚)・・・

700 名前:デフォルトの名無しさん :2006/04/02(日) 11:03:02
SecureZeroMemory

701 名前:デフォルトの名無しさん :2006/04/02(日) 12:05:56
SetWindowsHook(Ex)でロードされたdllのDllMainは実行されますか?

702 名前:デフォルトの名無しさん :2006/04/02(日) 12:11:58
>>701
DllMain内でOutputDebugStringでも使ってデバッグ出力確認すればいいじゃない

703 名前:デフォルトの名無しさん :2006/04/02(日) 13:45:40
コモンコントロールをリソース無しで(CreateWindow系で)作っています。

この自作コントロール、親がダイアログの場合は何も問題が無いのですが、
親が普通のウィンドウの場合、再描画を行ってくれなくて困っています(例えばタスク切り替え時など)。
手直しする方法を御存知のかた、教えて頂けないでしょうか。

一応、親ウィンドウのWM_PAINTにて、(子の)InvalidateRect等を呼んでみたりしましが、駄目でした。

704 名前:デフォルトの名無しさん :2006/04/02(日) 14:11:20
>>703
親ウィンドウにWS_CLIPCHILDRENが付いてないとか言うなよ。

705 名前:デフォルトの名無しさん :2006/04/02(日) 14:42:37
>>704
はい、それは大丈夫です。
具体的にはWS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS
でやってます。逆に、これを外しても駄目みたいです。

補足で、自作コントロールの方では、一応極力DefWindowProcを各メッセージで呼んでます。

706 名前:デフォルトの名無しさん :2006/04/02(日) 15:20:59
その自作コントロールは、WM_PAINTでちゃんと描画してるか?

707 名前:デフォルトの名無しさん :2006/04/02(日) 15:41:20
>>706
お付き合いどうもです。

例えば自作エディットコントロールなんですが、これを枠だけWM_NCPAINTで自前描画しています。
他の文字や反転処理、プロンプト描画などは全て、DefWindowProcに任せています。
そして一応成功しています。

問題なのはその自作エディットコントロールを一度ShowWindowで非表示>表示したり、
あるいはアプリをAlt+Tabでタスク切り替えしたときでして、この時コントロールの再描画を一切行ってくれません。
(ただこの場合も、そのコントロールにフォーカスが行くと再描画してくれます。)

708 名前:デフォルトの名無しさん :2006/04/02(日) 16:06:51
WM_NCPAINTでBeginPaint使ってるとか言うなよ。

709 名前:デフォルトの名無しさん :2006/04/02(日) 16:10:03
リストボックスを持ったモードレスダイアログを作りたいです。
BCCFormで作ったんですが、上手くいきません。
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_THICKFRAME | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_SETFONT
スタイルがおかしいのでしょうか?

710 名前:デフォルトの名無しさん :2006/04/02(日) 16:11:13
リストビュー(レポートビュー)のカスタムドローで
NMCUSTOMDRAWのrcに正しい値が入ってないのは仕様なの?
x座標はあってたけど、y座標の値がでたらめだった。
LVM_GETSUBITEMRECTで解決したが、半日ほど悩んだ。

711 名前:デフォルトの名無しさん :2006/04/02(日) 17:30:48
>>708
マニュアル通り、GetWindowDC(GetDCEx)です。

どうもこいつは、ウィンドウベースじゃ無理そうだな…

712 名前:デフォルトの名無しさん :2006/04/02(日) 17:59:06
TerminateProcessで殺される事を、
事前に察知させる方法ありませんか?
せめてちゃんとリソースを破棄してから終了したいのです。
この仕様はあまりにも理不尽です。
Terminate呼ぶ代わりにWM_CLOSEみたいな
メッセージを投げるとかの対処しかありませんか?


713 名前:デフォルトの名無しさん :2006/04/02(日) 18:02:30
つまりアレか? メッセージ処理したくないけど終了前になんらかの処理を行いたいと?

714 名前:デフォルトの名無しさん :2006/04/02(日) 18:03:22
>>712
それでリソースの破棄に時間掛けたりあまつさえ無限ループしたりするのか?
馬鹿馬鹿しいイタチごっこだな

715 名前:デフォルトの名無しさん :2006/04/02(日) 18:33:53
とりあえずWM_CLOSEでも送ってみれば?
つーかものすごいバカっぽいな

716 名前:デフォルトの名無しさん :2006/04/02(日) 18:45:14
UNIXならシグナルハンドラでどうにかなるんだがな。

717 名前:デフォルトの名無しさん :2006/04/02(日) 18:52:35
ほう、どうやってUNIXでSIGKILLを処理するのか詳しく聞こうか?

718 名前:デフォルトの名無しさん :2006/04/02(日) 19:57:26
うむ

719 名前:デフォルトの名無しさん :2006/04/02(日) 20:49:13
シングルラインのエディットコントロールでEnterキーを押したときに鳴る
ビープ音を止めるにはどうすればよいでしょうか?
WM_KEYDOWNを捕まえても意味がなかったようです。。

720 名前:デフォルトの名無しさん :2006/04/02(日) 21:28:11
例えば
OKボタン、Cancelボタン、テキストボックスの3つしかないダイアログボックスがあります。
そして、テキストボックスに http://test.jpg などの文字列を入力。
その後OKボタンを押すとダウンロードが始まる仕組みを作りたいのですが、
このダウンロードのプロセスがわかりません。
APIの関数ひとつで出来るような簡単なものを想像しているのですが、実際のところ
どうすれば実現できるのでしょうか

721 名前:デフォルトの名無しさん :2006/04/02(日) 21:29:53
URLDownloadToFile だったっけ?重いファイルだと固まるけど

722 名前:デフォルトの名無しさん :2006/04/02(日) 21:32:33
>>721さま
おぉ!即レスありがとうございます!
さっそくこの情報を元に頑張ってみたいと思います。ありがとうございました。

723 名前:719 :2006/04/02(日) 22:29:27
自己解決しました。
WM_CHARを捕まえてVK_RETURNのときだけ
CallWindowProcを呼ばないようにしたら出来ました。

724 名前:デフォルトの名無しさん :2006/04/02(日) 23:17:56
BMP画像をクライアント領域よりも大きいときは縮小
小さいときは、クライアント領域内に表示っていうのがうまくいかない

誰かおしえてくれ。。。

725 名前:デフォルトの名無しさん :2006/04/02(日) 23:24:44
自分でどこまでできてどこが分からないのかを説明できるようになってからもう一度質問に来い。

726 名前:デフォルトの名無しさん :2006/04/02(日) 23:27:18
クライアント領域を指定して
そこに指定したデータを開いて
クライアント領域に合わせて画像を拡大縮小させるの

全部がわがんね
そんなことを説明してるサイトのアドを教えてよ
もう、疲れた

727 名前:デフォルトの名無しさん :2006/04/02(日) 23:43:22
すとれっちんぽ

728 名前:デフォルトの名無しさん :2006/04/03(月) 00:26:00
WM_CHARがキーボードからの入力なのか、
それとも何かのAPIがポスト or 送信したものなのか、判別する方法ってありますか?

729 名前:デフォルトの名無しさん :2006/04/03(月) 00:29:55
TranslateMessageがWM_KEYUP/DOWNを変換してWM_CHARを発行するんじゃなかったっけ?

730 名前:デフォルトの名無しさん :2006/04/03(月) 00:36:40
そのようなんですが、
キーボードからの入力があってWM_KEYUP/DOWNが来てWM_CHARが発行されたのか、
何かのAPIがWM_KEYUP/DOWNを送ってきてWM_CHARが発行されたのか、です。
(もしかしたら直接WM_CHARを送ってきている?)
wParamとかlParamを見るのかもしれませんが、とりあえずGetKeyStateでしのいでいます。

731 名前:デフォルトの名無しさん :2006/04/03(月) 05:07:08
>>724
クライアント領域の大きさを取得。
ビットマップの大きさを取得。
minマクロあたりで小さいほうを採用
ストレッチブリットを使う。

こんな感じでどうだい?

732 名前:デフォルトの名無しさん :2006/04/03(月) 05:09:53
説明は次のレスで。
HBITMAP CreateMask(HWND hWnd,HBITMAP Src,COLORREF trans){//マスク作成。透過色は黒になる。
    BITMAP bm; HDC hdc,mdc,sdc,rdc; HBITMAP hbmp,hmono,old,old2,old3; COLORREF oldbk;
    GetObject(Src,sizeof(BITMAP),&bm);
    hdc = GetDC(hWnd);
    mdc = CreateCompatibleDC(hdc);
    sdc = CreateCompatibleDC(hdc);
    rdc = CreateCompatibleDC(hdc);
    hbmp = CreateCompatibleBitmap(hdc,bm.bmWidth,bm.bmHeight);
    hmono = CreateBitmap(bm.bmWidth,bm.bmHeight,1,1,NULL);
    ReleaseDC(hWnd,hdc);    
    old = (HBITMAP)SelectObject(sdc,Src);
    old2 = (HBITMAP)SelectObject(mdc,hmono);
    oldbk = SetBkColor(sdc,trans);
    BitBlt(mdc,0,0,bm.bmWidth,bm.bmHeight,NULL,0,0,WHITENESS);
    BitBlt(mdc,0,0,bm.bmWidth,bm.bmHeight,sdc,0,0,SRCCOPY);
    old3 = (HBITMAP)SelectObject(rdc,hbmp);
    BitBlt(rdc,0,0,bm.bmWidth,bm.bmHeight,mdc,0,0,SRCCOPY);
    SelectObject(sdc,old);
    SetBkColor(sdc,oldbk);
    SelectObject(mdc,old2);
    SelectObject(rdc,old3);
    DeleteDC(sdc);
    DeleteDC(mdc);
    DeleteDC(rdc);
    DeleteObject(hmono);
    return hbmp;
}


733 名前:732 :2006/04/03(月) 05:18:04
現在非常に困っています。お知恵を拝借したい。

>>732はとあるビットマップの透過用マスク画像を生成するための関数です。
引数はGetDCするためのウインドウハンドルとマスクのソースとなるHBITMAPそして透過色を指定する数値です。
で、現状の問題はこの関数を使ってできた画像をそのままウインドウにBitBltしてみても期待のようにはならず白になってしまいす。
白になるのは途中でWHITENESSをBltしているからなんですが、その先の処理がうまく意図どおりに動かないようです。
どこか見落としなどの指摘があればぜひお聞かせください。

734 名前:デフォルトの名無しさん :2006/04/03(月) 05:55:57
誰もいない。
鳥のさえずり聞くなら今のうち。

ピーちゅんちゅん。ピーちゅんちゅん。ピーちゅんちゅん。ピーちゅんちゅん。ピーちゅんちゅん。ピーちゅんちゅん。
ピーちゅんちゅん。ピーちゅんちゅん。ピーちゅんちゅん。ピーちゅんちゅん。ピーちゅんちゅん。ピーちゅんちゅん。
ピーちゅんちゅん。ピーちゅんちゅん。ピーちゅんちゅん。ピーちゅんちゅん。ピーちゅんちゅん。ピーちゅんちゅん。

Orz

735 名前:732 :2006/04/03(月) 06:24:26
寝ます。
それと質問は一端取り下げます。
また別の機会にでも質問させてもらおうと思います。

それじゃお休みです。

736 名前:デフォルトの名無しさん :2006/04/03(月) 10:21:36
>732
マジレスしてやる
そんな糞コードをこねくり回すよりCreateDIBSectionで作ったDIBに
自分でマスク用データ書き込んだ方が比較にならんほどマシ
全部書き直せ

737 名前:デフォルトの名無しさん :2006/04/03(月) 13:59:29
物理メモリの使用容量を取得するにはどうすればよいでしょうか?

GlobalMemoryStatusで取った総容量から空き容量を引いた値は
システムキャッシュで使われている分も含んでしまうので、
それを含まない値を取得したいのです。

738 名前:デフラグさん ◆mRgSYalFkQ :2006/04/03(月) 16:47:44
>>734

  [゚д゚] デフラグカンリョウ
 /[_]b
  | |
Orz。。。。。。。。。。。。。。。。。。。。いいうえくさずちちちちちちちちちちちちちちちちちちちちちちちちち
ちちちちちちちちちちちちななののもゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅゅ
ゅゅゅゅらりんんんんんんんんんんんんんんんんんんんんんんんんんんんんんんんんんんんんピピピピピ
ピピピピピピピピピピピピピーーーーーーーーーーーーーーーーーー今聞誰鳥

739 名前:デフォルトの名無しさん :2006/04/03(月) 17:11:58
画面のプロパティの設定タブで確認できる、各モニタ毎の番号は
EnumDisplayDevicesの第2引数で指定したもの+1なのでしょうか?
そうでないならばモニタ番号とディスプレイデバイスの対応を取る方法は無いでしょうか?

740 名前:デフォルトの名無しさん :2006/04/03(月) 17:30:48
createprocessでDOSプログラム(○.exe)に ”ファイルパス | -n > FILE” 見たいな感じのコマンドラインを実行させたいのですが
どういう風にもっていけばいいのでしょうか

ためしにノートパッドの起動だけやってみたのですが
ノートパッドだと、これに文字列がはじめに入力されるような感じで

STARTUPINFO si;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = /*SW_HIDE*/SW_SHOWNORMAL;
PROCESS_INFORMATION pi;
CreateProcess(NULL, "notepad ", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);



741 名前:デフォルトの名無しさん :2006/04/03(月) 17:42:35
> UINT GetDlgItemText( HWND hDlg, int nIDDlgItem, LPTSTR lpString, int nMaxCount );
> BOOL SetDlgItemText( HWND hDlg, int nIDDlgItem, LPCTSTR lpString );

GetDlgItemText に必要なのがLPTSTR型で
SetDlgItemText に必要なのはLPCTSTR型ですが
GetDlgItemText で取得したものを SetDlgItemText で表示する際
データの変換はどうするのでしょうか?

(LPCTSTR)LPTSTR とか (LPTSTR)LPCTSTR 、あとstrcpy関数も試してみましたが
うまくいきませんでした

742 名前:デフォルトの名無しさん :2006/04/03(月) 17:52:21
>>740
何がやりたいのかさっぱり言ってることの意味わからん。
> コマンドラインを実行させたい
ここだけに反応すると
 cmd.exe /c コマンドライン
を実行すればいい。

>>741
> うまくいきませんでした
では原因わからんわ。
質問するときは何が起こったのか書いてくれ。

743 名前:デフォルトの名無しさん :2006/04/03(月) 18:02:40
猫でもわかるWindowsプログラミングを片手に簡単なスクリーンセーバーを作ろうとしているのですが
ほぼ本の通りにやっているのですが、画像が表示されません
何度も本と見比べたのですが、どこが間違っているのかわかりませんでした

#define ID_TIMER 101
LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 HDC hdc, hdcMem;
 static RECT rc;
 HBITMAP hBmp;
 BITMAP bmpInfo;

 switch(msg){
   case WM_CREATE:
SetTimer(hWnd, ID_TIMER, 500, NULL);
GetClientRect(hWnd, &rc);
break;
   case WM_TIMER:
if(wParam != ID_TIMER) break;
hdc = GetDC(hWnd);
hBmp = LoadBitmap(hMainInstance, "MY_BITMAP"); // ビットマップリソース
GetObject(hBmp, (int)sizeof(BITMAP), &bmpInfo);
hdcMem = CreateCompatibleDC(hdc);
SelectObject(hdcMem, hBmp);
BitBlt(hdc, 50, 50, bmpInfo.bmWidth, bmpInfo.bmHeight, hdcMem, 0, 0, SRCCOPY);
DeleteObject(hBmp);
DeleteDC(hdcMem);
ReleaseDC(hWnd, hdc);
break;

どこが悪いのか教えて頂けないでしょうか

744 名前:デフォルトの名無しさん :2006/04/03(月) 18:04:19
うわ、スペースおかしくなってしまってすいません・・・

745 名前:デフォルトの名無しさん :2006/04/03(月) 19:05:44

CreateProcess(NULL, "netsh interface ipv6 install", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
これで出来ないか?と一週間前に知った関数で知ったかンス



流してほしい海の果てまで

746 名前:デフォルトの名無しさん :2006/04/03(月) 19:15:49
>>736
おはようございます。
書き直しですか。なるべく泥臭いことはしたくなかったんですが。
少々残念ですが、そのように検討してみます。

747 名前:デフォルトの名無しさん :2006/04/03(月) 20:16:09
>>741
LPTSTRはTCHAR*のtypedef。
LPCTSTRはconst TCHAR*のtypedef。
だからLPTSTR型のオブジェクト(変数)はLPCTSTR型へ暗黙の内に変換できる。

748 名前:デフォルトの名無しさん :2006/04/03(月) 20:36:13
>>745
自分へのレスでいいのかな?
どうもです。
ただ、プログラム始めたばかりなので
いまいちどういう関数か分からくて試すのに時間がかかりそうです。

749 名前:デフォルトの名無しさん :2006/04/03(月) 20:37:18
あ、上は>>743です。ここってID出ないんですね

750 名前:デフォルトの名無しさん :2006/04/03(月) 20:44:22
実はリソースが無いというオチではないか


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