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


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

Win32API質問箱 Build27
501 名前:デフォルトの名無しさん :05/02/03 17:36:40
ws &= ~WS_THICKFRAME;


502 名前:デフォルトの名無しさん :05/02/03 17:36:48
WS_EX_CLIENTEDGEつけてないか?

503 名前:500 :05/02/03 17:38:00
作りたいのは、こういうToolTipみたいなものです。
http://www.geocities.jp/ayana_city/tooltip.jpg

周囲の縁は上記の写真のとおり、一ドットまでならOKです。

504 名前:デフォルトの名無しさん :05/02/03 17:39:13
>>496
Win32APIじゃないけど文字列検索ならとりあえずstd::string::findとかstd::strstrとか

505 名前:デフォルトの名無しさん :05/02/03 17:39:14
VCならリソースエディタでダイアログ弄って試したら。

506 名前:デフォルトの名無しさん :05/02/03 17:42:23
http://www.geocities.jp/ayana_city/windowstyle.jpg
http://www.geocities.jp/ayana_city/tooltip.jpg

このページは準備中です
申し訳ありませんが、このページは現在利用できなくなっています。しばらくたってからもう一度お試しください。ご不明な点があれば、ヘルプをご覧の上、お問い合わせください。


507 名前:500 :05/02/03 17:46:43
DWORD dwStyle;
DWORD dwExStyle;

lpszClassName = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW, hCursor);
dwExStyle = WS_EX_TOPMOST;
dwStyle &= ~WS_THICKFRAME;

return CreateEx( dwExStyle, lpszClassName, _T("タイトルバー"), dwStyle, rect, NULL, NULL, NULL);

だと、縁有りになりますね。

508 名前:デフォルトの名無しさん :05/02/03 17:46:54
>>504
それって2バイト文字考慮されてなかった希ガス

509 名前:デフォルトの名無しさん :05/02/03 17:48:11
>>500
ttp://forums.belution.com/ja/vc/000/059/84.shtml


510 名前:デフォルトの名無しさん :05/02/03 17:48:22
>>507
dwExStyleを初期化せずにdwStyle &= ~WS_THICKFRAME;ですかぁ?

511 名前:500 :05/02/03 17:54:06
いえ、dwExStyle=0として試しましたが、駄目でしたよ。

>>509さん、
それ参照したいと思います。

皆さん、本当にご迷惑おかけして吸いません。

512 名前:デフォルトの名無しさん :05/02/03 17:57:17
#define WS_OVERLAPPED 0x00000000L
というのはわりと嵌りやすい罠だな。

513 名前:デフォルトの名無しさん :05/02/03 17:58:03
>>507
ウィンドウ作られあとに(WM_CREATEとかの処理の中で)
GetWindowStyle
ws &= ~WS_THICKFRAME
SetWindowStyle
じゃだめ?


514 名前:デフォルトの名無しさん :05/02/03 17:59:01
>>512
#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | \
WS_CAPTION | \
WS_SYSMENU | \
WS_THICKFRAME | \
WS_MINIMIZEBOX | \
WS_MAXIMIZEBOX)

ですが何か?

515 名前:500 :05/02/03 18:05:54
BOOL CXSFrameWnd::CreateTest(CWnd* pWnd)
{
LPCTSTR lpszClassName;
CRect rect( 0, 0, 300, 200);
HCURSOR hCursor = ::LoadCursor( NULL, IDC_ARROW);
DWORD dwStyle=0;
DWORD dwExStyle;

lpszClassName = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW, hCursor);
dwExStyle = 0;
dwStyle = WS_POPUP | WS_SYSMENU;
dwStyle &= ~WS_THICKFRAME;

return CreateEx( dwExStyle, lpszClassName, _T("タイトルバー"), dwStyle, rect, NULL, NULL, NULL);
}

やはり、こうなります。(2ドットの縁有り)
http://www.geocities.jp/ayana_city/windowstyle.jpg

orz

516 名前:500 :05/02/03 18:13:05
leftとtopに、2ドットのラインがあるんですよね。
その2ドットは多少の色違いがあるから、窪みがあるように見える。

rightとbottomは一ドットなんですけども。

left top right bottomの四方全て、一ドットの枠にしたいんですが。

517 名前:デフォルトの名無しさん :05/02/03 18:16:51
dwStyle = WS_POPUP | WS_SYSMENU;
dwStyle &= ~WS_THICKFRAME;

アフォ?


518 名前:デフォルトの名無しさん :05/02/03 18:16:57
MFCの話だとスレ違いじゃねぇかと思うが。
CXSFrameWndがCFrameWnd派生だとすると、段差がついてるのはCXSFrameWndに貼り付けられた子ウィンドウのほうなんじゃねぇか?

519 名前:デフォルトの名無しさん :05/02/03 18:20:31
>>500
ttp://homepage2.nifty.com/DSS/VCPP/MFC/Window/Window3DHide.htm


520 名前:デフォルトの名無しさん :05/02/03 18:21:06
dwStyle=WS_OVERLAPPED で枠も何も無いけどな。

521 名前:デフォルトの名無しさん :05/02/03 18:23:05
やっぱりMFCを使っているとつまらないことで苦労しないとならないのですね。

522 名前:デフォルトの名無しさん :05/02/03 18:26:19
たぶん派生元のクラスでCreateされるときに勝手にスタイルが変わる。
ウィンドウが作られたあとにスタイル変更する方が無難。


523 名前:デフォルトの名無しさん :05/02/03 18:27:02
32ビット環境でソース互換性の為と思い
SetWindowLongPtrを使用しているのですがコンパイル時に

warning C4244: '引数' : 'LONG_PTR' から 'LONG' に変換しました。データが失われているかもしれません。

となります。

これは私が何か問題のある行動、または足りない設定があるのでしょうか?
それとも単にSDKヘッダの定義ミスで特に問題のない事なのでしょうか?
また、回避策はあるのでしょうか?
できればSetWindowLongPtrの為だけに C4244を#pragmaでオフにすることは避けたいのですが・・・

524 名前:デフォルトの名無しさん :05/02/03 18:33:31
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200302/03020161.txt

525 名前:デフォルトの名無しさん :05/02/03 18:34:59
>>523
キャストすれば?


526 名前:デフォルトの名無しさん :05/02/03 18:41:00
>>523
SetWindowLongPtrの戻り値をLONG/long型の変数に代入しているならLONG_PTRにしろ。

527 名前:デフォルトの名無しさん :05/02/03 18:44:29
LONG_PTRって、ポインタのような名前のくせに
実際にはlongか__int64ってのはなんでだろ。

528 名前:デフォルトの名無しさん :05/02/03 18:45:43
>>525

