m_pDC->GetSafeHdc()的思考

本文探讨了OpenGL应用程序中视场设置时使用m_pDC->GetSafeHdc()的原因。解释了渲染描述表RC如何作为OpenGL与Windows设备描述表间的桥梁,并说明为何需要通过GetSafeHdc()将GDIC++对象指针转换为Windows句柄。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

      经常看到OpenGL中的视场设置中有m_pDC->GetSafeHdc()这句话,我就想了想为甚要这样写呢?看了OpenGL和Vc技术内幕后,我终于好想知道了为什么。

解答:

      首先从 OpenGL开始,因为每个OpenGL应用程序必须有一个渲染描述表RC,而必须在会之前它应该是当前得到。渲染描述表是OpenGL输出与Windows设备描述表联系的机制。而对于GDI C++对象返回的指针的有效期是临时的,所以不能将指针保存为类成员,而应该借助GetSafeHdc()将它转化为Windows的句柄。

BOOL CKA026_TIN_PCBTestToolV10Dlg::PreTranslateMessage(MSG* pMsg) { CString s; //USES_CONVERSION; /*if((b_AutoTesting || b_ManualTesting) && (IsDlgButtonChecked(IDC_CHK_KeyTest)==BST_CHECKED || IsDlgButtonChecked(IDC_CHK_KeyAutoTest)==BST_CHECKED || IsDlgButtonChecked(IDC_CHK_FrequencyTest)==BST_CHECKED)) {*/ if(Autotest==true||IsDlgButtonChecked(IDC_CHECK_manual_test)==BST_CHECKED&&keytesting==true) { if (pMsg->message == WM_KEYUP || pMsg->message == WM_SYSKEYUP)// || pMsg->message == WM_SYSCHAR ) { char cKey[32]={0}; TCHAR szKeyName[32] ={0}; GetKeyNameText(pMsg->lParam,szKeyName,sizeof (szKeyName) / sizeof (TCHAR)); strcpy(cKey,szKeyName); //---------- /*if (IsDlgButtonChecked(IDC_CHK_DebugLog)==BST_CHECKED) { SYSTEMTIME cur_time; char m_cTimeBuf[200]; GetLocalTime(&cur_time); sprintf_s(m_cTimeBuf, sizeof(m_cTimeBuf), "%04d-%02d-%02d %02d:%02d:%02d.%03d:pMsg->message=%X,pMsg->wParam=%d,KeyName=%s", cur_time.wYear,cur_time.wMonth,cur_time.wDay,cur_time.wHour, cur_time.wMinute, cur_time.wSecond, cur_time.wMilliseconds,pMsg->message,pMsg->wParam,cKey); InsertItem_Debug(m_cTimeBuf,0); }*/ //---------- //s.Format(_T("%d"),pMsg->wParam); //AfxMessageBox(s); if(pMsg->wParam==27) { m_Label_Key[0].SetBkColor(RGB(0, 255, 0)); b_keyok[0]=true; } else if(pMsg->wParam==49)//1 { m_Label_Key[1].SetBkColor(RGB(0, 255, 0)); b_keyok[1]=true; } else if(pMsg->wParam==50)//2 { m_Label_Key[2].SetBkColor(RGB(0, 255, 0)); b_keyok[2]=true; } else if(pMsg->wParam==51)//3 { m_Label_Key[3].SetBkColor(RGB(0, 255, 0)); b_keyok[3]=true; } else if(pMsg->wParam==52)//4 { m_Label_Key[4].SetBkColor(RGB(0, 255, 0)); b_keyok[4]=true; } else if(pMsg->wParam==53)//5 { m_Label_Key[5].SetBkColor(RGB(0, 255, 0)); b_keyok[5]=true; } else if(pMsg->wParam==54)//6 { m_Label_Key[6].SetBkColor(RGB(0, 255, 0)); b_keyok[6]=true; } else if(pMsg->wParam==55)//7 { m_Label_Key[7].SetBkColor(RGB(0, 255, 0)); b_keyok[7]=true; } else if(pMsg->wParam==56)//8 { m_Label_Key[8].SetBkColor(RGB(0, 255, 0)); b_keyok[8]=true; } else if(pMsg->wParam==57)//9 { m_Label_Key[9].SetBkColor(RGB(0, 255, 0)); b_keyok[9]=true; } else if(pMsg->wParam==48)//0 { m_Label_Key[10].SetBkColor(RGB(0, 255, 0)); b_keyok[10]=true; } else if(pMsg->wParam==189)//_ { m_Label_Key[11].SetBkColor(RGB(0, 255, 0)); b_keyok[11]=true; } else if(pMsg->wParam==187)//= { m_Label_Key[12].SetBkColor(RGB(0, 255, 0)); b_keyok[12]=true; } else if(pMsg->wParam==8 && stricmp(cKey,"Backspace")==0) //backspace { m_Label_Key[13].SetBkColor(RGB(0, 255, 0)); b_keyok[13]=true; } else if(pMsg->wParam==9)//TAB { m_Label_Key[14].SetBkColor(RGB(0, 255, 0)); b_keyok[14]=true; } else if(pMsg->wParam==81)//Q { m_Label_Key[15].SetBkColor(RGB(0, 255, 0)); b_keyok[15]=true; } else if(pMsg->wParam==87)//W { m_Label_Key[16].SetBkColor(RGB(0, 255, 0)); b_keyok[16]=true; } else if(pMsg->wParam==69)//E { m_Label_Key[17].SetBkColor(RGB(0, 255, 0)); b_keyok[17]=true; } else if(pMsg->wParam==82)//R { m_Label_Key[18].SetBkColor(RGB(0, 255, 0)); b_keyok[18]=true; } else if(pMsg->wParam==84)//T { m_Label_Key[19].SetBkColor(RGB(0, 255, 0)); b_keyok[19]=true; } else if(pMsg->wParam==89)//Y { m_Label_Key[20].SetBkColor(RGB(0, 255, 0)); b_keyok[20]=true; } else if(pMsg->wParam==85)//U { m_Label_Key[21].SetBkColor(RGB(0, 255, 0)); b_keyok[21]=true; } else if(pMsg->wParam==73)//I { m_Label_Key[22].SetBkColor(RGB(0, 255, 0)); b_keyok[22]=true; } else if(pMsg->wParam==79)//O { m_Label_Key[23].SetBkColor(RGB(0, 255, 0)); b_keyok[23]=true; } else if(pMsg->wParam==80)//P { m_Label_Key[24].SetBkColor(RGB(0, 255, 0)); b_keyok[24]=true; } else if(pMsg->wParam==219)//[ { m_Label_Key[25].SetBkColor(RGB(0, 255, 0)); b_keyok[25]=true; } else if(pMsg->wParam==221)//] { m_Label_Key[26].SetBkColor(RGB(0, 255, 0)); b_keyok[26]=true; } else if(pMsg->wParam==220)// | { m_Label_Key[27].SetBkColor(RGB(0, 255, 0)); b_keyok[27]=true; } else if(pMsg->wParam==20)//CAP { m_Label_Key[28].SetBkColor(RGB(0, 255, 0)); b_keyok[28]=true; } else if(pMsg->wParam==65)//A { m_Label_Key[29].SetBkColor(RGB(0, 255, 0)); b_keyok[29]=true; } else if(pMsg->wParam==83)//S { m_Label_Key[30].SetBkColor(RGB(0, 255, 0)); b_keyok[30]=true; } else if(pMsg->wParam==68)//D { m_Label_Key[31].SetBkColor(RGB(0, 255, 0)); b_keyok[31]=true; } else if(pMsg->wParam==70)//F { m_Label_Key[32].SetBkColor(RGB(0, 255, 0)); b_keyok[32]=true; } else if(pMsg->wParam==71)//G { m_Label_Key[33].SetBkColor(RGB(0, 255, 0)); b_keyok[33]=true; } else if(pMsg->wParam==72)//H { m_Label_Key[34].SetBkColor(RGB(0, 255, 0)); b_keyok[34]=true; } else if(pMsg->wParam==74)//J { m_Label_Key[35].SetBkColor(RGB(0, 255, 0)); b_keyok[35]=true; } else if(pMsg->wParam==75)//K { m_Label_Key[36].SetBkColor(RGB(0, 255, 0)); b_keyok[36]=true; } else if(pMsg->wParam==76)//L { m_Label_Key[37].SetBkColor(RGB(0, 255, 0)); b_keyok[37]=true; } else if(pMsg->wParam==186)//; { m_Label_Key[38].SetBkColor(RGB(0, 255, 0)); b_keyok[38]=true; } else if(pMsg->wParam==222)//" { m_Label_Key[39].SetBkColor(RGB(0, 255, 0)); b_keyok[39]=true; } else if(pMsg->wParam==13)//Enter { m_Label_Key[40].SetBkColor(RGB(0, 255, 0)); b_keyok[40]=true; } else if(pMsg->wParam==16 && stricmp(cKey,"Shift")==0)//shift1 { m_Label_Key[41].SetBkColor(RGB(0, 255, 0)); b_keyok[41]=true; } else if(pMsg->wParam==90)//Z { m_Label_Key[42].SetBkColor(RGB(0, 255, 0)); b_keyok[42]=true; } else if(pMsg->wParam==88)//X { m_Label_Key[43].SetBkColor(RGB(0, 255, 0)); b_keyok[43]=true; } else if(pMsg->wParam==67)//C { m_Label_Key[44].SetBkColor(RGB(0, 255, 0)); b_keyok[44]=true; } else if(pMsg->wParam==86)//V { m_Label_Key[45].SetBkColor(RGB(0, 255, 0)); b_keyok[45]=true; } else if(pMsg->wParam==66)//B { m_Label_Key[46].SetBkColor(RGB(0, 255, 0)); b_keyok[46]=true; } else if(pMsg->wParam==78)//N { m_Label_Key[47].SetBkColor(RGB(0, 255, 0)); b_keyok[47]=true; } else if(pMsg->wParam==77)//M { m_Label_Key[48].SetBkColor(RGB(0, 255, 0)); b_keyok[48]=true; } else if(pMsg->wParam==188)//< { m_Label_Key[49].SetBkColor(RGB(0, 255, 0)); b_keyok[49]=true; } else if(pMsg->wParam==190)//> { m_Label_Key[50].SetBkColor(RGB(0, 255, 0)); b_keyok[50]=true; } else if(pMsg->wParam==191)//? { m_Label_Key[51].SetBkColor(RGB(0, 255, 0)); b_keyok[51]=true; } else if(pMsg->wParam==16 && stricmp(cKey,"Right Shift")==0)//shift2 { m_Label_Key[52].SetBkColor(RGB(0, 255, 0)); b_keyok[52]=true; } else if(pMsg->wParam==17 && stricmp(cKey,"Ctrl")==0)//Ctrl1 { m_Label_Key[53].SetBkColor(RGB(0, 255, 0)); b_keyok[53]=true; } //else if(pMsg->wParam==135)//Fn //{ // m_Label_Key[54].SetBkColor(RGB(0, 255, 0)); // b_keyok[54]=true; //} else if(pMsg->wParam==127)//WINWOWS 91 现用:125 { m_Label_Key[54].SetBkColor(RGB(0, 255, 0)); b_keyok[54]=true; //-模拟按下,弹起windows key,关闭该功能键弹出的窗口 //if(!b_winPress) //{ // Sleep(500); // keybd_event(91,0,0,0); //key down // Sleep(500); // keybd_event(91,0,KEYEVENTF_KEYUP,0);//key up // b_winPress=true; //} //- } else if(pMsg->wParam==18 && stricmp(cKey,"Alt")==0)//Alt1 { m_Label_Key[55].SetBkColor(RGB(0, 255, 0)); b_keyok[55]=true; } else if(pMsg->wParam==32)//Space { m_Label_Key[56].SetBkColor(RGB(0, 255, 0)); b_keyok[56]=true; } else if(pMsg->wParam==18 && stricmp(cKey,"Right Alt")==0)//Alt2 { m_Label_Key[57].SetBkColor(RGB(0, 255, 0)); b_keyok[57]=true; } else if(pMsg->wParam==17 && stricmp(cKey,"Right Ctrl")==0)//Ctrl2 { m_Label_Key[58].SetBkColor(RGB(0, 255, 0)); b_keyok[58]=true; } else if(pMsg->wParam==37)//Left { m_Label_Key[59].SetBkColor(RGB(0, 255, 0)); b_keyok[59]=true; } else if(pMsg->wParam==38)//PgUp { m_Label_Key[60].SetBkColor(RGB(0, 255, 0)); b_keyok[60]=true; } else if(pMsg->wParam==40)//PgDn { m_Label_Key[61].SetBkColor(RGB(0, 255, 0)); b_keyok[61]=true; } else if(pMsg->wParam==39)//Right { m_Label_Key[62].SetBkColor(RGB(0, 255, 0)); b_keyok[62]=true; }//[64]-[69] sensor touchpannel test else if(pMsg->wParam==192) { m_Label_Key[63].SetBkColor(RGB(0, 255, 0)); b_keyok[63]=true; } else if(pMsg->wParam==112)//F1 VK_F1 需要屏蔽F1功能 OnHelpInfo()//消息队列中去重构 { m_Label_Key[64].SetBkColor(RGB(0, 255, 0)); b_keyok[64]=true; } else if(pMsg->wParam==113)//F2 { m_Label_Key[65].SetBkColor(RGB(0, 255, 0)); b_keyok[65]=true; } //else if(pMsg->wParam==124)// //{ // m_Label_Key[66].SetBkColor(RGB(0, 255, 0)); // b_keyok[66]=true; //} //else if(pMsg->wParam==133)// //{ // m_Label_Key[67].SetBkColor(RGB(0, 255, 0)); // b_keyok[67]=true; //} else if(pMsg->wParam==114)// { m_Label_Key[66].SetBkColor(RGB(0, 255, 0)); b_keyok[66]=true; } else if(pMsg->wParam==115)// { m_Label_Key[67].SetBkColor(RGB(0, 255, 0)); b_keyok[67]=true; } else if(pMsg->wParam==116)// { m_Label_Key[68].SetBkColor(RGB(0, 255, 0)); b_keyok[68]=true; } //else if(pMsg->wParam==128)// //{ // m_Label_Key[69].SetBkColor(RGB(0, 255, 0)); // b_keyok[69]=true; //} else if(pMsg->wParam==117)// { m_Label_Key[69].SetBkColor(RGB(0, 255, 0)); b_keyok[69]=true; } else if(pMsg->wParam==118)//F7 { m_Label_Key[70].SetBkColor(RGB(0, 255, 0)); b_keyok[70]=true; } else if(pMsg->wParam==120)//F8 { m_Label_Key[71].SetBkColor(RGB(0, 255, 0)); b_keyok[71]=true; } else if(pMsg->wParam==121)//F9 { m_Label_Key[72].SetBkColor(RGB(0, 255, 0)); b_keyok[72]=true; } else if(pMsg->wParam==123)//F10 { m_Label_Key[73].SetBkColor(RGB(0, 255, 0)); b_keyok[73]=true; } else if(pMsg->wParam==122)//F12 { m_Label_Key[76].SetBkColor(RGB(0, 255, 0)); b_keyok[76]=true; } else if(pMsg->wParam==132)//F12 { m_Label_Key[77].SetBkColor(RGB(0, 255, 0)); b_keyok[77]=true; } else if(pMsg->wParam==46) { m_Label_Key[74].SetBkColor(RGB(0, 255, 0)); b_keyok[74]=true; } else if(pMsg->wParam==119) { m_Label_Key[75].SetBkColor(RGB(0, 255, 0)); b_keyok[75]=true; } /* else if(pMsg->wParam==124)//FnLock { m_Label_Key[70].SetBkColor(RGB(0, 255, 0)); b_keyok[70]=true; } else if(pMsg->wParam==112)//F1 VK_F1 需要屏蔽F1功能 OnHelpInfo() { m_Label_Key[71].SetBkColor(RGB(0, 255, 0)); b_keyok[71]=true; } else if(pMsg->wParam==113)//F2 { m_Label_Key[72].SetBkColor(RGB(0, 255, 0)); b_keyok[72]=true; } else if(pMsg->wParam==114)//F3 { m_Label_Key[73].SetBkColor(RGB(0, 255, 0)); b_keyok[73]=true; } else if(pMsg->wParam==115)//F4 { m_Label_Key[74].SetBkColor(RGB(0, 255, 0)); b_keyok[74]=true; } else if(pMsg->wParam==116)//F5 { m_Label_Key[75].SetBkColor(RGB(0, 255, 0)); b_keyok[75]=true; } else if(pMsg->wParam==117)//F6 { m_Label_Key[76].SetBkColor(RGB(0, 255, 0)); b_keyok[76]=true; } else if(pMsg->wParam==118)//F7 { m_Label_Key[77].SetBkColor(RGB(0, 255, 0)); b_keyok[77]=true; } else if(pMsg->wParam==44)//F8 { m_Label_Key[78].SetBkColor(RGB(0, 255, 0)); b_keyok[78]=true; } else if(pMsg->wParam==120)//F9 { m_Label_Key[79].SetBkColor(RGB(0, 255, 0)); b_keyok[79]=true; } else if(pMsg->wParam==121)//F10 { m_Label_Key[80].SetBkColor(RGB(0, 255, 0)); b_keyok[80]=true; } else if(pMsg->wParam==122)//F11 { m_Label_Key[81].SetBkColor(RGB(0, 255, 0)); b_keyok[81]=true; } else if(pMsg->wParam==123)//F12 { m_Label_Key[82].SetBkColor(RGB(0, 255, 0)); b_keyok[82]=true; } else if(pMsg->wParam==125)//APPP1 PrtSc { m_Label_Key[83].SetBkColor(RGB(0, 255, 0)); b_keyok[83]=true; } else if(pMsg->wParam==126)//APP2 Insert { m_Label_Key[84].SetBkColor(RGB(0, 255, 0)); b_keyok[84]=true; } else if(pMsg->wParam==46)//Delete { m_Label_Key[85].SetBkColor(RGB(0, 255, 0)); b_keyok[85]=true; } */ return TRUE; } else if (pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN) { char cKey[32]={0}; TCHAR szKeyName[32] ={0}; GetKeyNameText(pMsg->lParam,szKeyName,sizeof (szKeyName) / sizeof (TCHAR)) ; strcpy(cKey,szKeyName); //---------- /*if (IsDlgButtonChecked(IDC_CHK_DebugLog)==BST_CHECKED) { SYSTEMTIME cur_time; char m_cTimeBuf[200]; GetLocalTime(&cur_time); sprintf_s(m_cTimeBuf, sizeof(m_cTimeBuf), "%04d-%02d-%02d %02d:%02d:%02d.%03d:pMsg->message=%X,pMsg->wParam=%d,KeyName=%s", cur_time.wYear,cur_time.wMonth,cur_time.wDay,cur_time.wHour, cur_time.wMinute, cur_time.wSecond, cur_time.wMilliseconds,pMsg->message,pMsg->wParam,cKey); InsertItem_Debug(m_cTimeBuf,0); }*/ //---------- if(pMsg->wParam==27) { m_Label_Key[0].SetBkColor(RGB(255, 255, 0)); b_keyok[0]=false; } else if(pMsg->wParam==49)//1 { m_Label_Key[1].SetBkColor(RGB(255, 255, 0)); b_keyok[1]=false; } else if(pMsg->wParam==50)//2 { m_Label_Key[2].SetBkColor(RGB(255, 255, 0)); b_keyok[2]=false; } else if(pMsg->wParam==51)//3 { m_Label_Key[3].SetBkColor(RGB(255, 255, 0)); b_keyok[3]=false; } else if(pMsg->wParam==52)//4 { m_Label_Key[4].SetBkColor(RGB(255, 255, 0)); b_keyok[4]=false; } else if(pMsg->wParam==53)//5 { m_Label_Key[5].SetBkColor(RGB(255, 255, 0)); b_keyok[5]=false; } else if(pMsg->wParam==54)//6 { m_Label_Key[6].SetBkColor(RGB(255, 255, 0)); b_keyok[6]=false; } else if(pMsg->wParam==55)//7 { m_Label_Key[7].SetBkColor(RGB(255, 255, 0)); b_keyok[7]=false; } else if(pMsg->wParam==56)//8 { m_Label_Key[8].SetBkColor(RGB(255, 255, 0)); b_keyok[8]=false; } else if(pMsg->wParam==57)//9 { m_Label_Key[9].SetBkColor(RGB(255, 255, 0)); b_keyok[9]=false; } else if(pMsg->wParam==48)//0 { m_Label_Key[10].SetBkColor(RGB(255, 255, 0)); b_keyok[10]=false; } else if(pMsg->wParam==189)//_ { m_Label_Key[11].SetBkColor(RGB(255, 255, 0)); b_keyok[11]=false; } else if(pMsg->wParam==187)//= { m_Label_Key[12].SetBkColor(RGB(255, 255, 0)); b_keyok[12]=false; } else if(pMsg->wParam==8 && stricmp(cKey,"Backspace")==0) //backspace { m_Label_Key[13].SetBkColor(RGB(255, 255, 0)); b_keyok[13]=false; } else if(pMsg->wParam==9)//TAB { m_Label_Key[14].SetBkColor(RGB(255, 255, 0)); b_keyok[14]=false; } else if(pMsg->wParam==81)//Q { m_Label_Key[15].SetBkColor(RGB(255, 255, 0)); b_keyok[15]=false; } else if(pMsg->wParam==87)//W { m_Label_Key[16].SetBkColor(RGB(255, 255, 0)); b_keyok[16]=false; } else if(pMsg->wParam==69)//E { m_Label_Key[17].SetBkColor(RGB(255, 255, 0)); b_keyok[17]=false; } else if(pMsg->wParam==82)//R { m_Label_Key[18].SetBkColor(RGB(255, 255, 0)); b_keyok[18]=false; } else if(pMsg->wParam==84)//T { m_Label_Key[19].SetBkColor(RGB(255, 255, 0)); b_keyok[19]=false; } else if(pMsg->wParam==89)//Y { m_Label_Key[20].SetBkColor(RGB(255, 255, 0)); b_keyok[20]=false; } else if(pMsg->wParam==85)//U { m_Label_Key[21].SetBkColor(RGB(255, 255, 0)); b_keyok[21]=false; } else if(pMsg->wParam==73)//I { m_Label_Key[22].SetBkColor(RGB(255, 255, 0)); b_keyok[22]=false; } else if(pMsg->wParam==79)//O { m_Label_Key[23].SetBkColor(RGB(255, 255, 0)); b_keyok[23]=false; } else if(pMsg->wParam==80)//P { m_Label_Key[24].SetBkColor(RGB(255, 255, 0)); b_keyok[24]=false; } else if(pMsg->wParam==219)//[ { m_Label_Key[25].SetBkColor(RGB(255, 255, 0)); b_keyok[25]=false; } else if(pMsg->wParam==221)//] { m_Label_Key[26].SetBkColor(RGB(255, 255, 0)); b_keyok[26]=false; } else if(pMsg->wParam==220)// | { m_Label_Key[27].SetBkColor(RGB(255, 255, 0)); b_keyok[27]=false; } else if(pMsg->wParam==20)//CAP { m_Label_Key[28].SetBkColor(RGB(255, 255, 0)); b_keyok[28]=false; } else if(pMsg->wParam==65)//A { m_Label_Key[29].SetBkColor(RGB(255, 255, 0)); b_keyok[29]=false; } else if(pMsg->wParam==83)//S { m_Label_Key[30].SetBkColor(RGB(255, 255, 0)); b_keyok[30]=false; } else if(pMsg->wParam==68)//D { m_Label_Key[31].SetBkColor(RGB(255, 255, 0)); b_keyok[31]=false; } else if(pMsg->wParam==70)//F { m_Label_Key[32].SetBkColor(RGB(255, 255, 0)); b_keyok[32]=false; } else if(pMsg->wParam==71)//G { m_Label_Key[33].SetBkColor(RGB(255, 255, 0)); b_keyok[33]=false; } else if(pMsg->wParam==72)//H { m_Label_Key[34].SetBkColor(RGB(255, 255, 0)); b_keyok[34]=false; } else if(pMsg->wParam==74)//J { m_Label_Key[35].SetBkColor(RGB(255, 255, 0)); b_keyok[35]=false; } else if(pMsg->wParam==75)//K { m_Label_Key[36].SetBkColor(RGB(255, 255, 0)); b_keyok[36]=false; } else if(pMsg->wParam==76)//L { m_Label_Key[37].SetBkColor(RGB(255, 255, 0)); b_keyok[37]=false; } else if(pMsg->wParam==186)//; { m_Label_Key[38].SetBkColor(RGB(255, 255, 0)); b_keyok[38]=false; } else if(pMsg->wParam==222)//" { m_Label_Key[39].SetBkColor(RGB(255, 255, 0)); b_keyok[39]=false; } else if(pMsg->wParam==13)//Enter { m_Label_Key[40].SetBkColor(RGB(255, 255, 0)); b_keyok[40]=false; } else if(pMsg->wParam==16 && stricmp(cKey,"Shift")==0)//shift1 { m_Label_Key[41].SetBkColor(RGB(255, 255, 0)); b_keyok[41]=false; } else if(pMsg->wParam==90)//Z { m_Label_Key[42].SetBkColor(RGB(255, 255, 0)); b_keyok[42]=false; } else if(pMsg->wParam==88)//X { m_Label_Key[43].SetBkColor(RGB(255, 255, 0)); b_keyok[43]=false; } else if(pMsg->wParam==67)//C { m_Label_Key[44].SetBkColor(RGB(255, 255, 0)); b_keyok[44]=false; } else if(pMsg->wParam==86)//V { m_Label_Key[45].SetBkColor(RGB(255, 255, 0)); b_keyok[45]=false; } else if(pMsg->wParam==66)//B { m_Label_Key[46].SetBkColor(RGB(255, 255, 0)); b_keyok[46]=false; } else if(pMsg->wParam==78)//N { m_Label_Key[47].SetBkColor(RGB(255, 255, 0)); b_keyok[47]=false; } else if(pMsg->wParam==77)//M { m_Label_Key[48].SetBkColor(RGB(255, 255, 0)); b_keyok[48]=false; } else if(pMsg->wParam==188)//< { m_Label_Key[49].SetBkColor(RGB(255, 255, 0)); b_keyok[49]=false; } else if(pMsg->wParam==190)//> { m_Label_Key[50].SetBkColor(RGB(255, 255, 0)); b_keyok[50]=false; } else if(pMsg->wParam==191)//? { m_Label_Key[51].SetBkColor(RGB(255, 255, 0)); b_keyok[51]=false; } else if(pMsg->wParam==16 && stricmp(cKey,"Right Shift")==0)//shift2 { m_Label_Key[52].SetBkColor(RGB(255, 255, 0)); b_keyok[52]=false; } else if(pMsg->wParam==17 && stricmp(cKey,"Ctrl")==0)//Ctrl1 { m_Label_Key[53].SetBkColor(RGB(255, 255, 0)); b_keyok[53]=false; } //else if(pMsg->wParam==135)//Fn //{ // m_Label_Key[54].SetBkColor(RGB(255, 255, 0)); // b_keyok[54]=false; //} else if(pMsg->wParam==127)//WINWOWS 91,现用125 { m_Label_Key[54].SetBkColor(RGB(255, 255, 0)); b_keyok[54]=false; //-模拟按下,弹起windows key,关闭该功能键弹出的窗口 //keybd_event(91,0,0,0); //key down //keybd_event(91,0,KEYEVENTF_KEYUP,0);//key up //- } else if(pMsg->wParam==18 && stricmp(cKey,"Alt")==0)//Alt1 { m_Label_Key[55].SetBkColor(RGB(255, 255, 0)); b_keyok[55]=false; } else if(pMsg->wParam==32)//Space { m_Label_Key[56].SetBkColor(RGB(255, 255, 0)); b_keyok[56]=false; } else if(pMsg->wParam==18 && stricmp(cKey,"Right Alt")==0)//Alt2 { m_Label_Key[57].SetBkColor(RGB(255, 255, 0)); b_keyok[57]=false; } else if(pMsg->wParam==17 && stricmp(cKey,"Right Ctrl")==0)//Ctrl2 { m_Label_Key[58].SetBkColor(RGB(255, 255, 0)); b_keyok[58]=false; } else if(pMsg->wParam==37)//Left { m_Label_Key[59].SetBkColor(RGB(255, 255, 0)); b_keyok[59]=false; } else if(pMsg->wParam==38)//PgUp { m_Label_Key[60].SetBkColor(RGB(255, 255, 0)); b_keyok[60]=false; } else if(pMsg->wParam==40)//PgDn { m_Label_Key[61].SetBkColor(RGB(255, 255, 0)); b_keyok[61]=false; } else if(pMsg->wParam==39)//Right { m_Label_Key[62].SetBkColor(RGB(255, 255, 0)); b_keyok[62]=false; }//[64]-[69] sensor touchpannel test else if(pMsg->wParam==192) { m_Label_Key[63].SetBkColor(RGB(255, 255, 0)); b_keyok[63]=false; } else if(pMsg->wParam==112)//F1 VK_F1 需要屏蔽F1功能 OnHelpInfo() { m_Label_Key[64].SetBkColor(RGB(255, 255, 0)); b_keyok[64]=false; } else if(pMsg->wParam==113)//F2 { m_Label_Key[65].SetBkColor(RGB(255, 255, 0)); b_keyok[65]=false; } //else if(pMsg->wParam==124)// //{ // m_Label_Key[66].SetBkColor(RGB(255, 255, 0)); // b_keyok[66]=false; //} //else if(pMsg->wParam==133)// //{ // m_Label_Key[67].SetBkColor(RGB(255, 255, 0)); // b_keyok[67]=false; //} else if(pMsg->wParam==114)// { m_Label_Key[66].SetBkColor(RGB(255, 255, 0)); b_keyok[66]=false; } else if(pMsg->wParam==115)// { m_Label_Key[67].SetBkColor(RGB(255, 255, 0)); b_keyok[67]=false; } else if(pMsg->wParam==116)// { m_Label_Key[68].SetBkColor(RGB(255, 255, 0)); b_keyok[68]=false; } //else if(pMsg->wParam==128)// //{ // m_Label_Key[69].SetBkColor(RGB(255, 255, 0)); // b_keyok[69]=false; //} else if(pMsg->wParam==117)// { m_Label_Key[69].SetBkColor(RGB(255, 255, 0)); b_keyok[69]=false; } else if(pMsg->wParam==118)//F7 { m_Label_Key[70].SetBkColor(RGB(255, 255, 0)); b_keyok[70]=false; } else if(pMsg->wParam==120)//F8 { m_Label_Key[71].SetBkColor(RGB(255, 255, 0)); b_keyok[71]=false; } else if(pMsg->wParam==121)//F9 { m_Label_Key[72].SetBkColor(RGB(255, 255, 0)); b_keyok[72]=false; } else if(pMsg->wParam==123)//F10 { m_Label_Key[73].SetBkColor(RGB(255, 255, 0)); b_keyok[73]=false; } else if(pMsg->wParam==122)//F12 { m_Label_Key[76].SetBkColor(RGB(255, 255, 0)); b_keyok[76]=false; } else if(pMsg->wParam==46) { m_Label_Key[74].SetBkColor(RGB(255, 255, 0)); b_keyok[74]=false; } else if(pMsg->wParam==132)//F12 { m_Label_Key[77].SetBkColor(RGB(255, 255, 0)); b_keyok[77]=false; } else if(pMsg->wParam==119) { m_Label_Key[75].SetBkColor(RGB(255, 255, 0)); b_keyok[75]=false; } /* else if(pMsg->wParam==124)//FnLock { m_Label_Key[70].SetBkColor(RGB(255, 255, 0)); b_keyok[70]=false; } else if(pMsg->wParam==112)//F1 { m_Label_Key[71].SetBkColor(RGB(255, 255, 0)); b_keyok[71]=false; } else if(pMsg->wParam==113)//F2 { m_Label_Key[72].SetBkColor(RGB(255, 255, 0)); b_keyok[72]=false; } else if(pMsg->wParam==114)//F3 { m_Label_Key[73].SetBkColor(RGB(255, 255, 0)); b_keyok[73]=false; } else if(pMsg->wParam==115)//F4 { m_Label_Key[74].SetBkColor(RGB(255, 255, 0)); b_keyok[74]=false; } else if(pMsg->wParam==116)//F5 { m_Label_Key[75].SetBkColor(RGB(255, 255, 0)); b_keyok[75]=false; } else if(pMsg->wParam==117)//F6 { m_Label_Key[76].SetBkColor(RGB(255, 255, 0)); b_keyok[76]=false; } else if(pMsg->wParam==118)//F7 { m_Label_Key[77].SetBkColor(RGB(255, 255, 0)); b_keyok[77]=false; } else if(pMsg->wParam==44)//F8 { m_Label_Key[78].SetBkColor(RGB(255, 255, 0)); b_keyok[78]=false; } else if(pMsg->wParam==120)//F9 { m_Label_Key[79].SetBkColor(RGB(255, 255, 0)); b_keyok[79]=false; } else if(pMsg->wParam==121)//F10 { m_Label_Key[80].SetBkColor(RGB(255, 255, 0)); b_keyok[80]=false; } else if(pMsg->wParam==122)//F11 { m_Label_Key[81].SetBkColor(RGB(255, 255, 0)); b_keyok[81]=false; } else if(pMsg->wParam==123)//F12 { m_Label_Key[82].SetBkColor(RGB(255, 255, 0)); b_keyok[82]=false; } else if(pMsg->wParam==125)//APPP1 PrtSc { m_Label_Key[83].SetBkColor(RGB(255, 255, 0)); b_keyok[83]=false; } else if(pMsg->wParam==126)//APP2 Insert { m_Label_Key[84].SetBkColor(RGB(255, 255, 0)); b_keyok[84]=false; } else if(pMsg->wParam==46)//Delete { m_Label_Key[85].SetBkColor(RGB(255, 255, 0)); b_keyok[85]=false; } */ return TRUE; } } else { HWND hwnd = ::GetFocus(); int iID = ::GetDlgCtrlID(hwnd); if (pMsg->message == WM_KEYDOWN) { if (pMsg->wParam == VK_ESCAPE) return TRUE; // 防止按回车键后,非法退出的问题 if(iID != IDC_EDIT1_IntputSN && iID != IDC_InputVersion && iID !=IDC_EDIT_Comport&&iID!=IDC_EDIT_PASStimes&&iID!=IDC_EDIT_FailTimes&& iID != IDC_EDIT1_BT/*&& iID !=IDC_EDIT_KeyPadVersion && iID !=IDC_EDIT_WirelessChgVersion && iID !=IDC_EDIT_BT*/) return TRUE; if (pMsg->wParam ==VK_RETURN) { if(IDC_EDIT1_IntputSN == iID) { OnBnClickedButton1(); return TRUE; }else { return TRUE; } } } } return CDialogEx::PreTranslateMessage(pMsg); } 在 MFC 中实现汽车遥控器 UI,特别是需要圆形/椭圆形按钮且支持按下/抬起状态变化,需要在这里设置键值
最新发布
06-23
void CInfoBar::DrawInfo() { try { CWnd* pInfoWnd = GetDlgItem(IDC_STATIC_INFO); if (!pInfoWnd) return; CClientDC dcClient(pInfoWnd); // 使用CClientDC自动管理DC CDC* pDC = &dcClient; CDC memDC; if (!memDC.CreateCompatibleDC(pDC)) { return; // memDC析构时会自动处理 } CRect rect; pInfoWnd->GetClientRect(&rect); // 获取控件的客户区 CBitmap bitmap; if (!bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height())) { return; // bitmap和memDC由析构函数处理 } CBitmap* pOldBitmap = memDC.SelectObject(&bitmap); // 绘制背景 DrawBkg(&memDC, rect, VERTICAL, RGB(200, 226, 204), RGB(200, 226, 204), 1); // 设置时间字体并绘制 CFont* pOldFont = memDC.SelectObject(&m_timeFont); memDC.DrawText(m_strTime, m_strTime.GetLength(), m_clockRect, DT_CENTER | DT_SINGLELINE | DT_VCENTER); memDC.SelectObject(pOldFont); // 设置信息字体并绘制 pOldFont = memDC.SelectObject(&m_infoFont); if (m_bFlicker) { if (m_bFlickerType) { memDC.FillSolidRect(m_infoRect, RGB(255, 255, 0)); memDC.SetTextColor(RGB(255, 0, 0)); memDC.SetBkColor(RGB(255, 255, 0)); memDC.SetBkMode(OPAQUE); } else { memDC.SetTextColor(RGB(200, 0, 0)); memDC.SetBkMode(TRANSPARENT); } } else { memDC.SetTextColor(RGB(0, 100, 0)); memDC.SetBkMode(TRANSPARENT); } memDC.DrawText(m_strInfo, m_strInfo.GetLength(), m_infoRect, DT_CENTER | DT_SINGLELINE | DT_VCENTER); memDC.SelectObject(pOldFont); // 输出到屏幕 pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY); // 清理:自动处理 memDC.SelectObject(pOldBitmap); // bitmap和memDC由析构函数释放 } catch (const std::exception& e) { const std::string typeName = typeid(e).name(); char info[TMSZ]; sprintf_s(info, _countof(info), "[%s] %s", typeName.c_str(), e.what()); theApp.m_logger->Err(info); } }每秒调用一次怎么优化该函数,请提供优化后的完整代码
03-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值