CFormViewとOnKeyDown
タブコントロールとフォームビューというのはドシロウトの大好物である。この2語が出てきたら間違いなくそいつはドシロウトである(笑)。以下にバカの例として取り上げているのもすべてドシロウトの妄言である。マトモな人間には相手にされないものばかりである。
CFormViewなどはほとんど使わないが、エクセルしかさわったことがない「にわかMFC屋」はこれが大好きである。CTabCtrlと並んで「エセMFC屋の定番」である(笑)。したがって、この連中にはほぼプログラミング能力はないからキーワードの組み合わせもハチャメチャである。
LOG
123.225.253.220 [20/Feb/2013:11:09:54] Visual C++ FormViewでOnKeyDownは使用できない
さて、ここで問題になるのは、CFormViewでOnKeyDownなどを使うことがあるか、ということである。
CFormViewでOnKeyDownを使ってキーストロークをトラップする必要があるのかがまず疑問になるが、ここではそれはset asideしておこう(脇に置いておく)。
OnKeyDown関数
OnKeyDownは次のような関数である。これはWM_KEYDOWNメッセージのイベントハンドラともいう。
資料
CWnd::OnKeyDown
afx_msg void OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags);
afx_msgとなっているからMFC独自の仮想関数(準仮想関数)である。
OnKeyDown関数は、非システムキーが押されたときにフレームワークによって呼び出される。
ところで、非システムキーとは、
- [Alt]キーが押されていないとき
- または、CWndが入力フォーカスを持っていないとき
に押されたキーボードのキーである。
そして、OnKeyDown関数はアプリケーションがWindowsメッセージを処理できるように使われる。
さて、CFormViewを使っていて気になるのは「CWndが入力フォーカスを持っていない」という状況があるのかが問題になる。
そんな状況があれば使えるのだろうが、今、CFormViewのプログラムであるFm.vcprojやFrmv.vcprojを見た限りでは、そんな場合がなかなか出てこないのである。
したがって、以下のような部分も「出番」がないということになる。
資料
void CFmView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO : ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。
CFormView::OnKeyDown(nChar, nRepCnt, nFlags);
}
このオバカの真意
おそらく、このオトコの言いたいことは、最大限善意に解釈して、フォームビューの上に置いた多くのエディットコントロールなどで、文字列のカット(Shift+Delete)、コピー(Ctrl+Insert)、ペースト(Shift+Insert)などができないということであろう。
LOG
210.143.35.22 [21/Apr/2014:13:56:35] Ctrl+C エディットボックス onkeydown
そんな程度のことをいうのに大袈裟な「OnKeyDown」などという「英単語屋」的な発想を持ち出しているところが笑えるところである。元々は何も知らないコピペ屋であろう。
ところで、ダイアログに置いたコントロールではこれらのカット、コピー、ペーストのキー操作は使える。しかし、同じような動作をするプログラムでもそれをCFormViewにするとこれらのキーは使えない(ようである)。
ダイアログでできてCFormViewでできない。これはなぜなのか。アクセレーターが動作していないのはなぜか(ダイアログにはアクセレーターはない)。そういうことを考えていくと、この点については、CFormViewとEdit操作キーの使い方(win_0784)の方法によってこの不便さをクリアすることができる。
要するに、それらのキーを使うことができるようになる。すなわち、この問題の解決にOnKeyDownなどはお呼びではないのである。そのソースはここを参照。この「エディット操作キー」の項である。
コピペ屋の群れ
思考能力がないともいえるが、それ以前に「思考する」習慣がついていないのである。知識がない(無知)というのはこんなものであろう。朝から晩まで年から年中ソース鳥である。
LOG
202.213.5.1 [01/May/2017:16:43:49] OnKeyDown windows c++ nFlags
133.54.249.221 [25/Feb/2013:17:42:22] OnkeyDown MFC メッセージループ
203.174.79.131 [11/Jul/2013:11:15:58] OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags
これはもう問題外である。意味も知らずにどこかで拾ってきた語をベタベタと並べているだけである。検索しているのはこんなレベルの箸にも棒にもかからないヤカラばっかりである。
要するに無知蒙昧のコピペ屋にすぎない。
LOG
211.126.194.197 [18/Apr/2016:17:23:03] MFC OnKeyDown VK_DOWN 呼ばれない
211.125.138.170 [29/Mar/2016:10:56:19] ダイアログ C++ キーイベント こない
126.13.66.9 [17/Dec/2015:05:19:52] mfc onkeydown 呼ばれない
101.102.141.198 [29/Jul/2014:10:20:31] MFC KEYDOWN イベント 発生しない
210.143.35.16 [19/Aug/2013:20:29:21] onkeydown 呼ばれない
202.7.31.230 [19/Aug/2013:10:40:59] mfc onkeydown 呼ばれない
223.132.105.50 [30/May/2013:16:19:14] MFC OnKeyDown 来ない 取れない
202.229.101.13 [13/May/2013:13:43:10] OnKeyDown MFC 来ない
211.12.26.101 [07/May/2013:14:27:15] mfc onkeydown 呼ばれない
こんな一般論も無意味である。それがわかっていないところがバカである。無知蒙昧のコピペ屋にすぎない。
LOG
211.125.138.173 [28/Apr/2017:19:28:33] onkeydown keycode mfc
219.166.233.209 [09/Aug/2013:14:07:01] cwnd onkeydown mfc code
鳥屋-ソース取りだけに飛んでくるコピペ屋-の発想は所詮こんな程度である。
LOG
58.81.201.115 [01/Feb/2016:14:54:45] MFC OnKeyUp 効かない
こういうバカを見ると、常に「では、その前提になるOnKeyDownは効いていた」のかということである。どちらも使えていなかったはずである。バカは度し難い。
参考/OnChar関数
この項とは直接関係はない。しかし、こんなことを書くオバカの「動機」はほぼ上に書いたオトコと同じである。
LOG
124.33.193.2 [30/Apr/2013:11:25:38] cformview wm_char
CFormViewでは普通はこんなものを使う必要はない。こんなものが出てくる幕はないのである。
ちなみに、OnChar関数は次のような関数である(WM_CHARメッセージのイベントハンドラ)。
資料
CWnd::OnChar
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
OnChar関数はキーストロークが非システム文字に変換されるときにフレームワークによって呼び出される。
OnChar関数は次のような動作をする。
- OnKeyUp関数が呼び出される前とOnKeyDown関数が呼び出された後に呼び出される。
- 押されたり、離されたりするキーボードのキーの値を保持する。
押されたキーとOnChar関数の呼び出しが一対一で対応する必要はないのでnFlagsの情報は使わない。
nFlagsの情報はOnChar関数を呼び出す前の、OnKeyUp関数またはOnKeyDown関数の呼び出しでのみ使用される。
LOG
210.160.8.68 [27/May/2013:13:33:10] mfc onchar 呼ばれない
これも思考能力のないコピペ屋の発想である。WM_CHARをハンドリングして利用した例はここを参照。WM_CHARメッセージはMFCではOnChar関数として処理される。
- 2013/02/20 -
CFormViewとドキュメントビュー(spc_0011)
タコの殿堂
アンタ、珍しくまともなことを書いたわねぇ。酔っ払ってんじゃないの(笑)。
文字もまともに読めないコピペ屋のバカ相手に教育ボランティアしてもムダかもよ。