首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

实现按钮同时相应单击和双击的有关问题

2012-10-17 
实现按钮同时相应单击和双击的问题void CBoardDlg::OnBnClickedButton1(UINT nCmdID){MSGmessageCStringi

实现按钮同时相应单击和双击的问题
void CBoardDlg::OnBnClickedButton1(UINT nCmdID)
{
MSG message;
CString info;
DWORD st = GetTickCount();
while(1)
{
if(::PeekMessage(&message, NULL, 0 ,0 , PM_REMOVE))
{
::TranslateMessage(&message);
::DispatchMessage(&message);
if(message.message == WM_LBUTTONDBLCLK)
{
GetDlgItem(IDC_BUTTON1)->SetWindowText("i'm new caption");
res = TRUE;
break;
}  

}
DWORD et=GetTickCount();
if(et-st>200)
break;
}
if(!res)
{
switch(nCmdID)
{

case IDC_BUTTON1:
info ="0x01";
MessageBox(info,NULL,NULL);
break;

case IDC_BUTTON2:
info ="0x02";
break;
case IDC_BUTTON4:
info = "0x03";
break;
case IDC_BUTTON5:
info = "0x04";
break;
case IDC_BUTTON6:
info = "0x05";
break;
case IDC_BUTTON7:
info = "0x06";
break;
case IDC_BUTTON8:
info ="0x07";
break;
case IDC_BUTTON9:
info = "0x08";
break;
case IDC_BUTTON10:
info = "0x09";
break;
case IDC_BUTTON11:
info = "0x10";
break;
case IDC_BUTTON12:
info = "0x11";
break;
case IDC_BUTTON13:
info = "0x12";
break;
  case IDC_BUTTON14:
info = "0x13";
break;
  case IDC_BUTTON15:
info = "0x14";
break;
  case IDC_BUTTON16:
info = "0x15";
break;
case IDC_BUTTON17:
info = "0x16";
break;
  case IDC_BUTTON18:
info = "0x17";
break;
  case IDC_BUTTON19:
info ="0x18";
break;
  case IDC_BUTTON20:
info = "0x19";
break;
  case IDC_BUTTON21:
info = "0x20";
break;
  case IDC_BUTTON22:
info ="0x21";
break;
case IDC_BUTTON23:
info ="0x22";
break;
  case IDC_BUTTON24:
info = "0x23";
break;
  case IDC_BUTTON25:
info = "0x24";
break;
  case IDC_BUTTON26:
info = "0x25";
break;
  case IDC_BUTTON27:
info ="0x26";
break;
  case IDC_BUTTON28:
info ="0x27";
break;
case IDC_BUTTON29:
info ="0x28";
break;
  case IDC_BUTTON30:
info ="0x29";
break;
  case IDC_BUTTON31:
info ="0x30";
break;
  case IDC_BUTTON32:
info ="0x31";
break;
case IDC_BUTTON33:
info ="0x32";
break;
case IDC_BUTTON34:
info ="0x33";
break;
case IDC_BUTTON35:
info ="0x34";
break;
case IDC_BUTTON36:
info ="0x35";
break;
case IDC_BUTTON37:
info ="0x36";
break;
case IDC_BUTTON38:
info ="0x37";
break;
case IDC_BUTTON39:
info ="0x38";
break;
case IDC_BUTTON40:
info ="0x39";
break;
case IDC_BUTTON41:
info ="0x40";
break;
case IDC_BUTTON42:
info ="0x41";
break;
case IDC_BUTTON43:
info ="0x42";
break;
  case IDC_BUTTON44:
info ="0x43";
break;
case IDC_BUTTON45:
info ="0x44";
break;
case IDC_BUTTON46:
info ="0x45";


break;
case IDC_BUTTON47:
info ="0x46";
break;
case IDC_BUTTON48:
info ="0x47";
break;
case IDC_BUTTON49:
info ="0x48";
break;
case IDC_BUTTON50:
info ="0x49";
break;
case IDC_BUTTON51:
info ="0x50";
break;
case IDC_BUTTON52:
info ="0x51";
break;
case IDC_BUTTON53:
info ="0x52";
break;
case IDC_BUTTON54:
info ="0x53";
break;
case IDC_BUTTON55:
info ="0x54";
break;
case IDC_BUTTON56:
info ="0x55";
break;
case IDC_BUTTON57:
info ="0x56";
break;
case IDC_BUTTON58:
info ="0x57";
break;
case IDC_BUTTON59:
info ="0x58";
break;
case IDC_BUTTON60:
info ="0x59";
break;
case IDC_BUTTON61:
info ="0x60";
break;
case IDC_BUTTON62:
info ="0x61";
break;
case IDC_BUTTON63:
info ="0x62";
break;
case IDC_BUTTON64:
info ="0x63";
break;
case IDC_BUTTON65:
info ="0x64";
break;
default:
MessageBox(TEXT("THE BUTTON IS WORKING "),NULL,NULL);
}
}
}
这免得代码是实现按钮单击双击同时相应的,但是出现了问题。我如已开始就双击,则在下供应双击之后,就不能相应单击了。但是已开始单击的话,还是可以相应双击,但是相应双击之后就不能响应单击的消息了。那个大写能告诉我是怎么回事啊?

[解决办法]
全局标志变量初值为0
单击事件处理时先不要动作,仅启动比如1秒后Timer事件,并设标志为1,
双击时做双击对应动作并设置标志为0。
Timer事件中检查标志的值,若为0,什么也不做返回;若为1,设为0,再做单击对应动作。

热点排行