- ベストアンサー
不思議な現象が起こるメモ帳プログラム
- 「猫でもわかる第2版」を参考にして作成したメモ帳プログラムで、不思議な現象が発生しています。メニューを付けない場合には直接入力や漢字変換が可能ですが、メニューを付けると直接入力ができず、入力した文字が消えてしまう問題が発生しています。
- また、コーディングしていないのに右クリックでポップアップメニューが表示され、切り取りや削除、貼り付けなどの操作ができる不具合も発生しています。
- この現象はBCCとVC++の両方でテストした結果も同様であり、解決策が見つかっていません。詳しい方にアドバイスをお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ご使用のIMEは MS-IMEでしょうか? MS-IMEなら『互換性』タブの『詳細なテキストサービスを使用する』をオンにしてみてください コンテキストメニューはwidnowsが標準で準備しているものだったように思います これを抑制したいなら エディットコントロールのウィンドウプロシージャを自作してWM_RBUTTONDOWNメッセージなどを破棄しましょう メインウィンドウのWM_CREATEでエディットコントロールを作成してから GetWindowLongでWNDPROCを取得し SetWindowLongで自作WndProcを設定します 外部変数として 元々のEditコントロールのプロシージャを覚えておく変数を宣言します WNDPROC lpPrevProc; 新しいEditコントロールのプロシージャのプロトタイプ宣言 LRESULT CALLBACK EditProc(HWND, UINT, WPARAM,LPARAM); 新しいEditコントロールのプロシージャ LRESULT CALLBACK EditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch( uMsg ) { case WM_RBUTTONDOWN: break; default: // 元々のプロシージャを呼び出す CallWindowProc( lpPrevProc, hWnd, uMsg, wParam, lParam ); } return 0; } WM_CERATEメッセージで // Editコントロールのプロシージャを取得 lpPrevProc = GetWindowLong( hEdit, GWL_WNDPROC ); // Editコントロールの新プロシージャを設定 SetWindowLong( hEdit, GWL_WNDPROC, (LONG)EditProc ); といった具合です
その他の回答 (1)
- master000
- ベストアンサー率33% (16/48)
今の時代になぜWindowsAPIでプログラムするのかがわからん(ーー;) C++の勉強をしたいのであれば、VC++/CLIから入って楽しさを学んで、MFCで本格的にプログラミングすることをお勧めします。
お礼
回答有難うございます。 >今の時代になぜWindowsAPIでプログラムするのかがわからん(ーー;) 最初に入手した参考書が、C言語のものだったのです。 C++は、これから順に学習賞とは思っています。
お礼
御礼が遅れてすみません。 今、アドバイスを参考にしながら手直しをしているところです、まだ解決できていませんが、もう少しがんばってみたいと思います。 有難うございました。
補足
詳しいアドバイス有難うございます。 先ず、IMEの設定をご指摘のように変えてテストしてみましたが、 『メニュー無し、メニュー有り』ともに変化はありませんでした。 『メニュー無し』のプログラムで右クリックが使える原因は、アドバイスにより、理解できました。 メニューを付けるのは大変そうですが、作成してみたいと思います。