SetWindowLongPtrの定義が
LONG_PTR SetWindowLongPtr( HWND hWnd, int nIndex, LONG_PTR dwNewLong );
のようになっているはずでにもかかわらず

INT WINAPI _tWinMain(省略)
{

 LONG_PTR dwNew = 100; // 数値は適当
 SetWindowLongPtr(NULL, 0, dwNew); // 内容は適当
}

のようなコードで上記警告になってしまいます。


529 名前:500 :05/02/03 18:51:33
>>519さん
そのサイトにかかれてある通りに試したら、
縁が無くなりました!

本当にありがとうございました。

530 名前:デフォルトの名無しさん :05/02/03 19:27:22
>>528
警告はLONG_PTR dwNew = 100; で出てるんじゃね?

531 名前:デフォルトの名無しさん :05/02/03 19:49:33
warning C4244: '引数' : 'LONG_PTR' から 'LONG' に変換しました。データが失われているかもしれません。


532 名前:デフォルトの名無しさん :05/02/03 19:50:46
INT WINAPI _tWinMain(省略)
{

 LONG dwNew = 100; // 数値は適当
 SetWindowLongPtr(NULL, 0, &dwNew); // 内容は適当
}

533 名前:デフォルトの名無しさん :05/02/03 20:33:02
http://www.kumei.ne.jp/c_lang/sdk/sdk_00.htmのコードをビルドしたいのですが、

c:\source1.cpp(20) : error C2440: '=' : 'HGDIOBJ' から 'HBRUSH' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
c:\source1.cpp(43) : warning C4244: 'return' : 'WPARAM' から 'int' に変換しました。データが失われているかもしれません。

というエラーと警告が出ます。
なぜだか分からないのですが分かる方教えてくれませんか?
MC++2003を使ってます。

534 名前:デフォルトの名無しさん :05/02/03 20:41:08
ttp://www.kumei.ne.jp/c_lang/setvc.htm
これの一番下か?

535 名前:デフォルトの名無しさん :05/02/03 20:44:13
>>534
あ、そんなところに・・・・
これはどのように治せばいいのでしょうか?

536 名前:デフォルトの名無しさん :05/02/03 20:58:34
http://pc5.2ch.net/test/read.cgi/tech/1101022051/726

537 名前:デフォルトの名無しさん :05/02/03 21:06:53
myProg.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);

538 名前:デフォルトの名無しさん :05/02/03 21:11:13
>>537
あ、出来ました
どうもありがとうございました^^

539 名前:デフォルトの名無しさん :05/02/03 21:17:24
猫以下だな…

540 名前:523,528 :05/02/03 21:17:28
>>532
それだとSetWindoLongPtrを使う意味がまるでなくなってしまうような orz

