|
今回は、悲しいかな・・・バグ発見のお知らせです。
バグがあったのは「Color Maker for Windows」内でした。 内容は、「エディットコントロール内でショートカットキーを用いると落ちる」と言うものです。 |
|
|
|
ソースコード的には、
void EEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if( ('f' < nChar && nChar <= 'z') || ('F' < nChar && nChar <= 'Z') )
return;
if('a' <= nChar && nChar <= 'f')
nChar = nChar - 32;
//
CEdit::OnChar(nChar, nRepCnt, nFlags);
//
CString str;
GetWindowText( str );
if( str.GetLength() == MaxChar )
GetParent()->SendMessage( WM_OVERCOUNT, EdtNumber );
}
として、16進数で用いるキャラクタコード以外は除外していたのですが、「Ctrl」+「C」等のショートカットを用いると SendMessage() の後に落ちてしまう。
しかも、例によってデバッグ版では大丈夫!!(^^;;; そこで、もう半ば無理矢理修正しました。 修正後のソースは以下の通り、
void EEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if( ( 'f' < nChar && nChar <= 'z' ) || ('F' < nChar && nChar <= 'Z' ) )
return;
if('a' <= nChar && nChar <= 'f')
nChar = nChar - 32;
//
CEdit::OnChar(nChar, nRepCnt, nFlags);
//
CString str;
if( nChar < 'A' || 'z' > nChar )
return;
GetWindowText( str );
if( str.GetLength() == MaxChar )
GetParent()->PostMessage( WM_OVERCOUNT, EdtNumber );
}
親の OnChar() に引き渡した後に、A 〜 z までのコード以外の文字はすべてリターンでたたき返す事にしました。
こんなんでいいのかしら?ふぅ・・・ |