07/09/20 07:52:40
>>352
せいぜい、WM_PAINT内でii.hScreenを使っていいかどうかを見る
フラグでも用意しておくしかないと思う。
358:デフォルトの名無しさん
07/09/20 07:55:20
>>352
とりあえず、ダブルバッファがどうとか考える前にメッセージを理解してくれ
359:352
07/09/20 08:03:57
サンプルがわるかたかな・・・。
hScreenに描画している限り無効領域は発生せず、
WM_Paintは発行されないと思ってたんだけど、その認識が間違ってるのかな。
360:デフォルトの名無しさん
07/09/20 08:05:23
>>359
fとWindowProcは同じスレッド?
361:352
07/09/20 08:07:38
>>360
fという関数は、WM_Createで行うとエラーがでる部分を退避させるため
だけに暫定処置として作りました。
362:デフォルトの名無しさん
07/09/20 08:20:11
ああすまん、WM_CREATE内から呼んでいるね。
ってそれだとWM_CREATE内から呼んでいることに変わりはないだろ。
363:デフォルトの名無しさん
07/09/20 08:26:04
どう見てもAPI以前のレベルです、本当にありがとうございました。
364:352
07/09/20 08:31:52
一応、猫でもわかるのサンプルみて作ったつもりなんだけど、
なんで描画されるんだろ。
365:デフォルトの名無しさん
07/09/20 08:40:02
>>359
ウィンドウ作った時点じゃ、最初から無効領域
366:352
07/09/20 09:32:48
>>365
なるほど!動作確認の仕方が間違っていたのですね。
おかげさまで問題を解決することができそうです。
ありがとうございました。
367:デフォルトの名無しさん
07/09/20 09:34:31
重なっている上のウィンドウが移動したり、新しくウィンドウが作られたり、
そのウィンドウがリサイズしたりして、新たに描画しなければならないところが無効領域。
InvaridateRectは、そういった条件にかかわらず無効領域にするAPIだから。
368:デフォルトの名無しさん
07/09/20 12:21:27
>366
この手のタイプは、「できませんでした。教えてください。」ってまた来るんだよな・・・orz
369:デフォルトの名無しさん
07/09/20 13:29:37
教えて頂きたいのですが、MDIにおいて、
親ウインドウと子ウィンドウの透過率を変えることは可能でしょうか?
親ウィンドウに色のついた透明な子ウィンドウを重ねたいのです。
(一旦メモリデバイスにコピーした後、AlphaBlend()により色を付ける方法は
成功しました。)
SetWindowLong(),UpdateLayeredWindow()などが関連してくると思うのですが。
370:デフォルトの名無しさん
07/09/20 13:40:03
子ウィンドウをレイヤードウィンドウすることはできない
371:デフォルトの名無しさん
07/09/20 13:49:17
>370
やはり、そうでしたか。WS_CHILDとWS_EX_LAYEREDのスタイルを合わせると
ウィンドウが作れないんですよね。
ここから推測するに、親ウィンドウ(透過率255)、
子ウィンドウ(透過率127)のようなことも出来ないとなりますね。
現在のAlphaBlend()とUpdateLayeredWindow()を上手く使ってって方法を
取っていきます。
372:デフォルトの名無しさん
07/09/20 20:46:07
GetKeyboardStateで、現在のキーボードの状態を取得しているのですが、
アプリのウィンドウがアクティブでないときにGetKeyboardStateすると、
上手く情報を取得してくれません・・・、解決するにはどうすればよいでしょうか?
ウィンドウをアクティブにしたフリをして、GetKeyboardStateを動かすこととか出来ないですかね?
キー入力はフックしていて、キーボードでキーが入力されると、
アプリのウィンドウがアクティブでないときでも、
イベントが呼ばれてGetKeyboardStateが走る仕組みです。
動作・開発環境は以下の通りです。
OS : WindowsXP SP2 .net framework 1.1
言語 : C#
宜しくお願い致します。
373:デフォルトの名無しさん
07/09/20 20:49:24
>GetKeyboardStateで、現在のキーボードの状態を取得しているのですが、
ドキュメントにちゃんと書かれているとおり、
GetKeyboardState は現在のキーボードの状態を取得するAPIではありませんので、
別のやり方、たとえば GetAyuncKeyboardState を使うなどに変えた方が良いでしょう。
374:デフォルトの名無しさん
07/09/20 20:50:17
>>373
GetAsyncKeyboardState
375:デフォルトの名無しさん
07/09/20 21:05:51
>>373-374
GetAsyncKeyStateですよね?
試してみます。ありがとうございました!
376:デフォルトの名無しさん
07/09/20 21:30:16
335です。
>>353さんの方法で出来ました。
ありがとうございました。
377:デフォルトの名無しさん
07/09/20 22:00:05
WinSock関連での質問です。
TCPによる接続でconnection関数を利用していますが、
対象のホストを見つけられない場合は、
一定時間処理が停止しています。
これの対処法を、皆さんはしていますか?
スレッド側に投げて対処?
それとも、connectionよりいい関数があるんでしょうか?
378:デフォルトの名無しさん
07/09/20 22:28:19
非ブロックソケット
379:デフォルトの名無しさん
07/09/20 23:29:06
>>377
スレッド
非ブロック
非同期
380:377
07/09/21 00:04:40
>>378-379
スレッド案で非同期化を試みます。
ありがとうございました!
381:デフォルトの名無しさん
07/09/21 00:14:20
SHBrowseForFolder() で質問です。
BROWSEINFO.hwndOwner に設定したウィンドウに対してモーダルで
ダイアログが開きますが、他にモードレスのウィンドウがあるとき、
それらは無効にならずにフォーカスを奪えてしまいます。
全ウィンドウに対してモーダルで開いて欲しいのです。
しょうがないので SHBrowseForFolder() の前後に
「hwndOwner と同じプロセスの全有効ウィンドウを無効/有効にする」
というのを入れたら希望する動作になったんですが、
なにかオフィシャルな手段は提供されてないんでしょうか。
382:デフォルトの名無しさん
07/09/21 00:38:48
その、他のウィンドウの構成が間違っている
383:デフォルトの名無しさん
07/09/21 03:11:36
>>369-371
MSの公式サイトにはUpdateLayeredWindow()の方を使えって書いてある
384:デフォルトの名無しさん
07/09/21 03:15:26
ごめん逆だった
SetLayeredWindowAttributesを使えって書いてある
URLリンク(msdn.microsoft.com)
385:デフォルトの名無しさん
07/09/21 04:19:28
>>384
どこに?
386:デフォルトの名無しさん
07/09/21 11:20:33
lstrlenWなどの文字列の長さを返すAPIの説明に、
「文字単位の長さ」とありますが、
サロゲートペア文字は2文字と数えるのでしょうか?
それとも1文字?
もし1文字で数えられてたら、自分のプログラムが大変なことになります・・・・
387:デフォルトの名無しさん
07/09/21 11:26:10
>>386
MSDNに書いてあるよ。
> The return value specifies the length of the string, in TCHAR
> values. This refers to bytes for ANSI versions of the function
> or WCHAR values for Unicode versions.
388:デフォルトの名無しさん
07/09/21 11:27:30
サロゲートペアのことは書いてないようだけど
389:デフォルトの名無しさん
07/09/21 11:28:24
>>388
「WCHARの長さ」って書いてあるやん
390:デフォルトの名無しさん
07/09/21 12:54:30
早く全面的にUTF32に汁
391:デフォルトの名無しさん
07/09/21 13:39:30
キーボードで入力されたキーコードとシフト状態を元に、文字を作成する関数って
ToAscii
ToAsciiEx
ToUnicode
ToUnicodeEx
上記以外に無いのでしょうか?あれば教えていただきたいです。
宜しくお願い致します。
392:デフォルトの名無しさん
07/09/21 13:58:43
>>381 ShowOwnedPopupsは ? (試してないけど)
386関連。EM_LIMITTEXT/EM_SETLIMITTEXTはどーなってますか
393:392
07/09/21 15:46:57
ShowOwnedPopupsは忘れてください
394:デフォルトの名無しさん
07/09/21 17:08:10
DLLを自分で作って使ってみたいと思い挑戦しているのですが
どーしてもわからないっす。
VC2005Expressを使用してDll projectでDllをビルド
LoadLibraryで読み込む←成功
先にtypedef int (*DLLFUNC)(int, int) ;と宣言しておき
DLLFUNC Add ;
Add = (DLLFUNC)GetProcAddress(hDll, "Add") ;
↑でNULLが帰ってきて「指定されたプロシージャが見つかりません」って出てます。
DLLのソースは
#include <windows.h>
int WINAPI DllMain(HINSTANCE hInstance , DWORD fdwReason , PVOID pvReserved) {
return TRUE;
}
__declspec (dllexport) int Add(int nValue1 , int nValue2)
{
return (nValue1 + nValue2) ;
}
です。よろしくお願いします。
395:デフォルトの名無しさん
07/09/21 17:10:07
def作ったほうが確実
396:デフォルトの名無しさん
07/09/21 17:12:22
そのソースのファイル名は .c か .cpp か。
397:デフォルトの名無しさん
07/09/21 17:16:31
>>395
defを使う方法はまだやった事無いです。今から勉強します。
>>396
.cppです。
398:デフォルトの名無しさん
07/09/21 17:19:45
>>397
では、.c にリネームして試してみるべし。
399:デフォルトの名無しさん
07/09/21 17:22:01
extern "C"をつけて名前マングルをやめて、かつdefでエクスポートすればいける
400:デフォルトの名無しさん
07/09/21 17:33:35
誰だマングリなんて作ったの
意味ねーだろ
401:デフォルトの名無しさん
07/09/21 17:43:01
.cにリネームしたらいけました!
さらに.cppに戻した後 >>399に書かれていたextern "C"の方法でも
出来ました!有難うございます。
402:デフォルトの名無しさん
07/09/21 17:48:39
>>400
多重定義とかメンバ関数とか名前空間とか同名の区別に必要。
型安全なリンクにも繋がる。
403:デフォルトの名無しさん
07/09/21 21:18:10
>400
んじゃオーバーロードとか使うなよ
404:デフォルトの名無しさん
07/09/21 21:33:43
せめて同一プラットフォームではマングリングは統一して欲しいところ
BCCとVC++でオブジェクトリンクできないとかもうね
405:381
07/09/22 01:54:58
>>382
今はテストプログラムで遊んでいるところなので、たしかにこういう
状況はレアケースだと思います。
たとえば「モーダルダイアログ→その上に[参照...]ボタン」だったら
全然問題ないです。
何を隠そうVB6で書いてるんですが、もしかしてVB特有の現象でしょうか。
C&SDKもMFCも分からないヘタレなもので、
.NETでFolderBrowserDialogクラスで試してみたら、ちゃんと全ウィンドウに
対してモーダルでした。
.NETでSHBrowseForFolder() をP/Invoke するのをこれから試します。
>>392
その関数はちょっと目的とは違う気がします。(試してないけど)
406:デフォルトの名無しさん
07/09/22 02:03:47
その前にspyしてWindow構成見たほうが早くね
407:デフォルトの名無しさん
07/09/22 02:09:08
micsoroftがツール提供してるってことは、
spyは合法ってことでおk?
408:デフォルトの名無しさん
07/09/22 02:20:53
何言ってんだおめぇ
409:デフォルトの名無しさん
07/09/22 03:48:12
>>404
COM
410:デフォルトの名無しさん
07/09/22 03:55:58
1PはPLAYERだろーが
411:デフォルトの名無しさん
07/09/22 04:03:12
ごめん
全然うまくないから
412:デフォルトの名無しさん
07/09/22 04:08:01
>>411
相手にならん
もっと練習してから来い下手糞
413:デフォルトの名無しさん
07/09/22 05:28:35
ちょっとフォルダ内のファイル一覧を作る処理を書こうとしてるんですが
FindFirstFile~FindNextFile...は遅い!と思いしばらく実験...
ひょっとしてコマンドプロンプトでdir~するより遅いんじゃないか?・・・と調べたらさすがにdirよりは早いようだったorz
しかしもっと早くしたいのです、FindFirstFile系より早い関数知ってる人いますか?
414:デフォルトの名無しさん
07/09/22 06:00:23
IShellFolderのEnumObjectsはもっと遅い
415:デフォルトの名無しさん
07/09/22 06:18:51
こんなスレで質問していないで、早く試行錯誤でバグ回避策を見つける仕事に戻るんだ!
何?やる気がありません?なら辞めろや、他の派遣雇うからw
416:デフォルトの名無しさん
07/09/22 06:21:40
IShellFolderですか、COMってやつですか?
初めて見るのでよく分からんですが、こいつはこいつで奥が深そうですね
417:デフォルトの名無しさん
07/09/22 07:13:35
>>413
遅いって何ファイルで何秒くらい?
418:デフォルトの名無しさん
07/09/22 07:14:45
自分で作ればいいのに
能なしは大人しく既存の関数使っとけ
419:デフォルトの名無しさん
07/09/22 07:35:59
>>417
5万で一秒くらいです、ちっとも遅くない・・・ですか?
420:デフォルトの名無しさん
07/09/22 07:39:12
そんなに速くしたいならWindowsの外でやれ
421:デフォルトの名無しさん
07/09/22 07:39:46
1msで50ファイル。どこが不満なんだ‥‥
422:デフォルトの名無しさん
07/09/22 07:42:25
実際計って以外に早いなと・・・
他の部分が重いのでしょうね、スレ汚し申し訳なかったです
423:デフォルトの名無しさん
07/09/22 07:45:46
windowsプログラムのお話
VC++2005EEのスケルトンプログラムのソースが何をやっているのか教えてぽ・・・。
424:デフォルトの名無しさん
07/09/22 07:46:04
キャッシュが効いてただけと予想
425:デフォルトの名無しさん
07/09/22 07:48:20
一覧の表示をListViewとかでやってるなら検索中は更新止めるとかしないと笑える程遅くなるぞ。
426:デフォルトの名無しさん
07/09/22 08:04:49
キャッシュはメモリのコンパクションツール(っていうのかな?)を使えば消えますよね?
その状態だと5万ファイルで一分ぐらい、次回実行以降高速化してます・・・
ListViewとかじゃなくvector<string>に入れて後でファイルに保存してます、時間計測は純粋にファイルリスト取得部分のみです
再起動とかしてちゃんと計測し直した方がいいですかねぇ?
427:デフォルトの名無しさん
07/09/22 08:09:58
うるせーバーカ死ね
428:デフォルトの名無しさん
07/09/22 08:11:21
>>426
HD直接触ってみるとか
429:デフォルトの名無しさん
07/09/22 08:25:20
キャッシュですねぇ、>>424さんの指摘どおりのようです
再起動して実行すると初回が91秒、10回実行して平均とか出してたんですが2回目以降は750msぐらいで安定してます
HDD直に触るのは魅力的ですよね、一度はやりたいです
しかしこれ、それでも使えないほど遅いかと言われればそんなこともない速度でしょうか
どうも昔触って以来FindFirstFile系は遅いと思い込んじゃってたんですかねぇ
430:デフォルトの名無しさん
07/09/22 08:27:18
くそう
431:デフォルトの名無しさん
07/09/22 08:33:48
>>423の言ってるのが「空のプロジェクト」をチェックしないで普通に作った奴なら
単にウィンドウ出してメニューつけて、だけをやってるんだと思う
なんかReadMe.txtってのもプロジェクトに参加してるみたいだし一度目を通されてはどうでしょう
間違ってたらスマソ
432:デフォルトの名無しさん
07/09/22 08:36:17
>>429
APIの呼び先で予想外のコードが動いている可能性もあるから確認してみるといいよ。
アンチウィルスソフトはよくやってる。
とりあえずカーネルデバッグしてみ。
433:デフォルトの名無しさん
07/09/22 08:48:42
カーネルデバッグと、初めて聞いたもので調べておりますが
カーネルデバッガというものを使うようですね、おすすめなんてありますか?
434:デフォルトの名無しさん
07/09/22 09:15:36
とりあえず無難にWinDbgを使って見るのがいいんじゃない?
無料でダウンロードできるよ。
URLリンク(www.microsoft.com)
WinDbgの文法覚えとけばCUIのデバッカへの移行もしやすいから出先でデバックする機会とかあるなら役立つかもね。
あと、カーネルデバッグするしないにかかわらずシンボルをインストールすることを忘れずに。
たとえば、Visual Studioでデバッグする場合不明なシンボルがあるとコールスタック表示するのをそこであきらめるし、
シンボル名が表示されてりゃブレークポイント貼るとき楽だしね。
435:デフォルトの名無しさん
07/09/22 09:30:31
>>434さん、折角教えて頂いたばかりですが現在の私の能力ではここまでのようです・・・
かなり便利そうには見えるのですが習得には少しかかりそうです・・・
いろいろとご指摘くださった皆さんありがとうございました、
今回はFindFirstFile~でとりあえず作り、後は次回の課題とさせていただきます。
436:デフォルトの名無しさん
07/09/22 09:32:40
>>431
やさしい人ありがとう><
みんなプログラム作る時は空のプロジェクトでやるのかな・・・?
437:デフォルトの名無しさん
07/09/22 09:34:17
ああ
438:デフォルトの名無しさん
07/09/22 09:48:51
坊主。男は黙って空のプロジェクトで作るもんだぜ?( ゚Д゚)y─┛~~
439:デフォルトの名無しさん
07/09/22 14:21:56
質問させてください。
BitBltで描写している800*600のビットマップ画像を毎秒20ピクセルぐらい
で高速横移動させようとすると、描写がおっつかないのか移動中画像がぶれる
のです。(上から下に走査線の波がはしるように画像がゆがみます)
ひょっとしてWINAPIではそこまでの描写はできないのでしょうか?
DirectXを使えということなのでしょうか。
440:439
07/09/22 14:24:04
↑すみません、移動値が間違っていました。
一回10ピクセルの移動を、毎秒20回ほどです。
441:デフォルトの名無しさん
07/09/22 14:25:19
ププ
442:デフォルトの名無しさん
07/09/22 14:29:24
>>439
DirectXには垂直同期を待つ機能がある
GDIだけではできない
443:439
07/09/22 14:41:27
>>442
ご回答ありがとうございます。
今まさにGDIに垂直同期させる方法がないか考えているところ
でしたが、できないのですね。。。
DirectXを勉強することにします。
ヒント、感謝します。
444:デフォルトの名無しさん
07/09/22 16:46:25
"C:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*.*"
これがOKなのが許せない
445:デフォルトの名無しさん
07/09/22 16:51:28
/////////////////////////////////////home/unko
URLリンク(www.2ch.net)
普通だろ
446:デフォルトの名無しさん
07/09/22 16:53:02
VC++2005EEで途中まで文字入力したときのポップアップヘルプが
出なくなっちゃたよぅ・・・><
447:デフォルトの名無しさん
07/09/22 16:57:37
EEなんて使ってるからだ
大人しくプログラミング引退しなさい
448:デフォルトの名無しさん
07/09/22 17:03:58
そんなぁ・・・><
449:デフォルトの名無しさん
07/09/22 17:06:19
と、思ったら僕の勘違いでした・・・
ごめんなさい
450:デフォルトの名無しさん
07/09/22 17:21:41
>>444
パス名の先頭に\\?\(Cなら\\\\?\\)でもつければ?
451:デフォルトの名無しさん
07/09/22 21:14:40
>>446
あのピョコってでるのは確かインテリセンスって言うはずだ
プロジェクトのフォルダ内に.ncbって拡張子のファイルがあると思う、表示される情報はこれに保存されてるらしい
で、情報の更新に若干タイムラグが出る事があってポップアップが出ない事がある、これは数秒待てば出るようになるよ
前の行にビルドエラーになる箇所があるとそれ以降インテリセンスも更新されてなかったりするのでこまめにビルドするといいかも
452:デフォルトの名無しさん
07/09/22 21:30:29
じゃあ、コンパイル成功してもIntelliSense動いてくれないのはなぜなんだぜ?
特にBoostとか使ってるとき、特定の行以降/ブロック内で起こる。
453:デフォルトの名無しさん
07/09/22 21:53:56
それはC++がキモすぎるかr
454:デフォルトの名無しさん
07/09/22 22:27:03
いやキモいのはbo