■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
Win32API質問箱 Build22
501
名前:
デフォルトの名無しさん
:04/09/02 22:12
>>497
どうなってれば納得できます?
で、黒ってデータ(数値)としてはどうなってると思います?
502
名前:
デフォルトの名無しさん
:04/09/02 22:19
>>497
Windows 9X、Millenium ではゴミデータが入ってたような気がする。
NT 系の OS ではセキュリティ上の配慮のため、確保されたメモリは既にクリアされてる。
503
名前:
デフォルトの名無しさん
:04/09/02 22:22
>>499
>keybd_even も反応しないみたいです。
反応するよ。
仮想キーコードじゃなくてスキャンコードを送信すればいい。
dinput.hに書いてある、仮想キーマクロ DIK_????? を参考にしてみれ。
ちなみにキーボードデバイスでサポートしてないキー入力送信は無理。
英語キーボードの「半角/全角」キーに相当するアンサン・グラブ(DIK_)は、
日本語キーボード環境だとうまくDirectInputに送信できない。
「A」キーのキー入力を送信する例:
#include <dinput.h>
WORD key = DIK_A;
keybd_event(0, key, 0, 0);
keybd_event(0, key, KEYEVENTF_KEYUP, 0);
504
名前:
デフォルトの名無しさん
:04/09/02 22:36
>>501
,502
画面全体が真っ白になって欲しいです。
メモリはクリアされていて黒ってことはデータ的には0が入っているってことですかな?
具体的に白くするにはどうすればいいんだろ。
505
名前:
デフォルトの名無しさん
:04/09/02 22:39
>>504
24ビットDIBSectionなら
FillMemory(lpPixel, iWidth * iHeight * 3, 0xff);
とか(lpPixelがピクセル列のバッファの先頭アドレスね)。
506
名前:
デフォルトの名無しさん
:04/09/02 22:52
>>505
あー。なるほど。32で作ってましたけど出来ました。thx!
507
名前:
デフォルトの名無しさん
:04/09/02 22:57
>>503
おーなるほど。これで上手くいきました。
あとは文字列からスキャンコードへの変換ルーチン書けば行けそうです。
ありがとうございました。
508
名前:
デフォルトの名無しさん
:04/09/02 23:07
つーか、WM_PAINTを横取りしようと思うと無効領域も手当てせんといかんやろ。
509
名前:
デフォルトの名無しさん
:04/09/03 00:33
>>508
乗っ取ったFakeBeginPaintで領域を制限しなければ良いと思うんだけど、、、
HDC FakeDC = ...;
HDC WINAPI FakeBeginPaint(HWND hwnd, PAINTSTRUCT* ps)
{
::ZeroMemory(ps, sizeof PAINTSTRUCT);
::GetClientRect(hwnd, &ps->rcPaint);
return ps->hdc = FakeDC;
}
510
名前:
デフォルトの名無しさん
:04/09/03 01:06
なんだかこちらのスレに誘導されたので、失礼します。
http://pc5.2ch.net/test/read.cgi/tech/1093996761/41-42
なんだかこっちでもスレ違いな気がして気が引けます…
511
名前:
デフォルトの名無しさん
:04/09/03 01:26
スレは違わないと思う。
512
名前:
デフォルトの名無しさん
:04/09/03 03:44
プログラムになにか法則みたいなものありますか?
これを書いたらこれを書けみたいな
513
名前:
デフォルトの名無しさん
:04/09/03 04:11
(を書いたら)を書け。
[を書いたら]を書け。
514
名前:
デフォルトの名無しさん
:04/09/03 08:03
ぬるぽを書いたらぬるぽを書け。
515
名前:
デフォルトの名無しさん
:04/09/03 09:10
>>514
ガッ
516
名前:
デフォルトの名無しさん
:04/09/03 09:22
右の頬をかいたら左の頬をかけ。
517
名前:
デフォルトの名無しさん
:04/09/03 09:24
「たらちねの」の次には「母」と書け
518
名前:
デフォルトの名無しさん
:04/09/03 09:45
「真剣」と書いたらマジと読め
519
名前:
デフォルトの名無しさん
:04/09/03 09:53
拝啓と書いたら敬具と書け
520
名前:
デフォルトの名無しさん
:04/09/03 10:26
肉を煮込んだら灰汁を取り除け
521
名前:
デフォルトの名無しさん
:04/09/03 10:51
鰹節をかいたら鍋を火にかけ
522
名前:
デフォルトの名無しさん
:04/09/03 11:13
「姉さん」と書いたら「事件です」と書け
523
名前:
デフォルトの名無しさん
:04/09/03 11:22
流れをぶったぎって失礼します。
RegisterClassにわたすクラス名は
ユニークでなければいけませんか?
524
名前:
523
:04/09/03 11:26
しっかり書いてありました。
すみません、すみません。
525
名前:
デフォルトの名無しさん
:04/09/03 11:32
恥をかいたら頭を掻け
526
名前:
デフォルトの名無しさん
:04/09/03 12:32
BitBltとかStretchBltで、転送元、先のHBITMAPが同じでも大丈夫なんでしょうか。
画面のスクロールの処理の時に、そうなってしまうのですが。
527
名前:
デフォルトの名無しさん
:04/09/03 12:38
>>526
スクロールの方向によってはえらいことになる。
528
名前:
526
:04/09/03 12:45
>>527
詳しくお願いします。
方向ということは、もしかしたら、端を飛び越したときとかですかね。
529
名前:
デフォルトの名無しさん
:04/09/03 12:49
なぜ転送先にHBITMAPが?
530
名前:
526
:04/09/03 12:51
>>529
言葉が足りませんでした。SelectObjectしたHDCです。
531
名前:
526
:04/09/03 13:00
>>529
>>530
あっ、そういう意味ではないですね。
裏ビットマップに書きたいのでHBITMAPと言いました。
スクロール前の裏ビットマップの、スクロールしても残る位置を、
同じ裏ビットマップに描いて、残りを部分は新たに描くという感じです。
532
名前:
デフォルトの名無しさん
:04/09/03 13:01
>>528
527じゃないが
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
for(int i = 0; i < 9; ++i)
a[i + 1] = a[i];
多分こんなようなことになると思う。
533
名前:
デフォルトの名無しさん
:04/09/03 13:07
そういうことなら、「重なる部分は自分で考慮しないと何が起こるかわからん」が答えでないかと。
重ならない領域の転送なら、なんも問題無いよ。
534
名前:
デフォルトの名無しさん
:04/09/03 13:13
んなもんBitBlt側で考慮してくれて、重なろうが問題なさそうだけど。
MoveMemoryみたく。
535
名前:
526
:04/09/03 13:15
>>532
詳しく説明していただき、ありがとうございました。
>>533
自分もそんな感じに考えていました。
変更前の物を転送した後に、変更されるならいいのですが、
逆だとどうなるのかなと。実験してみます。
536
名前:
526
:04/09/03 13:16
>>534
そうだといいのですが。実験してみます。
537
名前:
デフォルトの名無しさん
:04/09/03 13:19
スクロール操作だとわかるならScrollDCすればいいんじゃないんですか?
538
名前:
526
:04/09/03 13:34
おなじHBITMAPだと絵が変更されていませんでした。戻り値は正常でした。
ただ、別のプログラム中に、強引に作ったので、
ちゃんとすればできるかもしれません。
>>537
ありがとうございます。調べてみます。
539
名前:
デフォルトの名無しさん
:04/09/03 13:35
質問です。
デスクトップカレンダーのように、常に背景に表示されているソフトを作りたいと考えています。
「常に最背面に表示」はできるようになったのですが、
「デスクトップの表示」ボタンを押すと隠れてしまいます。
何かいい方法はないでしょうか。
540
名前:
デフォルトの名無しさん
:04/09/03 13:39
MFCで作ったアプリって、別段ライブラリを一緒に配布したりしなくても動きますか?
541
名前:
526
:04/09/03 13:42
>>537
RECTが分からないので勉強してみます。
542
名前:
デフォルトの名無しさん
:04/09/03 13:49
>>540
faq
static link
543
名前:
デフォルトの名無しさん
:04/09/03 13:52
>>539
壁紙をカレンダーに摩り替える。
544
名前:
(・∀・)ニヤニヤ
:04/09/03 13:54
>>539
WM_SIZEで最小化されたことを検知して、
自分で元に戻してやればいいんじゃねーの?
545
名前:
デフォルトの名無しさん
:04/09/03 13:56
>>542
そのものに組み込めと言うことですか・・・
MFCってMSのライブラリのくせに、標準じゃないんでしょうか・・・
546
名前:
デフォルトの名無しさん
:04/09/03 13:58
イヤだったら付けずに出して、「動かない」と文句言ってきた客には
「あなたの環境は標準的ではありません」と突っ返せばよし。
547
名前:
デフォルトの名無しさん
:04/09/03 13:59
>>545
スレ違いだ
MFCスレに行きやがれ
548
名前:
デフォルトの名無しさん
:04/09/03 14:06
>>545
パソコンは起動時にWINDOWS.EXEを実行して起動されます。MFCはこの中にはいっています。
それでも動かないのならあなたは不正なVisualStudioを使っていることになります。
恐らくコピー版を使っていると思われるのでMicrosoftに通告しときます。ご愁傷様でした。
549
名前:
デフォルトの名無しさん
:04/09/03 14:06
すんません
お騒がせしました
550
名前:
539
:04/09/03 14:16
>> 543
新しい壁紙にすると、カレンダーをD&Dで移動させるときに難しそうなので避けてました。
>>544
「デスクトップの表示」ボタンを押したときには、WM_SIZEのメッセージはこないみたいです。
551
名前:
デフォルトの名無しさん
:04/09/03 14:22
そういえば、自分のパソコンに始めから付いていたDrag'n Drop CDも、
デスクトップの表示ボタンを押すと消える。
別の何かを開くと、復活するけど。
同じような現象なのかな。
552
名前:
539
:04/09/03 14:32
>> 551
同じ現象だと思います。
例えばSamurizeなんかは理想の挙動になっているのですが・・・
553
名前:
デフォルトの名無しさん
:04/09/03 14:41
>>552
spy++でどんなメッセージが来てるか調べれば?
554
名前:
539
:04/09/03 14:48
>>553
はい。調べました。
「デスクトップの表示」ボタンを押してもメッセージは送られていないようです。
555
名前:
デフォルトの名無しさん
:04/09/03 14:56
>>554
本当に調べた?
思いっきりWM_SIZE送られてるんだけど。
556
名前:
デフォルトの名無しさん
:04/09/03 14:57
WM_SIZE(SIZE_MINIMIZEDとSIZE_RESTORED)がキッチリ来るな。
何を調べたのかと(ry
557
名前:
539
:04/09/03 15:30
>>555
>>556
すいません。確認してみたら、普通のアプリケーションだったらメッセージがくるようですね。
調査不測でした。
調べてみたところ、私のプログラムでは親ウィンドウを作成する際に、WS_EX_TOOLWINDOWを指定していたため、
子ウィンドウにWM_SIZEがこなかったようです。
(WS_EX_TOOLWINDOWを指定したのは、親ウィンドウをタスクバーに表示させない為です)
ここら辺を直せばメッセージをキャッチできそうですね。
お手数おかけしました。
558
名前:
デフォルトの名無しさん
:04/09/03 15:47
mallocと書いても、freeと書かなくてもよい
559
名前:
デフォルトの名無しさん
:04/09/03 16:18
windows.exeって何
560
名前:
デフォルトの名無しさん
:04/09/03 20:35
>>559
windows.comのこと?
561
名前:
デフォルトの名無しさん
:04/09/03 20:36
windows.mpg
562
名前:
560
:04/09/03 20:38
win.comだったorz
MFCって別の(ry
一応、張っておきますね
■MFC相談室 mfc11.dll■
ttp://pc5.2ch.net/test/read.cgi/tech/1088084875/
563
名前:
デフォルトの名無しさん
:04/09/04 00:19
int型の変数をTextOutで描画しようとするとエラーになってしまうのですが、
intを描画するにはどうすればいいですか?
564
名前:
デフォルトの名無しさん
:04/09/04 00:34
>563
wsprintf
565
名前:
デフォルトの名無しさん
:04/09/04 01:16
>564
sptintfとの違いはあるのでしょうか?
それと、MFC使うよりもWin32APIで作った方がプログラム実行が僅かに
速いって本当なんでしょうか?
566
名前:
デフォルトの名無しさん
:04/09/04 01:21
wsprintfはfloat使えないぞ!気をつけろ!
> プログラム実行
何のプログラムだ?
567
名前:
デフォルトの名無しさん
:04/09/04 01:45
本日のマツケンショーのプログラムでは最後にマツケンサンバが入っています。
568
名前:
デフォルトの名無しさん
:04/09/04 01:57
画面を描画するのに、
CreateCompatibleBitmapやCreateCompatibleDC
で裏画面を作成し描画しているのですが、
画面全体を新たに再描画(真っ白に)する場合、
それまで使っていた裏画面を破棄して新しくメモリを作成する方法と、
画面を背景の色で塗りつぶす(FillRectとかそんな感じで)方法があると思うのですが、
どちらが速いのでしょう??
環境はWinXP+VC6.0+APIです。
569
名前:
デフォルトの名無しさん
:04/09/04 01:58
>>565
MFC固有のdllの初回読み込み(OS起動以後)に時間がかかるってだけでしょ。
2回目以降の起動ではほとんど関係ないかと。
実行パフォーマンスを理由にしてMFCを使わないというのは稀。
2次配布問題やファイルサイズ・カスタマイズ効率の面からMFCを使わないというのはあるけど。
570
名前:
デフォルトの名無しさん
:04/09/04 02:03
ウィンドウプロシージャべた書きでいけるような極単純なものならMFC使わないほうがほんの少し効率がいいんじゃないか?
大して意味はないレベルにせよMFCのウィンドウ−C++オブジェクトマッピングはコスト0じゃない。
571
名前:
デフォルトの名無しさん
:04/09/04 02:09
定番の言い方だと、体感できるほどの差ではない、かな。
572
名前:
568
:04/09/04 03:59
>>571
どちらでも大差無いって感じですかね。
573
名前:
デフォルトの名無しさん
:04/09/04 04:25
MFCはサンクじゃなくてマップを使ってるから
検索の分遅いんじゃないか?
574
名前:
デフォルトの名無しさん
:04/09/04 05:07
>>568
後者・・・じゃないかなぁ。
せっかくだから、測定してみるといいんじゃない?
575
名前:
デフォルトの名無しさん
:04/09/04 05:26
それ以前にCreateCompatibleBitmapで作成したてのビットマップって何色かで塗りつぶされてる保証なんかあったか?
どのみち作成後に塗りつぶすなら再作成の意味は無い気がするんだが。
576
名前:
デフォルトの名無しさん
:04/09/04 06:03
>>575
NT系ならセキュリティ上の理由から塗りつぶされてると思うが
期待しちゃいけない気がするな
577
名前:
568
:04/09/04 17:00
そうですね,確かにCreateCompatibleBitmapの後に塗りつぶしてましたorz
FillRectで塗りつぶす方法で良さそうですね.
あと話が変わるのですが,
複数のウインドウプロシージャで変数を共有したいのですが,
どうすればよいでしょう?
変数のポインタを渡せば良さそうなのですが,
どこで渡せばいいのやら・・・
578
名前:
デフォルトの名無しさん
:04/09/04 17:23
>どこで
好きなところで。
グローバルにしてもいいし、
上位のオブジェクト(たとえばアプリケーションクラスのインスタンス)とかに持たせて、
その上位オブジェクト経由でアクセスするとか。
どちらも嫌な場合は、CreateWindowの最後の引数とか。
579
名前:
デフォルトの名無しさん
:04/09/04 17:30
> 複数のウインドウプロシージャで
複数のウィンドウクラス間で、ということ?
580
名前:
568
:04/09/04 17:42
>>578
今はグローバルで宣言していますが,変数が多くなってきたので
クラスか構造体のポインタを他のプロシージャに渡せればいいなと思いました.
とりあえず,CreateWindowの最後の引数に渡す方法をやってみます.
581
名前:
デフォルトの名無しさん
:04/09/04 18:12
>>577
速さを気にするんだったらブラシ用意してFillRectより、CDC::FillSolidRectみたいに
SetBkColor→ExtTextOutの方が速いはず。
582
名前:
デフォルトの名無しさん
:04/09/04 18:47
>>581
あれ、背景色を元に戻してないよな。
いいのかMicrosoftがそんなことで…
583
名前:
デフォルトの名無しさん
:04/09/04 19:04
まぁ、塗りつぶしに使いたい色=背景色にしたい色って状況のほうが多いだろう、と。
でも、一言注意書いといて欲しいよな。
584
名前:
デフォルトの名無しさん
:04/09/04 19:16
少なくとも 2001/10以降のMSDNには
>メ モ FillSolidRect を呼び出すと、以前に SetBkColor を使って設定した背景色が、
>clr で指定した色に設定されます。
と書いてあるケドナー
585
名前:
デフォルトの名無しさん
:04/09/04 19:33
MSDNはネットで見ろってことなんだろ。
586
名前:
デフォルトの名無しさん
:04/09/04 21:52
よろしくお願いします。
プログラム実行中に Windows が休止状態に入った場合、その状態から
復帰した後に特別な作業を行いたいんですが、これを感知する方法が
あれば教えてください。
動作させたい OS は Windows 2000 SP4 です。
587
名前:
デフォルトの名無しさん
:04/09/04 21:55
wm_powerbroadcastとかなんとか
588
名前:
デフォルトの名無しさん
:04/09/04 23:17
他のアプリケーションにメッセージを送るにはどうすればいいですか?
589
名前:
デフォルトの名無しさん
:04/09/04 23:20
メッセージを送ればいい。
590
名前:
デフォルトの名無しさん
:04/09/04 23:36
メッセージを送りたいアプリのHWNDを取得して
SendMessage() でいいんでしょうか・・・?
取り合えずHWND取得からやってみます。
ありがとでした。
591
名前:
デフォルトの名無しさん
:04/09/04 23:40
ただしポインタが絡むものは普通に送っても無駄だからな。
592
名前:
デフォルトの名無しさん
:04/09/05 17:13
システムイメージリストについて教えてください。
これはアプリケーションが破棄してはいけないと言われますが、
(9x系だけかな?)それって全部のプロセスで中身が共通だからですよね?
と言う事は、アプリケーションから勝手にアイコンを登録したりすると
再起動するまで残りつづけるって事なんですか?
2000では破棄しても問題ないし、アイコンを好きなだけ追加しても
プロセスを起動しなおすと中身が初期化されています。
それでもやっぱりいじらない方がいいと思うのですが、
システムイメージリストとアプリケーション独自のアイコンを
ひとつのツリービューやツールバーで利用したい場合、
どうするのがいいのですか?
593
名前:
デフォルトの名無しさん
:04/09/05 23:13
質問です。
トップレベルのモードレスダイアログを同時に2つ作成しようとしています。
メッセージループには2つの IsDialogMessage() を組み込んでいるものとします。
このとき、片方のダイアログの上で MessageBox() 等でモーダルダイアログを表示すると、
独自のメッセージループに突入してしまうため、もう片方のモードレスダイアログでは
TABキーによるフォーカスの移動ができなくなってしまいますよね。
スレッドを分ければ解決するのですが、できればマルチスレッドにはしたくないのです。
シングルスレッドでこの問題を回避するいい方法があればご教示ください。
594
名前:
デフォルトの名無しさん
:04/09/05 23:44
>>592
システムイメージリストから必要なアイコンをコピーして使えばいいだけでは?
595
名前:
◆Z0vd5w812U
:04/09/06 00:00
>>593
両方ともモードレスにして、モーダル風にふるまわせれば?
596
名前:
デフォルトの名無しさん
:04/09/06 02:01
>>593
>もう片方のモードレスダイアログでは
モーダルダイアログを表示したら、モードレスダイアログは inactive なんじゃ・・・
597
名前:
デフォルトの名無しさん
:04/09/06 02:29
>>593
自前でTABキー等を処理する。
598
名前:
ほんたま
:04/09/06 06:13
おみゃ〜らよ、APIをパブリック名でDLL内から文字列検索すると、
9割方のAPIはヒットする。
だが残る1割のAPIは文字列検索してもヒットしないぞ。
ちゃんとそのDLL内に記述されているのにだ。
これがどういうことかわかるかな?
599
名前:
デフォルトの名無しさん
:04/09/06 06:16
そんなこともわからんのか
600
名前:
デフォルトの名無しさん
:04/09/06 06:31
>>598
自分じわかるかな?
601
名前:
デフォルトの名無しさん
:04/09/06 10:46
>>595
うーん、確かにそういう手もありそうですが…結構面倒になりそうですね。
>>596
最初はアクティブではありませんが、表示されたモーダルダイアログは
もう片方のモードレスダイアログとは被所有関係にないため、
表示中でもアクティブにすることは可能なわけです。
>>597
自前で処理するのは最後の手段かなと思っていたのですが…考えてみます。
レスをいただいた皆さん、どうもありがとうございました。
602
名前:
593
:04/09/06 10:49
↑
>>601
は
>>593
の書き込みでした。
603
名前:
デフォルトの名無しさん
:04/09/06 11:21
>>601
WH_KEYBOARD のローカルフックで TABキーだけ一括処理する。
604
名前:
デフォルトの名無しさん
:04/09/06 12:44
Windowsのロックが解除されたことを知るにはどうしたらよいのでしょうか。
LockWorkStationでロックをして
ロックが解除されたら別の処理に移るようにしたいのですが・・・。
605
名前:
593&601
:04/09/06 12:56
>>603
どうもありがとうございます。
自分がローカルフックを使おうとしなかった理由は、
グローバル変数を導入することを避けたい気持ちもあったからです。
でもシングルスレッド限定だとフックを使うのが一番よさそうですね…。
606
名前:
デフォルトの名無しさん
:04/09/06 13:12
>>604
OpenInputDesktopでwinlogonデスクトップがアクティブかどうか
調べるとか
607
名前:
デフォルトの名無しさん
:04/09/06 13:44
>>605
グローバル変数なんか必要ないけど?
608
名前:
605
:04/09/06 14:01
>>607
え…そうなんですか?
モードレスダイアログのハンドルをフックプロシージャに渡すのに必要な気がしますし、
少なくとも SetWindowsHookEx() の戻り値であるハンドルを
フックプロシージャ内の CallNextHookEx() に渡すためには
グローバル変数の導入は避けられないような気がしていたのですが…。
609
名前:
デフォルトの名無しさん
:04/09/06 15:35
あるプロセスがAdministrators権限で動いているとして、子プロセスを別ユーザーで実行したいのですが
その別ユーザーのパスワードを知らない状況でそれは可能でしょうか。
UNIXのsuみたいに、権限をもっているユーザならパスワードがいらない方法を探しています。
お知恵を拝借されてください。
610
名前:
デフォルトの名無しさん
:04/09/06 15:39
CreateProcessAsUser
のMSDN解説をよく嫁
俺は読んだが分からなかった。スマソ
611
名前:
586
:04/09/06 18:14
>>587
遅くなりましたが今日対象のパソコンで試したところ
WM_POWERBROADCAST で通知を受け取ることができました。
ありがとうございました。
612
名前:
デフォルトの名無しさん
:04/09/06 18:17
Administrators権限ではそもそも必要な特権がないので
CreateProcessAsUserは無理
2000以降ならCreateProcessWithLogonWでできるけど
これもパスワードが必要
613
名前:
デフォルトの名無しさん
:04/09/07 01:04
>>607
グローバル変数を使わない方法、私も興味があります。ぜひ教えてください。
614
名前:
デフォルトの名無しさん
:04/09/07 01:35
>>613
プロセス間通信で共有してもいいし、
今回のケースはローカルフックなんだからハッシュとかに突っ込んでも良い。
んでもって、CallNextHookExは第一引数を無視する。
615
名前:
デフォルトの名無しさん
:04/09/07 02:29
>>614
調べてみたら、確かにCallNextHookExは第1引数を無視するようですね。
新たな収穫でした。サンクス!!
616
名前:
デフォルトの名無しさん
:04/09/07 03:09
SetDlgItemTextで自作ダイアログのEDITTEXTに改行されたテキストを送っても
改行されないで表示されてしまいます
スタイルの設定は
ES_READONLY | ES_MULTILINE | ES_AUTOVSCROLL
にしてあって、ES_READONLYをES_WANTRETURNにして
手入力すれば改行されるんですが、何が問題なのでしょうか
あと改行に成功してもたぶん1行目の行頭から表示されると思うんですが
最終行を一番下に表示する方法は何かあるのでしょうか
(見た目はチャットウィンドウっぽいものです 機能は全然違いますが・・・)
617
名前:
616
:04/09/07 03:56
すみません、検索の仕方間違えてたようです・・・
\r\nじゃないと改行できないんですね
最初の質問は取り下げさせていただきます
2つ目の質問も
まずEM_SETSELにMAKELONG(0xFFFF, 0xFFFF)渡して
直後にVK_HOMEも送るという方法で回避できましたが、
こんなまどろっこしい方法しかないんでしょうか
618
名前:
デフォルトの名無しさん
:04/09/07 08:29
>>617
EM_SETSELで最後を選択して、EM_REPLACESELかな?
619
名前:
デフォルトの名無しさん
:04/09/07 13:20
>>617
良くwカランけど、その2つのコンボって単純に EM_SETSEL に 0, 0 でいいんじゃない?
620
名前:
デフォルトの名無しさん
:04/09/07 13:41
>>618
何を置換するんですか・・・?NULLを渡したらアクセス違反で落ちました
>>619
それだと1行目の行頭にキャレットが行ってしまいます
やりたいことは、3行表示できるエディットに5行送り込んだとして、
_____
| I1行目
| 2行目
| 3行目 ←こうではなくて(Iはキャレットのつもり)
 ̄ ̄ ̄ ̄ ̄
_____
| 3行目
| 4行目
| I5行目 ←こういう状態にしておきたいんです
 ̄ ̄ ̄ ̄ ̄
621
名前:
616
:04/09/07 14:00
>>618
あーわかりました
EM_SETSEL,MAKELONG(0xFFFF,0xFFFF)でEDITの最後に移動して
EM_REPLACESEL,0,<追加する文字列\r\n>の後VK_HOMEで
望む挙動を実装できました ありがとうございます
622
名前:
デフォルトの名無しさん
:04/09/07 15:08
EM_SCROLLCARET
623
名前:
デフォルトの名無しさん
:04/09/07 17:49
Win32でCreateWindowにてComboBoxを作成して
それをサブクラス化したのですが
置き換えたコールバックプロシージャに
WM_KEYDOWNが送られてきません。
これはなぜでしょうか?そういう仕様?
キー入力を取得したいので解決法を教えて頂けませんか?
*Edit,Button,ListView,TreeViewなどはちゃんとWM_KEYDOWNが送られてきています。
よろしくお願いします。
624
名前:
623
:04/09/07 17:57
上記にからんだ事なのですが
リソースエディタを使わずに動的にダイアログボックス上のリソースを作成した場合に
Tabキーを押したときに次のリソースにフォーカスが移動という機能を
自分で実装しなければならないために上記のような手段にでました。
親ウィンドウに子リソースのキー入力状況などは通知されないのでしょうか?
WM_NOTIFYなどでNM_KEYDOWNなどはありますが、
あくまでもコモンコントロールであって
Editなどがあてはまらず一貫した実装に出来ません。
一番手っ取り早いのは親にTabキーが押されたことを通知する機能が実装されていれば
よいのですが・・
見た限りないようなので、サブクラス化して子からWM_KEYDOWNのときに
SendMessage(hParent,WM_KEYDOWN, wParam, lParam);
とするぐらいしか方法は思いつきませんでした。
どうしたらよいのでしょうか?
625
名前:
デフォルトの名無しさん
:04/09/07 18:16
ドロップダウンリストにすりゃ送られてくるだろ。
コンボボックスで送られてこないのは、インプットフォーカスがあるのが
コンボボックスそのものではなくて中にあるエディットだから。
で、ダイアログの機能を実現したいなら
IsDialogMessageとかモードレスダイアログで検索しなさい。
626
名前:
デフォルトの名無しさん
:04/09/07 18:42
624 CreateWindowでWS_TABSTOP立ってないのでは?
627
名前:
623
:04/09/07 18:51
>>626
セットしてます
628
名前:
デフォルトの名無しさん
:04/09/07 22:59
ランチャなんかでよくあるような、
起動するとポップアップメニューが出て、項目を選択すると
それに応じた作業をこなした上で終了する、というツールを作りたいんです。
ポップアップメニューだけを表示させるにはどうしたらいいのでしょうか?
今は試しに何もしないウィンドウをCreateWindowしておいて
そのWM_CREATEのところでCreatePopupMenuしてメニューを作成して
TrackPopupMenuした上でPostQuitMessageしてみてるんですが、
当然一瞬何もしないウィンドウが表示されてから終了します。
ウィンドウをSW_SHOWしないでおくと、メニューがカーソルと重なっただけで消えてしまって
メニューを選択できません。
何か上手い方法はないものでしょうか?
629
名前:
デフォルトの名無しさん
:04/09/07 23:12
>>628
冷やかしは(・∀・)カエレ!!
630
名前:
628
:04/09/07 23:20
>>629
…一応マジなわけですが。
631
名前:
デフォルトの名無しさん
:04/09/08 00:10
>>628
もう寝るので質問だけ。
PostQuitMessageしている理由は何ですか?
しなければいいのでは?と思うので…
632
名前:
デフォルトの名無しさん
:04/09/08 00:13
>>631
メニューを選択して、それに応じた作業をこなし次第終了させたいからです。
633
名前:
デフォルトの名無しさん
:04/09/08 00:54
>>628
0x0か1x1のサイズで作れば見えないんじゃない?
634
名前:
デフォルトの名無しさん
:04/09/08 03:44
C,C++の宿題スレから誘導で来ました。
DLL側のcppファイルに
declspec(dllexport) int flag;
を宣言して、
EXE側のヘッダファイルに
declspec(dllimport) int flag;
を宣言して、cppにインクルードしました。
EXE、DLLの両方で共通のフラグを使おうと思ったのですが、
デバッガでトレースすると、EXE側で1に設定したflagが
DLL側の関数に入るとflagの値が0になってしまいました。
フラグのメモリアドレスを見ると、DLLとEXEで異なっていて
別領域が取られているようです。EXE、DLLの両方で共通の
同じフラグを使用するには、どのようにexport,importをすれば
よいのでしょうか?長くなってすいません。
635
名前:
デフォルトの名無しさん
:04/09/08 04:00
>>634
フラグ用のインターフェース関数を用意して
exeとdllでのフラグのやり取りはその関数経由で行えば良いのでは?
636
名前:
デフォルトの名無しさん
:04/09/08 04:15
>>634
こんな感じで。
[exe]
#include "dll.h"
int main(void)
{
printf("%d\n", dll_get_flag());
dll_set_flag(1);
return 0;
}
[dll]
int flag;
dll_get_flag(void){ return flag; }
dll_set_flag(int f){ flag = f; }
637
名前:
デフォルトの名無しさん
:04/09/08 04:23
>>634
の通りやって、ちゃんと意図どおりになったど。
638
名前:
デフォルトの名無しさん
:04/09/08 04:25
>>635-636
ありがとうございます。libファイルを使って静的リンクさせる場合は
[dll]の関数の頭にdeclspec(dllexport)を宣言すればよいのでしょうか?
639
名前:
609
:04/09/08 13:04
>>610
>>612
ありがとうございます。
なるほど。
ということは、Windowsではパスワード無しでsudoみたいなことをする方法はないって事なんでしょうか?
その辺を調べる方法はないものでしょうかねぇ
#Cygwinにsuってないんだっけ?あるとすれば、その辺のソースをみればいい?
640
名前:
デフォルトの名無しさん
:04/09/08 13:14
>>639
suだってsudoだってパスワードは必要だろうが。
641
名前:
639
:04/09/08 13:20
上には書いてあるんですが、もちろんどのユーザーからでもということではなくて、
特権をもっている場合でいいんです。
UNIXだったら、rootからsuするのにパスワードいりませんよね?(UNIXというか僕はLinuxしかしらないのですが(汗))
そこから連想して、WindowsだったらAdministratorでできないかなと想像してます。
その辺、できるのかできないのか、できるとしたらどうすればいいのか。
ちょっとでもヒントになりそうなことがあったら、ぜひお教えください。
重ねてお願いします。
642
名前:
デフォルトの名無しさん
:04/09/08 14:39
>>641
WindowsはUNIXではなくAdministratorはrootではありません。
Administrator権限を持つユーザーでしかないです。
643
名前:
デフォルトの名無しさん
:04/09/08 15:33
質問です。
メニューから項目を選んでからクライアントエリアをクリックすると
座標値が得られ、それをメッセージボックスで表示させたいんですけど、
メニューの項目を選んだ時点で(クライアントエリアをクリックしてないのに)メッセージボックスが表示されてしまうんです。(座標値は0,0)
こういう場合どういうふうに組んだらいいんでしょうか?
644
名前:
デフォルトの名無しさん
:04/09/08 15:39
今現在どういう変てこな造りになっているのかわからんとねー
645
名前:
643
:04/09/08 15:52
プログラムは、
case WM_COMMAND:
hMenu = GetMenu(hWnd);
hdc = GetDC(hWnd);
switch (LOWORD(wp)) {
case ZAHYOU:{
case WM_LBUTTONDOWN:
pt.x=LOWORD(lp);
pt.y=HIWORD(lp);
wsprintf(szBuff,"座標値%d,%d",pt.x,pt.y);
MessageBox(hWnd,szBuff,"タイトル",MB_OK);
}
こんな感じなんですが、わかりますでしょうか・・?;}
646
名前:
デフォルトの名無しさん
:04/09/08 16:06
break;
死ね。
647
名前:
デフォルトの名無しさん
:04/09/08 16:22
デバイスコンテキストで文字を表示する際に文字のフォントサイズを小さく表示するにはどうすれば
いいのですか?
648
名前:
デフォルトの名無しさん
:04/09/08 16:36
>>645
わかんにゃい
何をやっているのかさっぱり
649
名前:
デフォルトの名無しさん
:04/09/08 16:44
>>647
CreateFontして、SelectObject
650
名前:
デフォルトの名無しさん
:04/09/08 19:48
>>649
レスありがとうございます
CreateFontして、SelectObjectを調べてみます
651
名前:
デフォルトの名無しさん
:04/09/08 21:54
>>643
=645
かなり深刻に勘違いしていますので、
C (C++) と Win32 APIの入門書等を見て勉強したほうがよいです。
652
名前:
デフォルトの名無しさん
:04/09/08 22:41
>645
こんな感じのコードでいいのかな?
// これをどっかに宣言
static bool fViewZahyou = false;
case WM_COMMAND: {
switch (LOWORD(wp)) {
case ZAHYOU: {
// 次のクリックでは座標を得る処理をする、という意味で
fViewZahyou = true;
break;
}
}
break;
}
case WM_LBUTTONUP: {
if (fViewZahyou) {
pt.x=LOWORD(lp);
pt.y=HIWORD(lp);
wsprintf(szBuff,"座標値%d,%d",pt.x,pt.y);
MessageBox(hWnd,szBuff,"タイトル",MB_OK);
fViewZahyou = false;
}
break;
}
>651
の言う通り、まず C/C++ の文法をしっかり勉強するように。
653
名前:
デフォルトの名無しさん
:04/09/09 01:11
Windows XP SP2 Platform SDK でまつた。
ttp://www.microsoft.com/msdownload/platformsdk/sdkupdate/default.htm
654
名前:
デフォルトの名無しさん
:04/09/09 01:23
結局ATLのサンクはどうなったのかと。
655
名前:
デフォルトの名無しさん
:04/09/09 01:54
>>654
http://pc5.2ch.net/test/read.cgi/jisaku/1094220209/11-23
あたり参照
656
名前:
デフォルトの名無しさん
:04/09/09 02:00
やっと新SDK出たか
657
名前:
デフォルトの名無しさん
:04/09/09 09:01
壁紙をクライアントウィンドウに表示したいので
外部画像ファイル(bmpやjpg)をクライアントウィンドウの背景に設定したいのですが
どのようにすればいいでしょうか?
画像 背景などで検索してもリソースから入手するものばかりです。
壁紙の位置を知る方法はレジストリの
マイ コンピュータ\HKEY_CURRENT_USER\Control Panel\Desktop\OriginalWallpaper
から取得する事はわかりましたが
その画像をクライアントウィンドウの背景にする方法がわかりません。
どうか教えてください
658
名前:
デフォルトの名無しさん
:04/09/09 09:45
WinXPで他のウィンドウのIMEのモードを変えたいのですが、
GetForegroundWindowで取ってきたHWNDをImmGetContextに
入れてもNULLしか返ってきません。自分のウィンドウがたまたま
最前列だった場合は、自分のIME制御はできたのですが、何が足
りないのでしょうか。
659
名前:
デフォルトの名無しさん
:04/09/09 10:03
>>657
>>2
660
名前:
デフォルトの名無しさん
:04/09/09 11:04
>>658
NT系だと他のスレッドのIME監視するの面倒じゃなかったっけ.
661
名前:
デフォルトの名無しさん
:04/09/09 11:26
>>659
どれでしょうか?
662
名前:
657
:04/09/09 11:27
聞くだけでは失礼だと思ったので
一応
>>2
のリンク先を見たところ
二つがリンク切れ(一個は表示できない?)でした。
もう二つを見てみましたが
思わしきリンクが見つかりません。
どこのどれを見ればいいか、もしくは検索のヒントを教えてください
663
名前:
デフォルトの名無しさん
:04/09/09 11:33
>>662
猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html
Win32 API入門
http://black.sakura.ne.jp/~third/system/winapi/win.html
664
名前:
657
:04/09/09 11:38
>>663
上下で分かれてて、下の一番上がWin32〜となってたので
下がWin32API用のリンクかと勘違いしてました
上も入ってるんですね。
ちなみに下のリンクは全部みましたが
思わしき内容がありませんでした。
せっかく張っていただいたWin32 API入門では
残念ながらリソースからBMPファイルを読み込む内容しか書かれていませんでした。
今から猫でもわかるプログラミングの方を読んでみます。
665
名前:
デフォルトの名無しさん
:04/09/09 11:43
>>664
ttp://www.wotsit.org/download.asp?f=bmp
ttp://www.wotsit.org/download.asp?f=lzwexp
ttp://www.wotsit.org/download.asp?f=itu-1150
ttp://www.wotsit.org/download.asp?f=png
あとはSetDIBitsToDevice/CreateDIBSection/BitBlt/StretchBltあたりだ
いまさら教えても文句はいうけどお礼は言わないよということか>メアド欄
相当に失礼な奴だな。
666
名前:
657
:04/09/09 11:46
>>665
何か勘違いをしているようですが
教えてくれている方に向かって文句を言うほどバカではありません。
口は悪いですがリンク先を教えてもらったりしてるだけで心の中ではありがたく思ってます。
更に使用関数の名前まで教えていただき感謝のきわみです。
ありがとうございます
667
名前:
663
:04/09/09 12:03
>>664
http://black.sakura.ne.jp/~third/system/winapi/win.html
・DIB ファイルヘッダ
・DIB 情報ヘッダ
・DIB ピクセルビット
・Windows DIB
・DIB の表示
http://www.kumei.ne.jp/c_lang/index.html
の方は170〜172章
WIN32APIと呼べるかどうか分からんが、
336章にJPEGなども表示できる方法がある(環境限定)
COMだが、JPEGに関してはOleLoadPictureなども使える
668
名前:
デフォルトの名無しさん
:04/09/09 12:27
>>664
蛇足。心の中でどう思ってようが構わないが表に出すな。
付け加えれば教えてもらってるのに素直にお礼言わないってどういうこった。
頭膿んでるんじゃねぇか?
669
名前:
デフォルトの名無しさん
:04/09/09 13:22
>>657
>>661
>>662
>>664
>>666
670
名前:
デフォルトの名無しさん
:04/09/09 13:41
あの質問を相手にするほうもどうかと思うが。
671
名前:
657
:04/09/09 14:12
>>667
さんが
>>663
さんということは
>>665
さんは
>>663
さんじゃないのか…
>667
さん、ありがとうございます
とりあえず色々試行錯誤してみます
672
名前:
デフォルトの名無しさん
:04/09/09 14:24
ではここで新しいPlatformSDKの主な変更点をどうぞ
↓
673
名前:
デフォルトの名無しさん
:04/09/09 14:34
>>672
「新しい Platform SDK」っていう表現は微妙。
単独では使えないし。
674
名前:
デフォルトの名無しさん
:04/09/09 14:47
バージョンアップしたのがTable/MDAC/MSIだけじゃ
あんまり俺には関係ないな。
675
名前:
デフォルトの名無しさん
:04/09/09 16:13
>>673
どういう表現ならいいんだ?
676
名前:
デフォルトの名無しさん
:04/09/09 16:25
ナウい Platform SDK
677
名前:
デフォルトの名無しさん
:04/09/09 16:25
差分とかじゃないの?
678
名前:
デフォルトの名無しさん
:04/09/09 16:28
差分てことは新しいってことじゃないのか
679
名前:
デフォルトの名無しさん
:04/09/09 16:59
新しいってことは差分てことじゃないのか
680
名前:
デフォルトの名無しさん
:04/09/09 17:01
じゃあ「新しい Platform SDK」という表現でいいな。
改めてどうぞ
↓
681
名前:
デフォルトの名無しさん
:04/09/09 17:11
XP SP2に対応しました。
以上
682
名前:
デフォルトの名無しさん
:04/09/09 17:12
ポカーン・・・
683
名前:
デフォルトの名無しさん
:04/09/09 17:13
またこっそり新しいAPI入れてるんでしょ?そうなんでしょ?
684
名前:
デフォルトの名無しさん
:04/09/09 17:13
古くする差分だったらどうするニダ
685
名前:
デフォルトの名無しさん
:04/09/09 17:15
>>684
新しいSDK=新しくするSDKって意味じゃないべ。
新しく出たSDKって意味だべ。
686
名前:
デフォルトの名無しさん
:04/09/09 17:18
>>683
頭おかしいのか?
687
名前:
デフォルトの名無しさん
:04/09/09 17:19
追加API一覧とかつけてほしいよ
688
名前:
デフォルトの名無しさん
:04/09/09 17:54
どっかにあったぞ
689
名前:
デフォルトの名無しさん
:04/09/09 17:59
マジでか
690
名前:
デフォルトの名無しさん
:04/09/09 18:12
ウソでした
691
名前:
デフォルトの名無しさん
:04/09/09 18:22
ホントだって。
http://msdn.microsoft.com/library/en-us/winprog/winprog/functions_by_release.asp
http://msdn.microsoft.com/library/en-us/win9x/append_4cs3.asp
あーでもXPSP2はまだ入ってないな
692
名前:
デフォルトの名無しさん
:04/09/09 18:22
自己解決しました
693
名前:
デフォルトの名無しさん
:04/09/09 18:30
spy++を使わずに届いたメッセージをフックしてくれるソフトってありますか?
どうも探しても見つかりません。
694
名前:
デフォルトの名無しさん
:04/09/09 18:31
メッセージをフックした上でメッセージを表示してくれるプログラムです
695
名前:
デフォルトの名無しさん
:04/09/09 18:34
>>691
おまえ神だろ
696
名前:
デフォルトの名無しさん
:04/09/09 18:35
なんでspy++じゃだめなの
697
名前:
デフォルトの名無しさん
:04/09/09 19:11
>>693
http://www.windows-spy.com/
とかは?
698
名前:
デフォルトの名無しさん
:04/09/09 19:23
C+Win32APIでウィンドウズアプリケーションを作っているのですが、
最大化できなくする方法(最大化ボタンを無くす)を教えてください。
WNDCLASS.styleにCS_*だと思うのですが、見つかりませんでした。
699
名前:
デフォルトの名無しさん
:04/09/09 19:25
WS_MAXIMIZEBOX
700
名前:
698
:04/09/09 19:40
>>699
できました。ありがとうございました。
701
名前:
デフォルトの名無しさん
:04/09/09 21:06
>>696
VC++持ってないので…
>>697
ありがとうございます
702
名前:
デフォルトの名無しさん
:04/09/09 23:09
ステータスバー上にマウスがきたら、マウスアイコンを変更させようとお
もって、WM_MOUSEMOVEが特定の位置にきたらseticonを使用して変えよう
としたのですがうまくいきません。
ステータスバーをcreatewindowexでつくったので、その前にWNDCLASSEX
にステータスバーを処理するためのメッセージ処理関数を登録して
RegisterClassExを実行しました。RegisterClassExの戻り値は0なので
うまくいくはずはないのでしょうが、そもそもこのような手順であってい
るのでしょうか?
703
名前:
デフォルトの名無しさん
:04/09/09 23:47
>702
ステータスバーというと msctls_statusbar32 の事かな。
もしくは STATUSCLASSNAME か。ってか、同じだけど。
で、メッセージ処理関数を置き換えるという発想は正解。
でも方法は間違い。次のようにする事。
// msctls_statusbar32 オリジナルのプロシージャを退避させておく変数
static WNDPROC original_procedure = 0;
static LRESULT CALLBACK my_statusbar_procedure (HWND .. /* 略 */ ..) {
/* ここでやりたい事をすればよい */
/* 重要。自分で処理しないメッセージは必ず元のプロシージャに任せる事! */
return CallWindowProc (original_procedure, hwnd, msg, wParam, lParam);
}
HWND create_my_statusbar() {
HWND statusbar = CreateWindowEx ( /*略。普通にステータスバーを作る */ );
/* こうやってメッセージ処理関数を置き換える */
original_procedure = (WNDPROC)SetWindowLong (
statusbar, GWL_WNDPROC, (LONG)my_statusbar_procedure,);
return statusbar;
}
704
名前:
デフォルトの名無しさん
:04/09/10 00:29
>>697
それ、Win9x系では死ぬほど重いんだよな…。
705
名前:
702
:04/09/10 00:31
>>703
うまくいきました〜
トンクス!
706
名前:
デフォルトの名無しさん
:04/09/10 04:17
WirteFileの非同期書き込みって処理がすぐ帰って来るだけで
スレッドセーフなわけではないですよね?
707
名前:
デフォルトの名無しさん
:04/09/10 11:50
>>706
WriteFile はどう呼び出してもスレッドセーフだよ。
呼び出し側のコンテキストもOS内のステータスも壊れないし、
書いただけちゃんと書かれる。
書き込みを同期化してくれるわけではないけど(先方がデータグラム型ソケットの場合を除く)。
708
名前:
デフォルトの名無しさん
:04/09/10 12:33
SetTimer、KillTimerがありますが、
それのタイマーを0にするAPIがあるなら教えてください。
709
名前:
デフォルトの名無しさん
:04/09/10 12:36
>>708
ないと思う。
0にしてどうするの?というか、なぜ0にしたいの?
710
名前:
708
:04/09/10 12:44
>>709
例えば、ゲームのカーソルを0.5秒単位に点滅させる処理で、
0.5秒毎にWM_TIMERが発生しますが、
ユーザーが十字キーを動かしたときに、時間を0に戻して、
次からの点滅のタイミングを同じにしたいのです。
KillTimerした後、すぐSetTimerすればそれができると思うのですが、
APIがあればそちらの方がいいかなと。
711
名前:
デフォルトの名無しさん
:04/09/10 13:11
>>710
ウィンドウに関連付けてるなら、出来そう
以下、MSDNより抜粋
>hWnd パラメータで NULL 以外の値を指定し、
>hWnd パラメータで指定したウィンドウに、
>nIDEvent と同じ値のタイマが既に割り当てられている場合、
>新しいタイマは既存のタイマを置き換えます。
>SetTimer 関数がタイマを置き換えた場合、
>そのタイマはリセットされます。
>したがって、現在のタイムアウト時間が経過すると
>1
つのメッセージが送信されますが、
>それまでのタイムアウト時間は無視されます。
712
名前:
708
:04/09/10 13:26
>>711
詳しくありがとうございます。
KillしてすぐSetする方法でやってみたいと思います。
713
名前:
デフォルトの名無しさん
:04/09/10 13:41
POPサーバーにアクセスするAPIを教えてくださ
714
名前:
デフォルトの名無しさん
:04/09/10 13:48
>>712
711を読む限りkillしないてもいいんでない?
715
名前:
デフォルトの名無しさん
:04/09/10 13:59
>>713
gethostbyname(), socket(), connect(), send(), recv(), close()
MAPI を提供するメーラがあって、そのアカウントが使いたいなら MAPI 経由でもいいかも。
716
名前:
デフォルトの名無しさん
:04/09/10 14:15
標準スタイルのボタンやチェックボックスはDrawFrameControlで描画できますが、
同様にタブを自前で描画する方法はありませんか?
717
名前:
デフォルトの名無しさん
:04/09/10 14:15
>>715
あ、それ系のAPIでやるんですか、ありがとー
718
名前:
デフォルトの名無しさん
:04/09/10 14:29:32
>>716
uxtheme
嫌ならボタンの上半分とかでそれらしく描画するしかないな
719
名前:
708
:04/09/10 15:49:06
>>714
それでもいけました。ありがとうございました。
720
名前:
デフォルトの名無しさん
:04/09/10 18:55:29
WM_PAINTがキューにもう一つあるなら、
その回は描画しても無駄なのでスキップする
という処理をしたいのですが上手くいきません
どのようにすれば良いのでしょうか?今はこうやって失敗してます。
case WM_PAINT:{
MSG m;
if( PeekMessage( &m, hWnd, WM_PAINT, WM_PAINT, PM_NOREMOVE ) ) return 0;
//以下描画処理
}
721
名前:
デフォルトの名無しさん
:04/09/10 18:57:17
WM_PAINTはキューにひとつしかないけど何がしたいの?
722
名前:
デフォルトの名無しさん
:04/09/10 18:59:24
システムが勝手に1つにまとめてくれるわけだな
723
名前:
デフォルトの名無しさん
:04/09/10 19:06:15
つーか、ウィンドウの無効領域を自動的にまとめて、暇そうなときにWM_PAINTを発行するんじゃなかったか?
724
名前:
デフォルトの名無しさん
:04/09/10 19:08:42
>>721-722
レスありがとうございます。まとめてくれるんですね。道理で上手くいかないわけだ。
ヘルプ見ても該当の記述が見つからないので、重ねてすいません。
WM_MOUSEMOVEとかならば、この方法で良いのでしょうか?
725
名前:
デフォルトの名無しさん
:04/09/10 19:21:49
APIとSDKはどう違うんですか?
726
名前:
デフォルトの名無しさん
:04/09/10 19:48:18
猫でウインドウに関連付けられているメニューは、ウインドウ破棄と同時に捨てられるみたいな事が書いてあるのですが、
HMENU menu1=CreateMenu();
HWND hwnd1=CreateWindowEx(..., menu1, ...);
HMENU menu2=CreateMenu();
HWND hwnd2=CreateWindowEx(..., menu2, ...);
と二つのオーバーラップウインドウを作った場合、どうも最後に作られたメニューは破棄されるけど
それ以前に作ったメニュー(この場合はmenu1)は破棄されないようなのです。
以下3, 4...と作っていくと、menu2のDestroyMenuが成功するようになります。
何か大きなミスをしているような気がするのですが、ウインドウメニューと破棄の関係について
正確に掛かれているページってどこかに無いでしょうか?
727
名前:
デフォルトの名無しさん
:04/09/10 19:50:57
そのウィンドウに関連付けられたメニューだけが破棄されるのは
分かってるか?
728
名前:
デフォルトの名無しさん
:04/09/10 20:05:35
ウインドウが閉じた(WM_DESTROYが送られた後)タイミングで破棄されるから
明示的に閉じたウインドウ以外は、破棄される前にDestroyMenuが呼ばれてるのかな
だからDestroyMenuが成功してるんだと思う。
729
名前:
デフォルトの名無しさん
:04/09/10 21:33:57
タブコントロールにスライダーコントロールが乗っかっているWINアプリがあるのですが、
このスライダーコントロールを別のWINアプリを作りたいなあと思っています。
このときにスライダーコントロールのハンドルをどうやったら取得できるのでしょうか?
730
名前:
デフォルトの名無しさん
:04/09/10 21:47:18
>>729
自分の書いた文章読んで意味わかるか?
731
名前:
デフォルトの名無しさん
:04/09/10 21:55:48
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
上ので、WndProcはどこで呼び出しているのでしょう。
732
名前:
デフォルトの名無しさん
:04/09/10 21:57:17
ですぱっち
733
名前:
731
:04/09/10 21:59:48
>>732
ありがとうございました。
734
名前:
デフォルトの名無しさん
:04/09/10 22:27:50
>>729
なんかなぞなぞみたいでつ
735
名前:
デフォルトの名無しさん
:04/09/10 22:50:10
>>729
スルーですね。
736
名前:
デフォルトの名無しさん
:04/09/10 23:16:55
SetWindowsHookExを使って"コピーされた"ってのを知りたいんですけど
WH_CALLWNDPROCRETを使ってWM_COPYを見ていればいいんですか?
737
名前:
デフォルトの名無しさん
:04/09/10 23:22:34
だめ
738
名前:
デフォルトの名無しさん
:04/09/10 23:34:33
C+ウィンアプリは、イベントがあるまでOS?で待ちながら、
イベントが発生すると、GetMessageでそれを得て、
TranslateMessageで使いやすく翻訳し、
DispatchMessageでWndProcを呼び出し実行する、
という感じでいいのでしょうか。
また、TranslateMessageとDispatchMessageの引数が、
constポインタなのはなぜでしょう。
TranslateMessageはGetMessageで得たものをポインタで渡し、
中で書き換えるとイメージしたのですが、
constだと書き換えられないような気がするのですが。
また、DispatchMessageは実行するだけだから、
書き換える必要が無く、ポインタで渡す必要が無いと思うのですが。
739
名前:
デフォルトの名無しさん
:04/09/10 23:42:04
TranslateMessageはメッセージを書き換えないで、
WM_(SYS)KEYDOWNからWM_(SYS)CHARを生成したりしてキューにポストする。
書き換えちゃったらKEYDOWN系がこなくなる。
740
名前:
デフォルトの名無しさん
:04/09/10 23:44:47
ポインタなのは構造体コピーより速いから。じゃねーかな。
741
名前:
738
:04/09/10 23:50:43
ありがとうございます。
>>739
そういえば、キーを押した時、2回メッセージが来ているような
気がする事があったのですが、もしかしたらそれかもしれません。
>>740
なるほど。
自分は、引数がNULLでも動く関数の時は、constポインタにする事が
ありますが、そういう利点もあったのですか。
742
名前:
デフォルトの名無しさん
:04/09/10 23:52:05
>>738
> TranslateMessageで使いやすく翻訳し、
TranslateMessageはただWM_KEYDOWN/UPなどからWM_CHARなどのメッセージを作り出しているだけだから、それじゃ間違い。
WM_CHARなどのメッセージが要らなければ、TranslateMessageを呼ぶ必要も無い。
> TranslateMessageはGetMessageで得たものをポインタで渡し、中で書き換えるとイメージしたのですが、
そうじゃない、PostMessage(それかWin内部でごにょごにょ)で送り出すので書き換える必要は無い。
> 書き換える必要が無く、ポインタで渡す必要が無いと思うのですが。
構造体を直接関数の引数にすると、いちいちコピーする時間が掛かる。
なので代わりにポインタ(あるいは参照)にするのごく一般的に行われる。(sizeof (MSG)は28だがsizeof (MSG*)なら4)
その場合、通常の値渡しのように関数に渡した変数の中身が変わらないことを表明するためにconstポインタ(あるいはconst参照)にするのは常識。
743
名前:
738
:04/09/10 23:59:26
>>742
さらに詳しくありがとうございます。
すごく勉強になりました。
744
名前:
デフォルトの名無しさん
:04/09/11 09:57:30
次スレはスレタイにWin64の文字も入れてください
745
名前:
デフォルトの名無しさん
:04/09/11 10:56:10
Win64は別スレにした方がよくね?
746
名前:
デフォルトの名無しさん
:04/09/11 11:05:55
んだ
747
名前:
デフォルトの名無しさん
:04/09/11 11:11:14
>>745
話題が分散するだけで、あんまり意味ないような感じがするけどどうでしょ。
しかも物凄く過疎な予感もするし。16-
>32
みたいにそんなに違うわけでもないし。
748
名前:
デフォルトの名無しさん
:04/09/11 13:20:57
質問する前に、「Win64についてですが・・・」とでも
書き添えてくれるのならいいけど、ここじゃルール守るヤツの方が
少数だからなぁ。
749
名前:
デフォルトの名無しさん
:04/09/11 13:21:40
一緒が良いよ。
750
名前:
デフォルトの名無しさん
:04/09/11 13:49:51
当面は【Win64可】をスレタイに入れればいいんじゃない。
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.