Win 32 APIによる編集ボックス入力制限機能

1736 ワード


C++Win 32 APIを用いて編集ボックスの入力制限機能を実現し、ユーザが編集ボックスに指定された内容しか入力できないことを制限し、例えば、0~9の数字しか入力できない.もちろん、編集ボックスの属性によって編集ボックスに数字しか入力できないことは制限できますが、制限が必要な内容は数字だけではない場合があります.例えば、入力時間の編集ボックスで、入力形式は「2012-2-3 18:00:00」で、制限された内容は数字だけではありません.
解決方法:
        1.編集ボックスの内容が変化すると、EN_が送信されます.CHANGEメッセージ;
        2.ウィンドウ応答関数が指定した編集ボックスから送信されたEN_をキャプチャするとCHANGEメッセージの場合、指定した編集ボックスの内容を読み込む.
        3.読み出された内容に限定されない文字が含まれているか否かを判断する.
        4.限定されていない文字が含まれている場合は、その位置を取得し、削除します.この位置の後ろの文字を順番に前に移動します.
        5.入力フォーカスを再設定します.
//      
LRESUL TCALLBACK ProjectProc
(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)
{
         case WM_COMMAND:
	{
	    switch(LOWORD(wParam))
	    {
		case iResourceID://      ID
	         {
	             switch(HIWORD(wParam))
	             {
	             case EN_CHANGE:
	                  {
	                   //         0123456789	
	                   EditControlLimit(hWnd,iResouceID,"0123456789");
	                  }
	                  break;
	             }
	        }
	    }
	}
}
//      
void EditControlLimit(HWND hWnd,int iResouceID,char *szLimit)
{
	int iPos=-1;	//         
	int iLength=SendMessage(GetDlgItem(hWnd,iResouceID),WM_GETTEXTLENGTH,0,0);//        
	if(iLength!=0)
	{
		char *szContent=new char[iLength+1];	//     ,       
		SendMessage(GetDlgItem(hWnd,iResouceID),WM_GETTEXT,iLength+1,(LPARAM)szContent);	//       
		
		//               
		for(int i=0;i

このようにして実現される編集枠の入力を制限する機能は、非限定コンテンツを入力すると、まず編集枠に非限定コンテンツが現れ、その後、このような現象が消える.
編集ボックスの入力を制限する機能に対して、より良い解決策があるかどうかは、さらに学ぶ必要があります.