すたみなあっぷ

Are You 愚民?
Yes! I'm 愚民!

メモメモ

2008年11月13日 21時41分18秒 | Tips
嫌になるくらい忘れるのでメモ。

VC++のMFCダイアログにおいて「Enterキー」「ESCキー」でダイアログが終了するの抑制する。

1)ClassWizardから「PreTranslateMessage」を追加する。
2)次の処理をPreTranslateMessageメソッド内に追加する
・ウィンドウメッセージが「WM_KEYDOWN」で、入力が「VK_RETURN(Enterキー)」「VK_ESCAPE(ESCキー)」のとき、TRUEを返してキーイベントをすっ飛ばす。

▼--- ここから ---▼
BOOL CSAMPLEDlg::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
	if(pMsg->message == WM_KEYDOWN)
	{
		switch(pMsg->wParam)
		{
		case VK_RETURN:		// Enterキー
		case VK_ESCAPE:		// ESCキー
			// Enterキー、ESCキーでの終了を抑制	
			return TRUE;
		default:
			break;
		}
	}
	return CDialog::PreTranslateMessage(pMsg);
}

▲--- ここまで ---▲

Enterキーで次の入力項目に遷移したいときは、「return TRUE」の前に処理を入れる。
つーか、基本的なことを忘れすぎだ、俺。

あと余談だけど、if文とかの{ }の付け方って(1)と(2)ってどっちが主流?
ちなみに俺は(1)派。
(1)
if(hoge == hage)
{
	...
}

(2)
if(hoge == hage){
	...
}

メモ

2008年04月11日 18時12分25秒 | Tips
VB6の便利なようで不自由な仕様に苦戦してるぅ。
とりあえず解決できたので、今日はぐっすり寝れそうです。
進捗の遅れはそろそろ無視できないレベルになってきたけどね(汗)

正しいか怪しいけれど、動いたので忘れないうちにメモ。

[VB6] 構造体を関数の引数/戻り値に指定する **********
●TestModule.bas
Public Type testStruct
	Param1	As	String
	Param2	As	Integer
	...
End Type

●TestClass.cls
Public Function TestFunction(ByRef rStruct As testStruct) As Integer
	... 
	略
	...
End Function

上記のような定義をした場合、コンパイル時に下記エラーメッセージが表示される。
「パブリック オブジェクト モジュールで定義されたパブリック ユーザー定義型に限り、クラス モジュール内のパブリック プロシージャの引数または戻り値、またはパブリック ユーザ定義型の要素として使用することができます。」

回避方法として
(1)関数のアクセス修飾子を構造体よりスコープより狭いものに変更する。
  ×Public ⇒ ○Friend, Private
(2)構造体をクラスに変更し、関数の引数をクラスオブジェクトに変更する。


[VB6] C/C++に文字列のポインタを渡す **********
参照渡しは「ByRef」を指定するけど、String型をそのまま参照渡しをすると落ちる。
String型をByte型配列に変換し、Byte型配列の先頭要素の参照を渡す。