12/08/04 11:18:03.75
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
■過去スレ
Win32API質問箱 Build109
スレリンク(tech板)
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
英語版( URLリンク(msdn.microsoft.com) )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
2:デフォルトの名無しさん
12/08/04 11:21:18.18
イイネ・
3:デフォルトの名無しさん
12/08/04 11:21:58.24
質問者はまずこれをNGに追加すること
荒らしコテの相手をしているとあなたも荒らしだと思われます
【NGワード推奨一覧】
片山
金魚
kingyo
QZ
4:片山博文MZボット ◆0lBZNi.Q7evd
12/08/04 11:29:36.93
>>3 やめろよ
5:デフォルトの名無しさん
12/08/04 11:32:12.27
>>1
ようゴミクズ
6:デフォルトの名無しさん
12/08/04 11:39:19.63
☆☆☆☆☆☆☆☆ 質問者必読 ☆☆☆☆☆☆☆☆
質問者はまずこれらの荒らしコテをNGに追加すること
荒らしコテの相手をしているとあなたも荒らしだと思われます
【NGワード推奨一覧】
片山
金魚
kingyo
QZ
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
7:デフォルトの名無しさん
12/08/04 11:51:19.95
>>4
それが人にものを頼む態度か
8:デフォルトの名無しさん
12/08/04 12:00:26.15
英語版のMSDNドキュメントを読めばこのスレは不要。
9:デフォルトの名無しさん
12/08/04 12:00:50.25
頼んでねーよボケ
死ね
10:デフォルトの名無しさん
12/08/04 12:01:54.08
ドキュメントの当該ページに誘導したり解釈して説明したりすればいい。
11:デフォルトの名無しさん
12/08/04 12:06:46.99
ちょっと待て
何でダイアログのラジオボタンに CheckDlgButton()?
CheckRadioButton() だろ
12:デフォルトの名無しさん
12/08/04 12:46:17.84
>>4
AUTORADIOBUTTONスタイルになっています
>>11
ボタンが2つしかなければCheckDlgButtonでも動作的には同じと思ってそっちを使ってました
CheckRadioButtonでやってみても元に戻ってしまいます
該当箇所のリッチエディットプロシージャ(サブクラス)のソースです
case WM_KEYDOWN:
switch(wParam) {
case 'F':
if(GetKeyState(VK_CONTROL) & 0x80) {
CheckRadioButton(rei.fri.hDlg, IDC_RADIOBUTTON_FIND, IDC_RADIOBUTTON_REPLACE, IDC_RADIOBUTTON_FIND);
return 0;
}
break;
case 'H':
if(GetKeyState(VK_CONTROL) & 0x80) {
CheckRadioButton(rei.fri.hDlg, IDC_RADIOBUTTON_FIND, IDC_RADIOBUTTON_REPLACE, IDC_RADIOBUTTON_REPLACE);
return 0;
}
break;
}
break;
13:デフォルトの名無しさん
12/08/04 12:59:34.44
リッチエディットにフォーカスがある時にCtrl+Hを押せば検索ラジオボタンから置換ラジオボタンに切り替わるのですが
検索と置換ダイアログがアクティブになった瞬間になぜかIDC_RADIOBUTTON_FINDが飛んでくるんです
lParamに検索ラジオボタンのハンドルが入ってるので検索ラジオボタンがクリックされたと認識されてるみたいなんですが
検索ラジオボタン以外の場所をクリックしてアクティブにしてもIDC_RADIOBUTTON_FINDが飛んできます
CheckRadioButtonは見た目上のチェックを変更するだけでは無くてWM_COMMANDの形でメッセージを発行するのですか?
もしそうだとすると非アクティブ時にメッセージがキューにたまったままって事になってしまいます
他に何か思い当たる事があれば教えて下さい
14:デフォルトの名無しさん
12/08/04 13:03:26.55
>>12-13
情報後出しはゴミの典型
15:片山博文MZボット ◆0lBZNi.Q7evd
12/08/04 13:11:57.78
(誤) GetKeyState(VK_CONTROL) & 0x80
(正) GetKeyState(VK_CONTROL) < 0
16:デフォルトの名無しさん
12/08/04 13:13:32.84
>>13
WM_COMMAND メッセージ発行するよ
CheckRadioButton() によるものではなく、ラジオボタンの機能として
メッセージがキューにたまるって、どういうメッセージ処理してるの?
メッセージが処理されないなら CheckRadioButton() にも反応しないはずだけど
17:デフォルトの名無しさん
12/08/04 13:15:21.63
>>16
そこに関しては答える義務はありません
問題の解決方法のみ簡潔にお願いします
18:デフォルトの名無しさん
12/08/04 13:16:23.88
>>9
死ねは自殺教唆だって知ってる?
19:デフォルトの名無しさん
12/08/04 13:20:06.02
>>18
死ねと言われた人間が自殺しなければ自殺教唆は成立しない
成立させたければさっさと死ね
20:デフォルトの名無しさん
12/08/04 13:24:16.43
>>15 変更してみても動作は同じでした。& 0x80と < 0は表現方法が違うだけで同じではないのですか?
>>16
CheckRadioButton() に反応してるのでたまってはいないようですけど
アクティブになるまで(アクティブになったタイミングで)どうして
WM_COMMANDの形でIDC_RADIOBUTTON_FINDが発行されるのかわかりません
普通にラジオボタンをクリックした時の動作は問題無いです
21:デフォルトの名無しさん
12/08/04 13:24:56.19
>>19
死ななくても自殺を目的とした行為を誘発すれば成立するよ。
22:デフォルトの名無しさん
12/08/04 13:26:51.62
>>20
本も買わずに質問してるゴミは失せろ
情報をただでもらえるという腐った発想の奴がまともにプログラム組めるわけないだろ
23:デフォルトの名無しさん
12/08/04 13:28:17.02
>>21
じやあ早くやれや
それでミスってそのまま死ね
24:デフォルトの名無しさん
12/08/04 13:30:38.10
>>15
>表現方法が違うだけで同じ
というのはイコールって意味で同じと言ったのではありませんすみません
if文の条件式としてはどちらも同じ意味で成立すると思うのですが
0x80 = 128
128 = 0b10000000
0b10000000 = 上位ビットはマイナス
じゃないですか?
25:デフォルトの名無しさん
12/08/04 13:32:04.75
↑
本気で言ってるとしたら本物のヴァカだな
26:片山博文MZボット ◆0lBZNi.Q7evd
12/08/04 13:33:00.57
>>24 SHORTは2バイトだよ。上位ビットは0b1000000000000000になる。
27:デフォルトの名無しさん
12/08/04 13:45:08.93
愚か者がこの世から消滅したらこんなスレ要らないのにな
28:デフォルトの名無しさん
12/08/04 13:49:38.06
>>9
じゃあ>>4は何?
29:デフォルトの名無しさん
12/08/04 13:49:51.17
>>26
GetKeyStateの戻り値に合わせるとそうなりますね
ダイアログの初期化でもWM_COMMAND形式でIDC_RADIOBUTTON_FINDが発行されていました
case WM_INITDIALOG:
各コントロールのハンドル取得
* SetWindowPos(hDlg, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
* ShowWindow(hDlg, SW_SHOW);
return (INT_PTR)TRUE;
この*の行を実行した直後に何もしなくても(合計2回)発行されていました
システムが使ってるのかとIDC_RADIOBUTTON_FINDのID値を変更しても意味は無かったです
30:片山博文MZボット ◆0lBZNi.Q7evd
12/08/04 13:54:55.64
SetWindowPosはSWP_NOACTIVATEを指定しないとアクティブ化しようとするよ。
WM_INITDIALOGでTRUEを返すと、wParamのコントロールにフォーカスを移動させるよ。
31:片山博文MZボット ◆0lBZNi.Q7evd
12/08/04 13:56:32.21
ShowWindowでアクティブ化したくないなら、SW_SHOWNOACTIVATEを指定する。
32:デフォルトの名無しさん
12/08/04 14:01:01.74
あぼーんだらけ
33:デフォルトの名無しさん
12/08/04 14:06:11.66
いちいち報告すんなカス
34:デフォルトの名無しさん
12/08/04 14:06:35.09
MSDNの簡単な英語も読めないバカは死ぬべき。
35:片山博文MZボット ◆0lBZNi.Q7evd
12/08/04 14:12:03.93
ソースさらしてくださいませ、質問者様
36:デフォルトの名無しさん
12/08/04 14:25:36.97
>>28
依頼じゃない
命令だ
37:デフォルトの名無しさん
12/08/04 14:30:29.34
>>35
最小構成で実験してました
>>30-31を適用したら戻らなくなりました
ありがとうございました
38:デフォルトの名無しさん
12/08/04 15:05:46.29
>>37
いちいち報告すんなつっただろカス
二度と来るな
39:デフォルトの名無しさん
12/08/04 15:11:43.24
最小構成の仕方に問題があったのか元のソースに変更を適用したらまた元に戻るようになってしまいました
WM_INITDIALOG内でメッセージが発行される事は無くなったのですが
case IDC_RADIOBUTTON_FIND:
MessageBox(NULL, _T("Find"), _T("FindReplace"));
return (INT_PTR)TRUE;
case IDC_RADIOBUTTON_REPLACE:
MessageBox(NULL, _T("Replace"), _T("FindReplace"));
return (INT_PTR)TRUE;
このようにして確認してみた所
Ctrl+Hでダイアログ表示(置換がチェック)
→ダイアログをクリックしてアクティブに(問題無し)
→メインのウィンドウをアクティブにしてCtrl+F(検索がチェック)
→ダイアログをクリックしてアクティブに(IDC_RADIOBUTTON_REPLACEが17回ほど飛んでくる)
という状態になりました
40:デフォルトの名無しさん
12/08/04 15:15:12.48
ウィンドウプロシージャの方は初期状態(VC++2010プリコンパイル)に以下を追加
case WM_CREATE:
CreateDialog(NULL, IDD_USERICHEDIT_FINDREPLACE, hWnd, FindReplaceProc);
// VisibleはFALSE
break;
case WM_KEYDOWN:
switch(wParam) {
case 'F':
if(GetKeyState(VK_CONTROL) < 0) {
if(IsWindowVisible(rei.fri.hDlg) == 0) {
ShowWindow(rei.fri.hDlg, SW_SHOWNOACTIVATE);
}
CheckRadioButton(rei.fri.hDlg, IDC_RADIOBUTTON_FIND, IDC_RADIOBUTTON_REPLACE, IDC_RADIOBUTTON_FIND);
return 0;
}
break;
case 'H':
if(GetKeyState(VK_CONTROL) < 0) {
if(IsWindowVisible(rei.fri.hDlg) == 0) {
ShowWindow(rei.fri.hDlg, SW_SHOWNOACTIVATE);
}
CheckRadioButton(rei.fri.hDlg, IDC_RADIOBUTTON_FIND, IDC_RADIOBUTTON_REPLACE, IDC_RADIOBUTTON_REPLACE);
return 0;
}
break;
}
break;
41:片山博文MZボット ◆0lBZNi.Q7evd
12/08/04 15:16:02.07
>>39
WM_COMMANDメッセージで、LOWORD(wParam)とHIWORD(wParam)を
両方チェックしないと駄目だよ。
42:デフォルトの名無しさん
12/08/04 15:16:41.35
//ダイアログプロシージャ
INT_PTR CALLBACK FindReplaceProc(HWND hDlg, UINT unMessage, WPARAM wParam, LPARAM lParam)
{
INT wmId, wmEvent;
switch (unMessage) {
case WM_INITDIALOG:
rei.fri.hDlg = hDlg;
SetWindowPos(hDlg, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
return (INT_PTR)FALSE;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch(wmId) {
case 2: // 閉じるボタンで使用済み
ShowWindow(hDlg, SW_HIDE);
return (INT_PTR)TRUE;
case IDC_RADIOBUTTON_FIND:
MessageBox(hDlg, _T("Find"), _T("FindReplaceProc"), MB_OK);
return (INT_PTR)TRUE;
case IDC_RADIOBUTTON_REPLACE:
MessageBox(hDlg, _T("Replace"), _T("FindReplaceProc"), MB_OK);
return (INT_PTR)TRUE;
}
return (INT_PTR)TRUE;
}
return (INT_PTR)FALSE;
}
//グローバル変数
RICHEDITINFO rei = {0};
43:デフォルトの名無しさん
12/08/04 15:27:00.48
>>41
wmEventがBN_CLICKEDの時にメッセージボックスが表示するようにしたのですが
相変わらず17回表示されてしまいました
44:デフォルトの名無しさん
12/08/04 15:35:42.19
>>39
ここはお前のブログじゃねえんだよ。
連投でゴミコード貼るな。
45:片山博文MZボット ◆0lBZNi.Q7evd
12/08/04 15:42:29.55
>>43 WM_KEYDOWNのリピートカウントをチェックして
46:片山博文MZボット ◆0lBZNi.Q7evd
12/08/04 15:43:51.22
>>45 間違えた。WM_KEYDOWNのlKeyDataのビット30をチェックして。
47:片山博文MZボット ◆0lBZNi.Q7evd
12/08/04 15:51:49.24
if (lParam & 0x40000000) { ... }
48:デフォルトの名無しさん
12/08/04 16:42:32.60
Ctrl+F or Hが押された時の動作をこのようにしたのですが
if((lParam & (LONG)pow((long double)2, 30)) == 0) {
if(IsWindowVisible(rei.fri.hDlg) == 0) {
ShowWindow(rei.fri.hDlg, SW_SHOWNOACTIVATE);
}
CheckRadioButton(rei.fri.hDlg, IDC_RADIOBUTTON_FIND, IDC_RADIOBUTTON_REPLACE, IDC_RADIOBUTTON_FIND);
}
>>39のようになりました
Ctrl+Hでダイアログ表示(置換がチェック)
→ダイアログをクリックしてアクティブに(メッセージボックス無し)
ここで既に置換メッセージは完了してるはずなのに
→メインのウィンドウをアクティブにしてCtrl+F(検索チェック、メッセージボックス無し)
→ダイアログをクリックしてアクティブに(IDC_RADIOBUTTON_REPLACEが来てメッセージボックスが17回ほど表示)
ここでメッセージが来るとしたらCtrl+Fなので検索メッセージのはずなのですが
ここで置換メッセージが来るのです
49:片山博文MZボット ◆0lBZNi.Q7evd
12/08/04 16:59:14.27
>>48
ちょっと御手上げですね。。。ZIPファイルでください。
URLリンク(www.axfc.net)
※整数ではpowじゃなくて「<<」(シフト演算)を使う。
50:デフォルトの名無しさん
12/08/04 17:55:26.60
すみません遅くなりました
現象が再現できる最小構成です
URLリンク(www1.axfc.net)
よろしくお願いします
51:片山博文MZボット ◆0lBZNi.Q7evd
12/08/04 18:03:15.01
48行目:
while (GetMessage(&msg, NULL, 0, 0)) {
if (!IsDialogMessage(hDialogFindReplace, &msg)) {
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
52:片山博文MZボット ◆0lBZNi.Q7evd
12/08/04 18:04:50.61
TranslateAcceleratorがあるなら、Ctrl+Fなどは、リソースで設定すると
いいよ。
53:デフォルトの名無しさん
12/08/04 18:32:56.77
完売ッッ!ソニー「初音ミク」Walkman 5時間で完売ッッ!
スレリンク(poverty板)
ソニー、“Walkman”の「初音ミクモデル」を限定発売キタ━━━━(゚∀゚)━━━━!!
スレリンク(poverty板)
ソニーは、“Wlakman Sシリーズ”に初音ミクの刻印を施した「初音ミク生誕5周年記念モデル」を直販サイトのソニーストアお
よび直販店のソニーストア銀座/名古屋/大阪にて限定販売する。本日8月3日よりエントリー登録の受付を開始しており、8
月中旬から1次販売、8月下旬から2次販売する。
対象モデルは「NW-S764」(12,800円/税込)と専用スピーカー付きの「NW-S764K」(15,800円/税込)。本体のみの「NW-
S764」は、初音ミクのコンセプトカラーであるブルーとブラックの2色、スピーカー付きモデルはブルーのみで展開し、各色
3939台ずつの限定販売となる。
本体背面にはピアノをモチーフとした描き下ろしの初音ミク刻印デザインを施しているほか、オリジナルの壁紙や、初音ミク
が初めて世に出た際のサンプル楽曲として挿入されていた『星のカケラ』のフルバージョンをプリインストール。
URLリンク(www.phileweb.com)
URLリンク(www.phileweb.com)
URLリンク(www.phileweb.com)
URLリンク(www.phileweb.com)
URLリンク(www.phileweb.com)
54:片山博文MZボット ◆0lBZNi.Q7evd
12/08/04 18:44:00.33
>>50 URLリンク(codepad.org)
55:デフォルトの名無しさん
12/08/04 18:49:15.64
662:デフォルトの名無しさん :2012/01/09(月) 16:00:17.75 [sage]
ヲチのためだけにスレ立て続けてるゴミ
パーカおめとか面白いと思ったワードを連呼する池沼
高度情報に粘着してる陰険
56:デフォルトの名無しさん
12/08/04 19:04:34.91
経済的に困窮した日本人が右翼化、ネットで外国人排斥-米紙
米紙ニューヨーク・タイムズは29日、「日本社会の中・下層の青年たちは、自らの生活に対して失望・
落胆した感情を、インターネットなどを通じて外国人への排斥につなげている」と報じ、こうした日本人は
「ネット右翼とも呼ばれている」と伝えた。環球時報が報じた。
記事では、「2009年12月、十数人の日本人青年が、在日韓国人が通う小学校に集まり、拡声器で『
韓国のスパイ』などと叫ぶ事件があった」と紹介。続けて、一部の日本人青年のターゲットは韓国人や
中国人をはじめとするアジア人の他、キリスト教徒にも及びはじめていると報じた。
続けて記事では、ネット右翼の日本人の多くは若い男性で、給与額の低い仕事に従事しているとし、
ネット上で時間や場所を決めたうえで、外国人に向けたデモ活動を行っている紹介。
さらに記事は、社会学者の分析を引用したうえで、一部ではネット右翼を「新しいナチス」だと表現する
人もいるが、彼らは攻撃性もなく、現時点では暴力行為もないとした一方で、「彼らの目的は日本の
地位低下と自身の経済的困窮を表現することが目的」と報じた。
URLリンク(news.searchina.ne.jp)
57:デフォルトの名無しさん
12/08/04 19:34:18.04
>>54
ありがとうございます
メッセージループの変更をしてみたのですが
相変わらずメッセージボックスが17回表示されてしまいます
58:デフォルトの名無しさん
12/08/04 19:42:01.63
>>54
すみませんbCheckingを見落としていました
このようにする必要があるという事はBN_CLICKEDが何回も来るのは仕様という事になるんですね
ダイアログプロシージャの方にこのコードを追加したら思い通りの動作になりました
case WM_ACTIVATE:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch(wmId) {
case WA_CLICKACTIVE:
return (INT_PTR)TRUE;
}
return (INT_PTR)TRUE;
・非アクティブで表示
・非アクティブで最前面
・WM_INITDIALOGで戻り値FALSE
・WM_COMMANDでwmEvent分岐の重要性
・WM_KEYDOWNで複数回実行されるのを回避
この点もありがとうございました