MSのヘッダにミスがあるということで良い気がしてきました(´・ω・`)

541 名前:デフォルトの名無しさん :05/02/03 21:57:25
DLLから.libを作成する方法ってありませんか?

あるDLLを静的リンクしたいのですが、DLLだけしかありません。
関数の型はわかってます。

542 名前:デフォルトの名無しさん :05/02/03 22:13:27


543 名前:デフォルトの名無しさん :05/02/03 22:13:49
なんかライセンス違反の匂いが

544 名前:デフォルトの名無しさん :05/02/03 22:15:16
キーボードフォーカスを任意の座標に移動させるにはどうしたらいいか教えてください

545 名前:デフォルトの名無しさん :05/02/03 22:18:08
>>541
DEFを書けば、LIB.EXEから作成できる。

546 名前:デフォルトの名無しさん :05/02/03 22:27:29
>>544
まさかキャレットの移動じゃないよね?

547 名前:544 :05/02/03 22:38:06
キーボードフォーカス

548 名前:デフォルトの名無しさん :05/02/03 22:59:08
>>544
WindowFromPoint()でウィンドウハンドル取って
SetFocus()だとどうだろう

549 名前:デフォルトの名無しさん :05/02/03 23:44:26
座標ってことは、

エディットボックスの斜め上あたりにカーソルを存在させる

とか?
かなり無理があると思うが・・・・

550 名前:デフォルトの名無しさん :05/02/04 00:13:17
解像度と同じサイズのウィンドウを作ってしまえば出来るぜ。

551 名前:デフォルトの名無しさん :05/02/04 07:20:14
OPENFILENAME で 開き
ダイアログが閉じる前に選択されたファイルのチェックを行い
メッセージボックスを表示したいのですが、
どのようにすればよいでしょうか。

CDN_FILEOK だとダメみたいです。。。


552 名前:デフォルトの名無しさん :05/02/04 07:48:48
>>551
CDN_FILEOKを受け取った後、FALSEを返してるか?

553 名前:デフォルトの名無しさん :05/02/04 09:01:38
はいFALSEを返していますが、閉じてしまいます。。

554 名前:デフォルトの名無しさん :05/02/04 10:00:21
開くボタンを消して、それと同じ位置にカスタムボタンを貼り付けるとか…。

555 名前:デフォルトの名無しさん :05/02/04 10:17:03
おまえらエスパーか?
あの文で何がしたいか分かるのか?

556 名前:デフォルトの名無しさん :05/02/04 10:44:01
エスパーて・・・まだ昭和の人ですかあなたは・・・

557 名前:デフォルトの名無しさん :05/02/04 10:54:46
語学力の無い香具師だな。

 ・ダイアログが閉じる前に
  (=ダイアログを閉じないで)

 ・CDN_FILEOK だとダメみたいです。。。
  (=CDN_FILEOKをフックして色々したけど駄目だった)

この程度を文中から読み取れないで、
よくMSDNとか理解できるな。

558 名前:デフォルトの名無しさん :05/02/04 11:24:30
APIとは直接関係ないですが、質問させてください。

どのラジオボタンが押されているのかを取得したいのですが、
IDが、IDC_RADIO1 , IDC_RADIO2 , ・・・・・ と並んでいるとして
 SendMessage(GetDlgItem(hDlgWnd, IDC_RADIOx ),BM_GETCHECK, 0, 0)
をforループで回して、 チェックされているラジオボタンを検出したら 
nCheckItem = i  としたらいいのではないか?と思ってます。

ところが、#defineで定義されている最後の数字をFORループの変数に従って
変えるやり方がわかりません。どうしたらいいでしょう?

559 名前:デフォルトの名無しさん :05/02/04 11:25:36
具体的にどう書いてダメだったか書いてないな。
CDN_FILEOKの応答を正しく書いてないかもしれない。

560 名前:デフォルトの名無しさん :05/02/04 11:28:37
>>556
意味不明

561 名前:デフォルトの名無しさん :05/02/04 11:36:10
>>558
int id[] = {IDC_RADIO1,IDC_RADIO2, ・・・・・};

562 名前:558 :05/02/04 12:31:37
>>561 とりあえず解決できました。 ありがとう!!

563 名前:デフォルトの名無しさん :05/02/04 12:35:18
>>528
実はこうなっている。
#ifdef _WIN64
(略)
#else
#define SetWindowLongPtrA SetWindowLongA
#define SetWindowLongPtrW SetWindowLongW
#endif
Windows 95から使えるのはこういうわけ

564 名前:デフォルトの名無しさん :05/02/04 12:35:53
>>527
「ポインタと同じサイズ」と言いたいのだろう。

565 名前:デフォルトの名無しさん :05/02/04 12:47:13
(・A・)

566 名前:デフォルトの名無しさん :05/02/04 12:59:32
MFCでダイアログベースのアプリケーションを作成したのですが、
どうやってもダイアログにアイコンを表示できません。
初期のコードにSetIconなどのアイコンを表示するようなコードが書かれているのですが、
なぜ表示されないのでしょうか?

567 名前:566 :05/02/04 13:11:43
すいません、解決しました

568 名前:デフォルトの名無しさん :05/02/04 13:39:33
>>567
解決したなら、それはそれで「なぜ表示できていなくて
どうやって解決したか」を語るべきだ。

569 名前:デフォルトの名無しさん :05/02/04 13:49:37
そもそもMFCはAPIじゃないだろ

570 名前:デフォルトの名無しさん :05/02/04 14:11:46
初歩的な質問になりますが、
現在のマウスの位置を取得するには、どのようにすればいいのでしょうか?

571 名前:デフォルトの名無しさん :05/02/04 14:12:48
あと、もう一点。

マウスのLボタンがクリックされているかどうかを調べるWin32関数はありますか?

572 名前:デフォルトの名無しさん :05/02/04 14:17:45
CDからWAVを吸い出すツールを作りたいと思ってるんだが・・・。
CDから指定トラックのデータを吸い出すAPIとかってあるの?

知ってる人にはフザけた質問かもしれんが、ちょっとマジで聞いてます。
だれかマジレスお願いします。

573 名前:デフォルトの名無しさん :05/02/04 15:01:10
>>570 GetCursorPos
>>571 GetAsyncKeyState

574 名前:570 :05/02/04 15:14:17
>>573
ありがとうございました。
助かります。

575 名前:566 :05/02/04 16:07:38
ダイアログのプロパティにSystem Menuという項目があったので
それをTrueにしたらアイコンが表示されました
これをTrueにしないとアイコンや最大化、最小化が表示されないっていうのを知りませんでした

576 名前:デフォルトの名無しさん :05/02/04 16:40:00
CDRip.DLLでも使ってみたらいいんじゃねーの

577 名前:デフォルトの名無しさん :05/02/04 17:15:31
ローカル座標とグローバル座標を変換するためには?
どうしたらよいのでしょうか?

578 名前:デフォルトの名無しさん :05/02/04 17:34:41
ClientToScreen
ScreenToClient

579 名前:デフォルトの名無しさん :05/02/04 18:18:01
ほんと知ってればどうってことない質問ばっかりだよな。
逆引きAPIのすごく細かいサイトとか本あればいいのにねぇ。
金になるならやるんだが。

580 名前:デフォルトの名無しさん :05/02/04 18:42:38
SetTimerみたいな関数を自作したい場合って、スレッド使うの?
スレッド→メッセージループ→時間が来たらメッセージ送信
って感じですか?
それとも、別の良い方法がある?

581 名前:デフォルトの名無しさん :05/02/04 18:44:01
W2K以上ならスマートな方法あるな。

582 名前:デフォルトの名無しさん :05/02/04 18:47:55
いやあるなっていうかそこで書き込みおわりかよ(笑

583 名前:デフォルトの名無しさん :05/02/04 18:52:06
いや、サポートすべきOSのバージョンわかんない。
Me以下もサポートしなけりゃならないなら余計な事になるから。

584 名前:580 :05/02/04 18:59:47
>>583
私へのレスですよね
出来れば1xもサポートできる方が良いですが、自分も回りもXPか2000だけなんで、無サポートでも良いです
どんな方法か教えてください。

585 名前:デフォルトの名無しさん :05/02/04 19:14:51
>>584
1xって…9xなのか?
それとも…ガクガク

586 名前:デフォルトの名無しさん :05/02/04 19:41:25
>>585
スレタイをちゃんと見てる香具師ならそれはないだろう

587 名前:デフォルトの名無しさん :05/02/04 19:50:25
Win1.0かぁ、懐かしい、タイルウインドウしか出来なかった。


588 名前:デフォルトの名無しさん :05/02/04 20:02:32
>>587
俺も使った
( ゚д゚)ペッ が感想

589 名前:デフォルトの名無しさん :05/02/04 20:07:20
>>588
まー、あのころはStarに感動してポケットマネーでGUIを感動した時代だ。
仕方が無い

590 名前:69式フリーPG ◆hND3Lufios :05/02/04 20:16:08
286/10MHz〜386/16MHzあたりの時代だからねぇ。。。

まあ、68000の8MHzであれだけのことをやってたMacはたいしたもんだった。
爆弾でまくりだったけど。

591 名前:デフォルトの名無しさん :05/02/04 20:16:55
で、>>581は責任持って答えるように。

592 名前:デフォルトの名無しさん :05/02/04 20:19:51
スレッドでタイマ作るならWaitFor〜使うのが普通だろ。

593 名前:デフォルトの名無しさん :05/02/04 20:21:00
>>592
だったらMe以下でもできるじゃん。
たぶん>>581は俺たちの知らない様なこと知ってる。
期待。

594 名前:デフォルトの名無しさん :05/02/04 20:21:02
Lisa使ったことある?超高級Macだった

595 名前:デフォルトの名無しさん :05/02/04 20:59:03
キーを押した時の、WM_KEYDOWNに付いての質問です。
連続で押していると、100ミリ秒ぐらいの間隔でWM_KEYDOWNが来ますが、
PostMessageでやると、その間がありません。
どうやれば、ホントにキーを押した感じのような表現が出来るでしょうか。

596 名前:デフォルトの名無しさん :05/02/04 21:02:49
少し、演出とか考えろよ。リアルタイムでプログラムが反応する
とか思ってるのはあほすぎ。逆に、システムがユーザーをごまかす
を考えろw、ユーザーが不利にならない範囲でだがw

597 名前:デフォルトの名無しさん :05/02/04 21:07:03
>>593
きっとFiberのことでは?

598 名前:デフォルトの名無しさん :05/02/04 21:07:22
SendMessage(...);
Sleep(100);
SendMessage(...);
でだめか?

599 名前:デフォルトの名無しさん :05/02/04 21:10:53
>>597
Tipかと思った

600 名前:595 :05/02/04 21:11:35
>>596
すいません。

>>598
そういうのも考えていました。私のはSetTimerの方でしたが。
WM_KEYTOUCH、WM_KEYPUSHとかあればいいんですけど。

601 名前:デフォルトの名無しさん :05/02/04 21:58:05
>>584
1xとか書いててそのまま飯食ってた……
今の所、>>597>>599>>592というレスがあるみたいなので、調べてみます。

602 名前:デフォルトの名無しさん :05/02/04 22:06:31
>>601
実装はスレッドだが、CreateTimerQueue,付近を調べれば?
知ってんじゃないの?SDKの同期/非同期サービスだが、知っていたらごめん。
いやー、あんた知ってるよね

603 名前:デフォルトの名無しさん :05/02/04 22:25:24
GlobalAlloc関数について質問があるのですが

GlobalAllocの第2引数の 割り当てるサイズ なのですが
わかりにくいと思うのですが

char *lpszBuf;
int nLen;
HGLOBAL hMen;

nLen = GetWindowTextLength(hEdit);←hEditのサイズが入る
hMem = GlobalAlloc(GHND, sizeof(char) * nLen + 1);
lpszBuf = (char *)GlobalLock(hMen);

こんな感じになると思うのですが
sizeof(char) * nLen + 1のところが良くわからないのですが
sizeof(char) × (nLen + 1)ってことなのでしょうか?
その時のnLen+1は理解できるのですが
sizeof(char)もサイズを求める物ですよね?
こいつはいったい何のためにいるのでしょうか?

604 名前:デフォルトの名無しさん :05/02/04 22:30:06
やりたいことは
あるソフトに、メッセージ(とりあえず、マウス左ボタンダウン)を投げたいのです

ですが、その対象となるソフトが、グローバルフックでメッセージを受けて処理している場合、
そのソフトに対し、メッセージを投げるにはどうしたらいいのでしょうか?

わかるかたいらしたらお願いいたします

605 名前:デフォルトの名無しさん :05/02/04 22:33:48
>>603
sizeof(char) * nLen + 1は(sizeof(char) * nLen )+ 1と等しい
GetWindowTextLength(hEdit)はhEditに格納されている文字列の文字数が返り値になる
つまり一文字のバイト数*文字数+1てわけ

つうかコレ書いた奴間抜けだな

606 名前:デフォルトの名無しさん :05/02/04 22:36:07
>>603
本来はsizeof(LPTSTR) * nLen + 1じゃないか?それ。
この場合はUNICODEが定義されてるかどうかでLPTSTRのサイズが変わる。

607 名前:デフォルトの名無しさん :05/02/04 22:37:55
>>605
分かりました!
勘違いで迷路に迷ってたみたいです

nLenが既にもう完全なhEditのサイズかと思ってました
本当に間抜けな質問申し訳ありません
曇ってたのがすっきり晴れました
マジでありがとう

608 名前:デフォルトの名無しさん :05/02/04 22:47:50
sizeof(TCHAR) * (nLen + 1)

609 名前:603 :05/02/04 22:56:45
申し訳ないもう1個出てきました
nLen = GetWindowTextLength(hEdit);←hEditの文字数が入る
のときのnLenが文字数なので sizeof(char)*nLen+1は理解できたのですが

dwSize = GetFile(hFile , NULL);←dwSizeにサイズが入る
このとき dwSizeは完全なサイズが入っているので
第2引数は dwSize+1 だけでいいと思うのですが
何故かsizeof(char)*dwSize+1となっているのですが
charが8バイトでdwSize+1が17バイトだとしたら
メモリーの無駄遣いしまくってしまってないでしょうか?


610 名前:デフォルトの名無しさん :05/02/04 23:05:04
>>606
LPTSTRのさいずはかわらねーよ

611 名前:デフォルトの名無しさん :05/02/04 23:06:10
>>609
あんた、釣りがへた、
典型的なハード知らないソフトウエアエンジニアー

612 名前:603 :05/02/04 23:12:09
>>611
エンジニアなどたいした肩書きは無いですよ

独学で猫でもわかるを読んで勉強してるので
知り合いにCなどが出来る方がいないもので変な理解をすると
変更が効かずどんどん沼にはまっていってしまって・・・・

613 名前:デフォルトの名無しさん :05/02/04 23:13:08
>>609
> dwSize = GetFile(hFile , NULL);←dwSizeにサイズが入る
> このとき dwSizeは完全なサイズが入っているので
> 第2引数は dwSize+1 だけでいいと思うのですが
> 何故かsizeof(char)*dwSize+1となっているのですが
> charが8バイトでdwSize+1が17バイトだとしたら
> メモリーの無駄遣いしまくってしまってないでしょうか?

…どこを指しているのかワカラン

614 名前:603 :05/02/04 23:19:33
>>613
申し訳ないですわかりにくかったです

HANDLE hFile;← CreatFileで既に作ってる
char *lpszBuf;
DWORD dwSize;
HGLOBAL hMen;

dwSize = GetFileSize(hFile, NULL);←hFileのサイズが入る
hMem = GlobalAlloc(GHND, sizeof(char) * dwSiza + 1);
lpszBuf = (char *)GlobalLock(hMen);

dwSize = GetFile(hFile , NULL);←dwSizeにサイズが入る
このとき dwSizeは完全なサイズが入っているので
第2引数は dwSize+1 だけでいいと思うのですが
何故かsizeof(char)*dwSize+1となっているのですが
charが8バイトでdwSize+1が17バイトだとしたら
メモリーの無駄遣いしまくってしまってないでしょうか?

まだわかりにくいと思うのですが宜しくおねがいします

615 名前:デフォルトの名無しさん :05/02/04 23:24:19
sizeof(char) は8じゃないよ

616 名前:デフォルトの名無しさん :05/02/04 23:24:34
sizeof(char)は1と決まっているので問題ない。意味もない。

617 名前:603 :05/02/04 23:30:51
8ビットでした・・・・・
8ビットは1バイトですね

本当にはずかしい
テンパってテンパって・・・

くだらない質問に答えていただいてありがとうございます。
くだらなかったのにマジで悩んでました


618 名前:デフォルトの名無しさん :05/02/04 23:37:12
さてここでお約束の「1byteが8bitとは限らない」をお送りしません。

619 名前:デフォルトの名無しさん :05/02/05 00:52:54
将来考えれば、32バイト境界やればハードとソフトが一致する

620 名前:デフォルトの名無しさん :05/02/05 01:24:53
チーズビットって今でも売ってる?

621 名前:デフォルトの名無しさん :05/02/05 01:39:54
>>620
ttp://www.tscn.net/antenna/news/food/11/0.html

622 名前:デフォルトの名無しさん :05/02/05 01:42:36
厨臥区政が混ざってるな

623 名前:デフォルトの名無しさん :05/02/05 03:19:11
string.hのstrstrやstrchrと同じようなことをするWinAPI関数はありますか?
strlen=lstrlen、strcpy=lstrcpy、sprintf=wsprintfがあるぐらいだからそれもありそうなんだが。

624 名前:デフォルトの名無しさん :05/02/05 03:35:55
shlwapi.h の中にありますよ。

625 名前:デフォルトの名無しさん :05/02/05 03:42:27
HYU-
とかいうやつは、しゃらぽあ、あいこ、いらない、五月蠅い

626 名前:デフォルトの名無しさん :05/02/05 03:46:20
>>618
asciiはそうだ、8ビットこーどは西洋にはない

627 名前:デフォルトの名無しさん :05/02/05 03:48:01
>8ビットこーどは西洋にはない
>8ビットこーどは西洋にはない
>8ビットこーどは西洋にはない

628 名前:デフォルトの名無しさん :05/02/05 03:49:26
>>624
ありますた。
どうもありがd。

629 名前:デフォルトの名無しさん :05/02/05 03:53:10
1オクテット

630 名前:デフォルトの名無しさん :05/02/05 04:36:12
ASCIIは7bit

631 名前:デフォルトの名無しさん :05/02/05 07:08:54
>>603
GlobalAllocなんて忘れろ。
クリップボードを扱うときしか使わない。

632 名前:デフォルトの名無しさん :05/02/05 07:10:53
>>631
理由は?

633 名前:デフォルトの名無しさん :05/02/05 07:14:01
>>632
16Bit時代の遺物
HeapAlloc使え

634 名前:デフォルトの名無しさん :05/02/05 07:20:24
>>633
さむ

635 名前:デフォルトの名無しさん :05/02/05 07:28:29
>クリップボードを扱うときしか使わない。

使うじゃん。
おまえもしかして、malloc で済む用事に
わざわざ VirtualAlloc だの CreateFileMapping だの使う手合いか?

636 名前:デフォルトの名無しさん :05/02/05 07:53:27
>>635
>>633

637 名前:デフォルトの名無しさん :05/02/05 08:00:33
>>636
意味わからん

638 名前:デフォルトの名無しさん :05/02/05 08:14:28
Globalはあまり使わないなぁ…
大抵自プロセス内だけのデータならLocalAllocで済ますんだが

639 名前:デフォルトの名無しさん :05/02/05 08:51:13
そういうのを裸で使う理由があればそうするだろうけど
固有の機能を必要としない場面でむやみに使うと
移植性おとすだけだろ

640 名前:デフォルトの名無しさん :05/02/05 08:56:40
>>638
Win32 APIでは、 ローカル ヒープとグローバル ヒープに違いはありません。
バカじゃねーの?

641 名前:デフォルトの名無しさん :05/02/05 09:02:35
>>635
malloc で済む用事にCreateFileMapping
具体的にmalloc で済む用事にCreateFileMappingが使える例を教えて下さい。

642 名前:デフォルトの名無しさん :05/02/05 09:13:18
HeapAlloc使え

643 名前:デフォルトの名無しさん :05/02/05 09:17:39
>>641
ファイルマッピングの使い方が知りたいなら MSDN でも嫁
ここでイチから教えてやるほどヒマじゃねえ
時間単価1万くらい出すなら別だが

644 名前:デフォルトの名無しさん :05/02/05 09:21:36
>>643
使い方は知ってますがmallocの代わりなんかに使える例を教えて下さい。

645 名前:デフォルトの名無しさん :05/02/05 09:31:46
はっきりいってmallocが一番効率がいい。
HeapAllocを何も考えずに直接使うのはただのバカ。

646 名前:デフォルトの名無しさん :05/02/05 09:42:36
>>643
確保したいサイズを指定してCreateFileMappingを呼び、
MapViewOfFileすればいいだけだろ?
mallocが使える全ての場所で、その代わりにできるが?

もちろん、mallocが使えるならmallocを使うに越したことは無い。

647 名前:646 :05/02/05 09:43:47
レス番間違えた。>>641, 644

648 名前:デフォルトの名無しさん :05/02/05 09:43:49
VirtualAlloc
----柵----
malloc > HeapAlloc(GetProcessHeap()) >>>>(越えられない壁)>>>> Global/LocalAlloc
----別世界----
CreateHeap, IMalloc, Global/Localメモリハンドルが必要なとき
----別次元----
CreateFileMapping

649 名前:デフォルトの名無しさん :05/02/05 09:58:04
お前らレベル低すぎ。
バグばっかり作ってるんだろうな。

650 名前:デフォルトの名無しさん :05/02/05 10:04:49
>>649
はいはい。君の作ったコードも先輩がこっそり
直してくれてるんだろうね。

651 名前:デフォルトの名無しさん :05/02/05 10:09:13
alloca

-----神の壁-----

malloc, new

----一般人の壁------

HeapAlloc

----バカの壁--------

LocalAlloc, GlobalAlloc

652 名前:デフォルトの名無しさん :05/02/05 10:11:22
てかvector使えば自分で動的確保する必要なんてほぼ無いだろ。
動的バッファもvector<char>でいいし。

653 名前:デフォルトの名無しさん :05/02/05 10:14:12
質問
「あるウィンドウ」を表示させるとき、今のアクティブなウィンドウをディアクティブにしないで、
アクティブのままにしつつ、「あるウィンドウ」を表示させたい場合どうすればいいのでしょうか?

654 名前:デフォルトの名無しさん :05/02/05 10:19:39
あるウィンドウを表示させた後に今のウィンドウをアクティブにし直せばいいじゃん。

655 名前:デフォルトの名無しさん :05/02/05 10:29:06
ShowWindowにSW_SHOWNAてのがあるな

656 名前:デフォルトの名無しさん :05/02/05 11:06:40
>>654
もうちょっと質問者の意図を汲んでやれよ。

657 名前:デフォルトの名無しさん :05/02/05 13:15:15
今さあ、
WaitCommEvent();
つかってさあ、
スレッドでシリアルの受信バッファのイベント待って、
受信バッファのデータをchar変数にバッファさせようとしてるのよ。

ところが、一回受信してEV_RXCHARのイベントが上がったら、
上がりっぱなしで、charにたまりつづけてるんだけど、
どうすりゃいいのよ?


つうかさ、いまさら232Cかよ。



658 名前:デフォルトの名無しさん :05/02/05 13:16:51
>>657
Cisco製品を普段使ってるんですが、
その際、TeraTermを使用してるんです。

で、自作のターミナルを作ろうと思ってるんですが、
その際、資料として参考になるサイトってご存知得ないですか?
できれば、教えていただきたいのですが。

よろしくお願いします。

659 名前:デフォルトの名無しさん :05/02/05 13:19:18
クスコ

660 名前:デフォルトの名無しさん :05/02/05 14:29:15
IMEの漢字変換ポップアップウィンドウを、こちら側で表示させたい場合、どのAPIを呼び出せばいい?
例えば、「あいさつ」という文字列を変換させたいとして、

そのAPIに「あいさつ」という文字列を引数として渡すことで、漢字変換対象のリストを表示させるみたいな。

661 名前:デフォルトの名無しさん :05/02/05 14:31:22
>>657
>>658

5年くらい前まだ、プログラム始めたての頃のソースあった。
はじめたての頃のなので正しく出来てるかわからんしどうなってるのか忘れてるので怪しい情報になるが参考までに。

こんな流れでやってた。
CreateFile      : ポートオープン:GENERIC_READ | GENERIC_WRITEでオーバーラップ使ってたのでFILE_FLAG_OVERLAPPEDあり。
SetCommMask   : EV_RXCHARとか使用したいイベントのマスク設定
SetupComm     : 通信バッファ設定
PurgeComm     :  PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEARとかでクリアして初期化しているらすぃ
SetCommTimeouts : タイムアウト時間設定
SetCommState   : フロー制御とかの設定

別スレッドWaitCommEventでWaitして制御かえったら
if((dwEvtMask & EV_RXCHAR))とかでイベント確認して処理してまたWaitループ
緊急停止はEscapeCommFunctionでイベント立ててWaitぬけてクリア処理

書いてるうちになんとなく思い出してきたが、
上で書いた関数での設定色々あるけど一つ一つがすごく重要な設定だった気がする。
結構めんどくさかったような。

RS232Cのフロー制御の知識とか本が無いと意味不明だったきがする。



662 名前:658 :05/02/05 14:37:50
>>661さん
助かります。
それを参考にいろいろググりつつ、自作ターミナルを作ってみようと思います。

663 名前:デフォルトの名無しさん :05/02/05 14:56:24
>>657
無手順?

複数のスレッドで交代で切れ目なく受信バッファを読むとかダメ?

664 名前:デフォルトの名無しさん :05/02/05 17:11:40
>>662
SimpleTerm とかいうサンプルが MSDN にあったのではないか。
オレはこれを元に作った ComNifty まがいで nifty のパソコン通信していた。
なんとか7という口へ 56Kモデム経由だったと思う。

665 名前:デフォルトの名無しさん :05/02/05 17:26:15
TeraTermもソース公開なんだよなあ…

666 名前:デフォルトの名無しさん :05/02/05 18:13:57
人のソースを読もうとする気がしないのは言うまでも無いだろw

667 名前:デフォルトの名無しさん :05/02/05 21:14:30
どうせ弄るのなら、TeraTermよりPUTYYの方が良いだろう。
TeraTermの拡張インタフェースは、かなり捻じれている。
それを思えば、単体で動くPUTTYのソースを直接弄って
独自PUTTYに改変するのいい。

668 名前:657 :05/02/05 23:48:20
>>663

イベントが上がりっぱなしなのがなんでなのかが
わかってないのよ、私。
受信バッファ読んだらイベント下がると思ってたんだけどな・・・
勝手な思い込みに近いけど。

669 名前:デフォルトの名無しさん :05/02/06 00:22:09
ウィンドウを常にアクティブにする方法ってありますか?

670 名前:デフォルトの名無しさん :05/02/06 00:33:22
Zオーダーが一番上とかならあるけどな

671 名前:デフォルトの名無しさん :05/02/06 00:36:52
>>668
受信バッファ小さすぎるとか
ReadFile()が追いついてないとか

672 名前:デフォルトの名無しさん :05/02/06 01:10:18
フックして、他のプロセスへのWM_ACTIVATEAPPを潰してはどうでしょう?

673 名前:デフォルトの名無しさん :05/02/06 01:18:07
>>668
FILE_FLAG_OVERLAPPED を指定した場合は IOがペンディングになってるかどうかをチェックしないと。

674 名前:デフォルトの名無しさん :05/02/06 03:49:26
ファイル名の変更はどうすれば良いのでしょうか?
Win32APIで出来ますか?

675 名前:デフォルトの名無しさん :05/02/06 03:51:49
できます。

676 名前:デフォルトの名無しさん :05/02/06 03:57:51
>>674
MoveFile()
rename()

677 名前:デフォルトの名無しさん :05/02/06 13:56:31
すみません。waveOutWrite()で聞きたいことあるんですが、
まずwaveOutWrite()でヘッダ送る(音データが格納されているバッファのアドレスも送られる)。
その後に音データバッファのデータを変更してもOKなんですか?
もちろん再生位置付近のところとかは、いじらないようにします。

678 名前:デフォルトの名無しさん :05/02/06 16:30:10
聞く前にやってみろ

679 名前:677 :05/02/06 18:07:04
>>678
いや、やってみて普通にできたから聞いてみたんだが…
共有違反とかしてそうだから不安で聞いてみた。

680 名前:デフォルトの名無しさん :05/02/06 19:41:35
LoadImageで画像表示してます。
画像Aを背景にして、画像Bを上に表示したいのですが、画像Bの要らない部分を透明に出来ますか?
分かる方お願いします。

681 名前:デフォルトの名無しさん :05/02/06 19:48:54
MaskBlt

682 名前:デフォルトの名無しさん :05/02/06 22:09:37
>>680
冴子先生みたいになればいいんなら

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/layerwin.asp

683 名前:デフォルトの名無しさん :05/02/06 22:12:32
半角カナを全角カナへ変換するAPIはありませんでしょうか?

684 名前:デフォルトの名無しさん :05/02/06 23:03:45
ttp://www.google.co.jp/search?hl=ja&q=%E5%8D%8A%E8%A7%92+%E5%85%A8%E8%A7%92+%E5%A4%89%E6%8F%9B+api&lr=lang_ja


685 名前:デフォルトの名無しさん :05/02/07 04:01:37
CreateFile関数なんですが

C:\txt\a.txt だと読めないのに
C:\\txt\\a.txtだと読めるのはなぜですか?

_getcwdでデレクトリー調べているので
C:\txt としかゲット出来ないですけど
どうしたら良いんでしょうか?

686 名前:デフォルトの名無しさん :05/02/07 04:08:36
文字のエスケープ

687 名前:デフォルトの名無しさん :05/02/07 04:23:02
付け足す文字を
\\a,txtにしたら出来ました
どうも^^

688 名前:デフォルトの名無しさん :05/02/07 11:05:35
ファイル名まで変えてどうすんだよ

689 名前:デフォルトの名無しさん :05/02/07 12:53:16
エディットボックスのウインドウメッセージのWM_KEYDOWNで
Enterキーが押されたときに処理させたいのですが、
押すとビープ音が鳴ってしまいます。
これを鳴らさないようにするには、どうすればいいのですか?

ちなみにCreateのときにES_AUTOVSCROLLとES_MULTILINEを設定すると
鳴らなくなるんですが、処理後に改行してしまいます。

690 名前:デフォルトの名無しさん :05/02/07 14:27:38
>>689
耳を塞げ

691 名前:デフォルトの名無しさん :05/02/07 15:43:27
>>689
エディットボックスをサブクラス化してやっているって事でいいのかな?
だとしたらWM_KEYDOWNで処理した場合はCallWindowProcに渡さなければいいんでないか?
状況が良くわからないので答えようがないけど

692 名前:689 :05/02/07 16:08:00
>>691
処理後return 0で返したけどだめ。
また、キーコードが入ってるwpを0にしてもだめでした


693 名前:デフォルトの名無しさん :05/02/07 16:42:02
>>685
C言語の超超基本的な事でWindowsAPI全然関係ないぞ・・・

694 名前:デフォルトの名無しさん :05/02/07 16:47:49
test1.obj : error LNK2019: 未解決の外部シンボル "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) が関数 _WinMain@16 で参照されました。
Debug/test1.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と出るのですがどういう事なのでしょうか?

695 名前:デフォルトの名無しさん :05/02/07 16:52:30
>>694
関数WndProcが無いとおっしゃってます

696 名前:デフォルトの名無しさん :05/02/07 17:19:03
ソースくらい貼りつけろ

697 名前:デフォルトの名無しさん :05/02/07 17:24:50
>>696
そーっすね。

698 名前:デフォルトの名無しさん :05/02/07 17:29:02
>>695
ありがとうございます^^
書き方をミスってましたw

もう一つ質問があるのですが、画像表示を速くすると、画像がちらついてしまいます。
どうすればいいのでしょうか?

699 名前:デフォルトの名無しさん :05/02/07 17:32:10
>>698
背景を消去しないようにする
(WM_ERASEBKGNDをDefWindowProcに渡さない)

700 名前:デフォルトの名無しさん :05/02/07 17:34:26
スタートアップに登録されたアプリケーションが、
OSの起動時だけ、実行したいプログラムがあるとして、
OSの起動時か?そうでないかを知るには
どうしたら良いのでしょうか?
宜しくお願いします。

701 名前:691 :05/02/07 17:39:21
>>689
>>692

WM_KEYDOWNじゃなくてWM_CHARにして
wpがVK_RETURNだったらCallしないって感じでどうだろう。

//サブクラス化したプロシージャ
LRESULT CALLBACK _SubWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  switch(uMsg)
  {
  case WM_CHAR:
    if(wParam == VK_RETURN){
      //処理
      return 0;
    }
  }
  return CallWindowProc();
}

702 名前:デフォルトの名無しさん :05/02/07 17:46:44
>>698
すいません。どのように記述すればいいのでしょうか??

703 名前:デフォルトの名無しさん :05/02/07 17:47:18

>>699
です

704 名前:デフォルトの名無しさん :05/02/07 17:52:20
>>703
case WM_ERASEBKGND: return 0;

705 名前:689 :05/02/07 17:54:15
>>701
WM_CHARにしたらできました
教えて頂いてありがとうございます

706 名前:デフォルトの名無しさん :05/02/07 18:05:39
LCMapStringって「ガ」を「ガ」に変換してくれますか?

707 名前:デフォルトの名無しさん :05/02/07 18:10:31
>>700
GlobalAddAtomじゃダメかな?

708 名前:デフォルトの名無しさん :05/02/07 18:11:50
>>706
やってみたら?

709 名前:デフォルトの名無しさん :05/02/07 18:25:02
>>708
やってみたら「ガ」を「ガ」になった。
すごいAPIだ

710 名前:デフォルトの名無しさん :05/02/07 18:34:04
日本語おかしくてもプログラミングはできるんですね。

711 名前:デフォルトの名無しさん :05/02/07 18:37:45
をかしくても良いぢゃない。日本語だもの。

712 名前:デフォルトの名無しさん :05/02/07 18:52:14
>>704
ありがとうございます。
出来たのですが、ちと、おかしくなってしまいます。
WM_KEYDOWNでキー入力をすると画像を描画するようにしてるので、押しっぱなしにすると描画され続けてしまいます。
WM_KEYUPだとはなしたときなので使いづらいです。
キー入力で押し放しでも1回の入力にする方法って有りますか?

713 名前:デフォルトの名無しさん :05/02/07 18:54:40
fRepeatでも見れば。

714 名前:デフォルトの名無しさん :05/02/07 19:06:46
おかしいのはあなたの頭。

715 名前:デフォルトの名無しさん :05/02/07 19:11:27
あるWindowに属するクライアント内にマウスカーソルがあるときは、WM_MOUSEMOVEでひろえばいいですが、
あるWindowに属するクライアント外にマウスカーソルがあるということがわかる、WMメッセージ(または何か別の方法)はありますか?

カーソルがクライアント内からクライアント外へ出たことを知りたいもので。

宜しくお願いします。

716 名前:デフォルトの名無しさん :05/02/07 19:11:47
>>712
2回目以降おなじコードなら無視すればいいじゃん

717 名前:デフォルトの名無しさん :05/02/07 19:32:27
猫とかに書いてある、通常のウィンドウを表示するプログラムがありますが、
それと同じようなタイプのウィンドウをもう1つ出して、
新しく出た方のウィンドウにフォーカスを移したいと思います。
これを専門用語で言うと、STATICなPOPUPウィンドウを作り、
それをサブクラス化するでいいんでしょうか。
検索する時のキーワードにさせていただきます。

718 名前:デフォルトの名無しさん :05/02/07 19:45:01
タイマでGetCursorPosでも発行しれ。

719 名前:デフォルトの名無しさん :05/02/07 19:48:23
>>715
1.マウスキャプチャして検知
2.WM_MOUSELEAVEを拾う(Win 98以降)

720 名前:717 :05/02/07 19:55:07
>>717
モーグルダイアログが自分の探していた物っぽいです。
もう一度それを調べてみます。失礼します。

721 名前:デフォルトの名無しさん :05/02/07 20:00:59
お前は冬季五輪にでも出場する気か?

722 名前:717 :05/02/07 20:02:04
私も質問した側で、答えていいか分かりませんが、
自分なら、WM_MOUSEMOVEが来る毎に、以下のような感じの関数を使い、
真なら、ウィンドウの中にマウスポインタがあるとします。

int CheckWindowCursorPos(HWND hWnd, POINT *point)
{
GetCursorPos(point);
if(!ScreenToClient(hWnd, point)) return 0;
return 1;
}

723 名前:715 :05/02/07 20:05:03
>>719
マウスボタンを押さないで、検知したいので、それだと無理です。
>Winにおいては、WM_MOUSE_LEAVEは、WM_LBUTTON_DOWN後に TrackMouseEvent?();をTME_LEAVEを指定して呼び出した場合に一度だけ送信される。

でも、ありがとうございました。

724 名前:717 :05/02/07 20:05:10
orz・・。モーダルダイアログです。

725 名前:デフォルトの名無しさん :05/02/07 20:05:28
WINDOW外れたらWM_MOUSEMOVEは来ないんだが・・・
WM_MOUSEMOVEが来るのは常にwindow内にあるときのみ

726 名前:715 :05/02/07 20:07:13
>>725
ええ、おっしゃるとおりで。

で、クライアント領域を外れたら、通知されるメッセージがあると助かるのですが、
ないとなると、自作システムを変更せざるえません。

727 名前:デフォルトの名無しさん :05/02/07 20:11:59
すればいいじゃん。

728 名前:717 :05/02/07 20:15:11
>>725
そうですね。間違えました。
自分も、マウスの位置によって、処理の動作を変えるとか
やっているんですが、ウィンドウの中での位置でした。すみません。

729 名前:デフォルトの名無しさん :05/02/07 20:15:30
キャプチャしまくれ

730 名前:デフォルトの名無しさん :05/02/07 20:18:55
TrackMouseEventじゃないの?

731 名前:デフォルトの名無しさん :05/02/07 20:19:03
テンキー押しっぱなしにしても1回の処理にするように出来ません・・・
2回目同じコードなら無視する方法も考えてみたけど分からなかったです・・・・
どうすればいいのでしょうか?

732 名前:デフォルトの名無しさん :05/02/07 20:20:57
がんばれ

733 名前:デフォルトの名無しさん :05/02/07 20:32:48
>When the mouse is captured, menu hotkeys and
>other keyboard accelerators do not work.

734 名前:デフォルトの名無しさん :05/02/07 20:34:12
>>731
WM_KEYDOWNの説明よく見れ
lParamの0-15ビットにリピートカウント(押しっぱなしによって何度もキーが押されるた回数)入ってるから
キーリピートでの入力じゃない場合はすればよい。

735 名前:デフォルトの名無しさん :05/02/07 20:59:00
>>734
どうもです^^
例など教えて頂けませんか?

736 名前:デフォルトの名無しさん :05/02/07 21:01:16
>>735
氏ね

737 名前:デフォルトの名無しさん :05/02/07 21:28:40
アプリケーションで、GetSysemColorで取り出せるシステム色の一覧が見れるフリーソフトってありますか?
あると便利なんですが。

Win32プログラミングで使いたいのです。

738 名前:デフォルトの名無しさん :05/02/07 21:31:31
「コントロールパネル」->「色の設定」


739 名前:734 :05/02/07 21:47:52
>>731
>>735

すまんすまん、今良く見たら自分が勘違いしていた、>>734じゃできないわ。
だが、結局答えがWM_KEYDOWNの説明にそのまま書いてあったぞ。
lParamのビット30が直前のキー状態を保持してるので、その状態が離された状態なら初回と判断すればよい。

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  switch(uMsg){
  case WM_KEYDOWN:
    if( ((lParam >> 30) & 0x00000001) == 0){ // 初回押下なら
      // 初回押下時のみの処理
    }
    break;
  }
}

MFCならこんな感じかな?
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags )
{
  if( ((nFlags >> 15) & 0x00000001) == 0){ // 初回押下なら
    // 初回押下時のみの処理
  }
}


だがな
>>731 >>735よ、なんていうか。

市ね

740 名前:デフォルトの名無しさん :05/02/07 21:52:45
スレッドハンドルの閉じ方について質問です。

_beginthreadexで作成したスレッドは
CloseHandleで閉じなければいけませんが、
スレッドが終了したら閉じるということを
やりたい場合、どう書くのがいいのでしょうか?

今はスレッド関数を抜けるreturn文の直前で、
OnEndThread()みたいな通知関数を呼んで、
その中でCloseHandle()を呼び出す方法にしています。
このOnEndThread()で、CloseHandle()を呼び出す前に、
スレッドが確実に終了してからCloseHandleしたほうがいいのでしょうか?
思いつくのは、Sleep()で適当に待つか、
WaitForSingleObject()にタイムアウトを設定して無限ループで
リトライをかける、ぐらいなのですが、こんなんでいいのでしょうか。
それとも気にしないでCloseHandleしていいのでしょうか?



741 名前:デフォルトの名無しさん :05/02/07 22:01:38
気にしないでCloseHandleしていい

742 名前:デフォルトの名無しさん :05/02/07 22:11:22
>>740
スレッドハンドルは使わないならスレッド作成直後に即CloseHandleしてもOK

743 名前:デフォルトの名無しさん :05/02/07 22:17:13
>>741,742
単純、明快な回答ありがとうございます。

>スレッドハンドルは使わないならスレッド作成直後に即CloseHandleしてもOK

試してみて大丈夫だったんで不思議に思ってたんですが、
このことってMSDNとかに書いてあるでしょうか?

744 名前:デフォルトの名無しさん :05/02/07 22:41:05
>>742
まじで?

745 名前:デフォルトの名無しさん :05/02/07 22:48:52
スレッドハンドルが必要になるのはスレッドの終了を待機するときだけ。

746 名前:デフォルトの名無しさん :05/02/07 22:52:08
ニヤニヤ

747 名前:デフォルトの名無しさん :05/02/07 22:53:24
そっか。ハンドルって媒介だから、必要なければ閉じちゃっていいんだ。納得した。

748 名前:デフォルトの名無しさん :05/02/07 23:06:49
この調子だとCreateProcess()したときにプロセスハンドルもスレッドハンドルも閉じてないんだろうなぁ。

749 名前:デフォルトの名無しさん :05/02/07 23:07:33
向こう側で PulseEvent に来る時点で
ハンドルが閉じられてても動作保証あるのかって問いには
誰も答えられないのか

750 名前:742 :05/02/07 23:09:35
CreateProccessのMSDN記述に
CloseHandle 関数を使って、プロセスのハンドルとメインスレッドのハンドルの両方を閉じなければなりません。
これらのハンドルが必要ない場合、プロセスを作成した直後にそれらのハンドルを閉じるのが最善です。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
とある。


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