亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

MFC中Spin控件與Edit控件的手動(dòng)綁定實(shí)戰(zhàn)指南

MFC中Spin控件與Edit控件的手動(dòng)綁定實(shí)戰(zhàn)指南 1. 項(xiàng)目概述為什么Spin控件和Edit Control的綁定不是“連上線”那么簡(jiǎn)單在MFC開發(fā)中看到“Spin控件綁定Edit Control”這個(gè)標(biāo)題很多剛從C#或Qt轉(zhuǎn)過(guò)來(lái)的開發(fā)者第一反應(yīng)是“不就是拖兩個(gè)控件、勾個(gè)屬性、設(shè)個(gè)范圍5分鐘搞定。”我當(dāng)年也是這么想的——直到在某工業(yè)數(shù)據(jù)采集界面里用戶連續(xù)快速點(diǎn)擊上/下按鈕導(dǎo)致編輯框數(shù)值跳變失序、輸入焦點(diǎn)異常丟失、甚至觸發(fā)了未定義行為的斷言彈窗。那一刻我才意識(shí)到MFC里的“綁定”從來(lái)不是UI設(shè)計(jì)器里打個(gè)勾就完事的自動(dòng)化魔法而是一場(chǎng)需要親手調(diào)度消息流、精確控制數(shù)據(jù)流向、主動(dòng)干預(yù)Windows底層消息循環(huán)的精細(xì)操作。Spin控件即CSpinButtonCtrl本身不存儲(chǔ)數(shù)值它只是一個(gè)“方向控制器”Edit ControlCEdit才是真正的“數(shù)值容器”。二者之間沒有內(nèi)置的數(shù)據(jù)同步機(jī)制所謂“綁定”本質(zhì)是開發(fā)者在WM_VSCROLL對(duì)Spin和EN_CHANGE/EN_KILLFOCUS對(duì)Edit等消息之間架設(shè)一座可控的橋梁。這個(gè)過(guò)程涉及三個(gè)關(guān)鍵矛盾消息時(shí)序沖突Spin滾動(dòng)時(shí)Edit是否應(yīng)立即更新、數(shù)據(jù)類型鴻溝Spin只處理整數(shù)Edit默認(rèn)是字符串浮點(diǎn)支持需手動(dòng)介入、用戶交互主權(quán)爭(zhēng)奪當(dāng)用戶直接在Edit里輸入時(shí)Spin的上下限是否應(yīng)動(dòng)態(tài)重置。這些細(xì)節(jié)恰恰是MFC老項(xiàng)目維護(hù)中最常被忽略、卻最易引發(fā)線上故障的“靜默雷區(qū)”。這篇文章面向兩類人一類是正在啃《深入淺出MFC》的初學(xué)者需要避開教科書里沒寫的實(shí)操陷阱另一類是接手遺留系統(tǒng)的中級(jí)開發(fā)者面對(duì)滿屏DDX_Text和ON_NOTIFY卻理不清邏輯斷點(diǎn)。我會(huì)完全拋開“理論正確”的空泛講解直接還原一個(gè)真實(shí)工業(yè)場(chǎng)景下的完整實(shí)現(xiàn)——從資源視圖拖控件開始到處理小數(shù)精度、防止非法輸入、響應(yīng)鍵盤方向鍵、甚至讓Spin在Edit獲得焦點(diǎn)時(shí)自動(dòng)激活——所有代碼都經(jīng)過(guò)VS2019 Windows 10/11雙環(huán)境實(shí)測(cè)參數(shù)值全部標(biāo)注物理意義比如“步進(jìn)值0.1對(duì)應(yīng)傳感器0.1℃分辨率”不寫一句“讀者可自行擴(kuò)展”。你復(fù)制粘貼就能跑但更重要的是你知道每一行為什么必須這么寫。2. 核心設(shè)計(jì)思路與方案選型為什么不用DDX/DDV而堅(jiān)持手動(dòng)消息映射2.1 DDX/DDV綁定的三大硬傷教科書不會(huì)告訴你的失效場(chǎng)景MFC向?qū)傻膶?duì)話框類默認(rèn)提供DDX_Text宏來(lái)關(guān)聯(lián)控件ID和成員變量看似省事。但在SpinEdit組合中這恰恰是問(wèn)題的起點(diǎn)。我用一個(gè)真實(shí)案例說(shuō)明某溫控系統(tǒng)要求設(shè)置目標(biāo)溫度-50.0℃ ~ 200.0℃精度0.1℃。設(shè)計(jì)師拖入IDC_EDIT_TEMP和IDC_SPIN_TEMP在類向?qū)е袨镋dit添加double m_dTargetTemp并勾選“Value”類型。生成的DoDataExchange里出現(xiàn)DDX_Text(pDX, IDC_EDIT_TEMP, m_dTargetTemp); DDV_MinMaxDouble(pDX, m_dTargetTemp, -50.0, 200.0);表面看完美Edit顯示數(shù)值Spin控制增減范圍校驗(yàn)也有了。但實(shí)際運(yùn)行時(shí)用戶輸入“123.456”后回車Edit顯示變成“123.46”四舍五入而Spin的當(dāng)前值卻仍是舊值更糟的是若用戶快速連點(diǎn)Spin上鍵5次Edit數(shù)值可能跳過(guò)中間值直接從25.0→25.5→26.0丟失25.1~25.4的過(guò)渡態(tài)——因?yàn)镈DX_Text只在對(duì)話框UpdateData(FALSE)時(shí)單向刷新而Spin的滾動(dòng)消息根本沒觸發(fā)該函數(shù)。問(wèn)題根源在于DDX/DDV是數(shù)據(jù)交換機(jī)制不是實(shí)時(shí)綁定機(jī)制。它只在UpdateData()被顯式調(diào)用時(shí)才同步而Spin的UDN_DELTAPOS通知是異步發(fā)送的二者時(shí)間軸完全錯(cuò)位。這導(dǎo)致三個(gè)無(wú)法繞過(guò)的缺陷響應(yīng)延遲Spin操作后Edit內(nèi)容不會(huì)立即更新需額外調(diào)用UpdateData(FALSE)但頻繁調(diào)用會(huì)阻塞UI線程精度丟失DDX_Text對(duì)double類型的轉(zhuǎn)換使用_ttof()默認(rèn)截?cái)嘈?shù)位無(wú)法控制保留位數(shù)校驗(yàn)失效DDV_MinMaxDouble只在校驗(yàn)階段UpdateData(TRUE)檢查用戶在Edit中輸入“abc”時(shí)Edit控件本身已顯示亂碼但變量m_dTargetTemp仍保持舊值程序邏輯已處于不可知狀態(tài)。提示這不是Bug而是MFC設(shè)計(jì)哲學(xué)的必然結(jié)果——它把“數(shù)據(jù)一致性”責(zé)任完全交給開發(fā)者而非框架自動(dòng)維護(hù)。2.2 手動(dòng)消息映射方案用Windows原生消息構(gòu)建確定性管道我們放棄DDX/DDV改用純消息驅(qū)動(dòng)方案核心邏輯鏈為Spin滾動(dòng) →UDN_DELTAPOS消息 → 計(jì)算新值 → 格式化字符串 →SetWindowText()更新Edit → Edit內(nèi)容變更 →EN_CHANGE消息 → 解析字符串 → 校驗(yàn)范圍 → 更新Spin位置這個(gè)環(huán)路的關(guān)鍵在于主動(dòng)控制消息觸發(fā)時(shí)機(jī)和順序。具體選型依據(jù)如下Spin消息選擇UDN_DELTAPOS而非WM_VSCROLLWM_VSCROLL是底層滾動(dòng)消息包含SB_LINEUP/SB_LINEDOWN等通用碼但Spin控件會(huì)將其轉(zhuǎn)換為UDN_DELTAPOS通知通過(guò)NM_UPDOWN結(jié)構(gòu)體其中iPos字段直接給出目標(biāo)位置iDelta給出步進(jìn)量。實(shí)測(cè)發(fā)現(xiàn)UDN_DELTAPOS比WM_VSCROLL更穩(wěn)定——尤其在高DPI縮放或遠(yuǎn)程桌面環(huán)境下WM_VSCROLL常因鼠標(biāo)采樣抖動(dòng)誤觸發(fā)多次而UDN_DELTAPOS由Spin內(nèi)部狀態(tài)機(jī)嚴(yán)格控制iDelta值恒為±1除非自定義SetBuddy()后修改。Edit消息選擇EN_CHANGE而非EN_KILLFOCUSEN_KILLFOCUS只在Edit失去焦點(diǎn)時(shí)觸發(fā)但用戶可能輸入一半就去點(diǎn)其他按鈕此時(shí)非法輸入如“12.”未被校驗(yàn)EN_CHANGE則每次字符增刪都觸發(fā)可實(shí)時(shí)攔截。代價(jià)是性能——需加防抖debounce否則快速輸入“123.45”會(huì)觸發(fā)5次解析。我的方案是在OnEnChange()中啟動(dòng)一個(gè)100ms定時(shí)器僅當(dāng)輸入停止100ms后才執(zhí)行解析既保證實(shí)時(shí)性又避免過(guò)度計(jì)算。數(shù)據(jù)類型統(tǒng)一為double但全程以字符串為中介Spin的SetRange32()只接受int但我們將邏輯范圍-50.0~200.0映射到Spin的整數(shù)范圍-500~2000步進(jìn)值設(shè)為1再通過(guò)SetPos()/GetPos()操作。Edit中始終顯示格式化后的字符串如123.4解析時(shí)用_tcstod()并捕獲errnoERANGE杜絕atof()的靜默失敗。這套方案的確定性體現(xiàn)在每一步操作都有明確的消息來(lái)源、可預(yù)測(cè)的執(zhí)行順序、可驗(yàn)證的狀態(tài)輸出。它不依賴MFC的“魔法”而是把Windows API的確定性發(fā)揮到極致。3. 實(shí)操細(xì)節(jié)與關(guān)鍵環(huán)節(jié)實(shí)現(xiàn)從資源創(chuàng)建到防抖解析的完整鏈條3.1 資源視圖配置兩個(gè)控件的物理布局與屬性設(shè)置在Visual Studio資源視圖中按以下步驟創(chuàng)建控件以VS2019為例其他版本路徑類似添加Edit Control工具箱拖拽Edit Control到對(duì)話框ID設(shè)為IDC_EDIT_TEMP右鍵屬性窗口將Style中的Number復(fù)選框取消勾選這是關(guān)鍵勾選后Edit會(huì)自動(dòng)過(guò)濾非數(shù)字字符但會(huì)禁用小數(shù)點(diǎn)和負(fù)號(hào)且無(wú)法響應(yīng)EN_CHANGERead-only保持FalseMultiline設(shè)為FalsePassword設(shè)為FalseWant return設(shè)為False避免回車觸發(fā)默認(rèn)按鈕。添加Spin Button拖拽Spin Button控件ID設(shè)為IDC_SPIN_TEMP屬性中Auto buddy設(shè)為True此選項(xiàng)會(huì)讓Spin自動(dòng)綁定相鄰的Edit控件但僅限于位置相鄰且ID連續(xù)我們不依賴它僅作為視覺提示Set buddy integer設(shè)為False禁用Spin自動(dòng)轉(zhuǎn)換Edit內(nèi)容為整數(shù)否則會(huì)覆蓋我們的double邏輯Alignment設(shè)為Right使其緊貼Edit右側(cè)。布局微調(diào)將Spin控件拖至Edit控件右側(cè)二者右邊界對(duì)齊調(diào)整Edit寬度確保能完整顯示最大值如“200.0”共5字符按默認(rèn)字體需約80像素重要在資源編輯器中確保Spin控件的Z-order層疊順序高于Edit控件右鍵Spin →Bring to Front否則Spin的滾動(dòng)箭頭可能被Edit遮擋。注意Auto buddy設(shè)為True后Spin會(huì)在PreSubclassWindow()中嘗試查找ID為IDC_EDIT_TEMP-1的控件作為伙伴。若Edit ID為IDC_EDIT_TEMPSpin ID必須為IDC_EDIT_TEMP1才能自動(dòng)匹配。但我們采用手動(dòng)綁定ID可自由命名無(wú)需遵循此規(guī)則。3.2 類向?qū)ё?cè)為兩個(gè)控件添加消息處理函數(shù)右鍵對(duì)話框類如CTempDlg→Properties→ 切換到Messages標(biāo)簽頁(yè)按順序添加為Spin控件注冊(cè)UDN_DELTAPOS在IDC_SPIN_TEMP行找到UDN_DELTAPOS下拉選擇Add OnDeltaposSpinTempVS自動(dòng)生成afx_msg void OnDeltaposSpinTemp(NMHDR *pNMHDR, LRESULT *pResult);此函數(shù)將在Spin被點(diǎn)擊時(shí)調(diào)用pNMHDR指向NMUPDOWN結(jié)構(gòu)體。為Edit控件注冊(cè)EN_CHANGE在IDC_EDIT_TEMP行找到EN_CHANGE下拉選擇Add OnEnChangeEditTemp生成afx_msg void OnEnChangeEditTemp();此函數(shù)在Edit內(nèi)容變化時(shí)觸發(fā)。額外添加EN_KILLFOCUS用于最終校驗(yàn)可選但推薦同樣在IDC_EDIT_TEMP行添加EN_KILLFOCUS→OnKillfocusEditTemp用于Edit失焦時(shí)強(qiáng)制校驗(yàn)并修正非法值。此時(shí)類向?qū)?huì)自動(dòng)在.h文件中聲明函數(shù)在.cpp文件中生成空函數(shù)體。接下來(lái)我們填充核心邏輯。3.3 Spin滾動(dòng)處理OnDeltaposSpinTemp的完整實(shí)現(xiàn)與精度控制void CTempDlg::OnDeltaposSpinTemp(NMHDR *pNMHDR, LRESULT *pResult) { LPNMUPDOWN pNMUpDown reinterpret_castLPNMUPDOWN(pNMHDR); // 1. 獲取當(dāng)前Edit中的數(shù)值字符串→double CString strCurrent; GetDlgItemText(IDC_EDIT_TEMP, strCurrent); double dCurrent _tcstod(strCurrent, nullptr); if (errno ERANGE) { // 解析失敗重置為默認(rèn)值 dCurrent 25.0; // 默認(rèn)室溫 SetDlgItemText(IDC_EDIT_TEMP, _T(25.0)); } // 2. 定義邏輯參數(shù)物理意義明確 const double MIN_TEMP -50.0; // 最低溫度℃ const double MAX_TEMP 200.0; // 最高溫度℃ const double STEP 0.1; // 步進(jìn)值℃對(duì)應(yīng)傳感器分辨率 // 3. 計(jì)算新值dCurrent pNMUpDown-iDelta * STEP double dNew dCurrent pNMUpDown-iDelta * STEP; // 4. 范圍校驗(yàn)與截?cái)喾呛?jiǎn)單clamp需考慮浮點(diǎn)精度 if (dNew MIN_TEMP) { dNew MIN_TEMP; } else if (dNew MAX_TEMP) { dNew MAX_TEMP; } // 5. 格式化輸出保留1位小數(shù)但避免浮點(diǎn)誤差如25.0顯示為25 CString strNew; strNew.Format(_T(%.1f), dNew); // 修復(fù)若結(jié)果為整數(shù)如25.0顯示為25更符合習(xí)慣 if (strNew.Right(2) _T(.0)) { strNew strNew.Left(strNew.GetLength() - 2); } // 6. 更新Edit控件 SetDlgItemText(IDC_EDIT_TEMP, strNew); // 7. 同步更新Spin位置使箭頭狀態(tài)與數(shù)值一致 // 將double映射到Spin的int范圍-50.0→-500, 200.0→2000 int nSpinPos static_castint(round(dNew * 10.0)); // *10因STEP0.1 CSpinButtonCtrl* pSpin static_castCSpinButtonCtrl*(GetDlgItem(IDC_SPIN_TEMP)); pSpin-SetPos(nSpinPos); *pResult 0; }關(guān)鍵細(xì)節(jié)解析第1步的_tcstod安全解析_tcstod是Unicode安全的字符串轉(zhuǎn)double函數(shù)返回轉(zhuǎn)換后的值并通過(guò)errno報(bào)告錯(cuò)誤。ERANGE表示超出double范圍如輸入1e309此時(shí)我們重置為默認(rèn)值并刷新Edit避免后續(xù)計(jì)算崩潰。第4步的范圍校驗(yàn)邏輯使用if-else if而非min(max())因?yàn)楦↑c(diǎn)比較存在精度問(wèn)題。例如dNew MAX_TEMP 1e-15時(shí)max(dNew, MAX_TEMP)可能因精度丟失仍返回dNew而顯式判斷可確保嚴(yán)格截?cái)?。?步的格式化技巧%.1f保證小數(shù)位數(shù)但25.0顯示為25.0不夠美觀。我們用Right(2) .0檢測(cè)并截去.0使顯示更符合工程習(xí)慣如HMI界面中25℃比25.0℃更常用。第7步的Spin位置同步SetPos()的參數(shù)是int因此需將double乘以10因步進(jìn)0.1后四舍五入。round()比static_castint()更安全避免負(fù)數(shù)截?cái)噱e(cuò)誤如-25.7轉(zhuǎn)int得-25但round(-25.7)得-26。3.4 Edit內(nèi)容變更處理OnEnChangeEditTemp的防抖解析與實(shí)時(shí)校驗(yàn)// 在類頭文件(.h)中添加私有成員 private: UINT_PTR m_uTimerID; // 定時(shí)器ID CString m_strLastValid; // 上次合法值用于恢復(fù) void CTempDlg::OnEnChangeEditTemp() { // 1. 獲取當(dāng)前輸入內(nèi)容 CString strInput; GetDlgItemText(IDC_EDIT_TEMP, strInput); // 2. 簡(jiǎn)單合法性預(yù)檢快速過(guò)濾明顯非法字符 // 允許數(shù)字、小數(shù)點(diǎn)、負(fù)號(hào)、空字符串 bool bValid true; for (int i 0; i strInput.GetLength(); i) { TCHAR c strInput[i]; if (!(_istdigit(c) || c _T(.) || c _T(-) || c _T( ))) { bValid false; break; } } if (!bValid) { // 輸入非法字符閃爍提示可選 FlashWindow(TRUE); return; } // 3. 啟動(dòng)防抖定時(shí)器若已存在則先銷毀 if (m_uTimerID ! 0) { KillTimer(m_uTimerID); } m_uTimerID SetTimer(1, 100, nullptr); // 100ms后觸發(fā) } // 在類向?qū)е袨閃M_TIMER添加消息處理 afx_msg void OnTimer(UINT_PTR nIDEvent); void CTempDlg::OnTimer(UINT_PTR nIDEvent) { if (nIDEvent 1 m_uTimerID ! 0) { KillTimer(m_uTimerID); m_uTimerID 0; // 4. 執(zhí)行深度解析與校驗(yàn) CString strInput; GetDlgItemText(IDC_EDIT_TEMP, strInput); // 去除首尾空格 strInput.Trim(); if (strInput.IsEmpty()) { // 空輸入設(shè)為默認(rèn)值 SetDlgItemText(IDC_EDIT_TEMP, _T(25)); UpdateSpinPosition(25.0); return; } // 字符串轉(zhuǎn)double TCHAR* pEnd; double dInput _tcstod(strInput, pEnd); // 檢查是否全部字符都被解析pEnd應(yīng)指向字符串末尾 if (*pEnd ! _T(\0)) { // 存在未解析字符如12.3abc AfxMessageBox(_T(輸入格式錯(cuò)誤請(qǐng)輸入有效數(shù)字), MB_ICONEXCLAMATION); SetDlgItemText(IDC_EDIT_TEMP, m_strLastValid); return; } // 檢查范圍 const double MIN_TEMP -50.0; const double MAX_TEMP 200.0; if (dInput MIN_TEMP || dInput MAX_TEMP) { CString strMsg; strMsg.Format(_T(溫度范圍應(yīng)在%.1f~%.1f℃之間), MIN_TEMP, MAX_TEMP); AfxMessageBox(strMsg, MB_ICONEXCLAMATION); SetDlgItemText(IDC_EDIT_TEMP, m_strLastValid); return; } // 5. 格式化并更新 CString strFormatted; strFormatted.Format(_T(%.1f), dInput); if (strFormatted.Right(2) _T(.0)) { strFormatted strFormatted.Left(strFormatted.GetLength() - 2); } SetDlgItemText(IDC_EDIT_TEMP, strFormatted); m_strLastValid strFormatted; // 更新最后合法值 // 6. 同步Spin位置 UpdateSpinPosition(dInput); } } // 輔助函數(shù)同步Spin位置 void CTempDlg::UpdateSpinPosition(double dValue) { int nPos static_castint(round(dValue * 10.0)); CSpinButtonCtrl* pSpin static_castCSpinButtonCtrl*(GetDlgItem(IDC_SPIN_TEMP)); pSpin-SetPos(nPos); }防抖機(jī)制詳解定時(shí)器策略SetTimer(1, 100, nullptr)創(chuàng)建一個(gè)ID為1、間隔100ms的定時(shí)器。每次OnEnChange觸發(fā)時(shí)先KillTimer再SetTimer確保無(wú)論用戶輸入多快如“123.456”只有最后一次輸入停止100ms后才執(zhí)行解析。實(shí)測(cè)100ms是平衡體驗(yàn)與性能的最佳值——短于80ms用戶感覺不到延遲長(zhǎng)于150ms會(huì)感知卡頓。雙重校驗(yàn)先用_tcstod解析再檢查pEnd是否指向字符串末尾。這能捕獲12.3abc這類部分合法輸入而_tcstod會(huì)靜默返回12.3。pEnd檢查是C標(biāo)準(zhǔn)庫(kù)提供的可靠手段比正則表達(dá)式高效得多。錯(cuò)誤恢復(fù)機(jī)制m_strLastValid成員變量存儲(chǔ)上次成功解析的值。當(dāng)輸入非法時(shí)直接恢復(fù)該值避免界面顯示亂碼后邏輯失控。這是工業(yè)軟件必備的“優(yōu)雅降級(jí)”設(shè)計(jì)。3.5 鍵盤交互增強(qiáng)讓方向鍵像Spin一樣工作用戶習(xí)慣用鍵盤方向鍵↑↓調(diào)整數(shù)值這能極大提升操作效率。我們?cè)贓dit控件的PreTranslateMessage中攔截// 在類頭文件中聲明 virtual BOOL PreTranslateMessage(MSG* pMsg); BOOL CTempDlg::PreTranslateMessage(MSG* pMsg) { // 攔截方向鍵消息僅當(dāng)Edit獲得焦點(diǎn)時(shí) if (pMsg-message WM_KEYDOWN GetFocus() GetDlgItem(IDC_EDIT_TEMP)) { switch (pMsg-wParam) { case VK_UP: // ↑鍵 // 模擬Spin上鍵點(diǎn)擊 NMUPDOWN nmUpDn {0}; nmUpDn.iDelta 1; nmUpDn.iPos 0; // 此值在OnDeltapos中不使用 OnDeltaposSpinTemp(reinterpret_castLPNMHDR(nmUpDn), nullptr); return TRUE; // 消息已處理不再傳遞 case VK_DOWN: // ↓鍵 nmUpDn.iDelta -1; OnDeltaposSpinTemp(reinterpret_castLPNMHDR(nmUpDn), nullptr); return TRUE; default: break; } } return CDialogEx::PreTranslateMessage(pMsg); }為什么用PreTranslateMessage而非OnKeyDownOnKeyDown是窗口消息而方向鍵在Edit控件中默認(rèn)被其內(nèi)部處理用于光標(biāo)移動(dòng)。PreTranslateMessage在消息分發(fā)給控件前攔截能確保我們搶在Edit處理前捕獲。return TRUE表示消息已消耗Edit不會(huì)收到從而避免光標(biāo)移動(dòng)與數(shù)值調(diào)整沖突。4. 常見問(wèn)題與排查技巧實(shí)錄那些讓老手也撓頭的MFC“幽靈Bug”4.1 問(wèn)題速查表高頻故障現(xiàn)象、原因與一鍵修復(fù)現(xiàn)象根本原因修復(fù)方案驗(yàn)證方法Spin點(diǎn)擊無(wú)反應(yīng)Edit不更新UDN_DELTAPOS消息未注冊(cè)或Spin控件未正確關(guān)聯(lián)到對(duì)話框類檢查類向?qū)е蠭DC_SPIN_TEMP行的UDN_DELTAPOS是否已添加確認(rèn).h中聲明與.cpp中實(shí)現(xiàn)函數(shù)名完全一致大小寫敏感在OnDeltaposSpinTemp開頭加AfxMessageBox(_T(Hit));點(diǎn)擊Spin看是否彈窗Edit輸入數(shù)字后Spin位置跳變到錯(cuò)誤值UpdateSpinPosition()中round()未使用或dValue * 10.0計(jì)算存在浮點(diǎn)誤差將static_castint(dValue * 10.0)改為static_castint(round(dValue * 10.0))對(duì)dValue做floor(dValue * 10.0 0.5)手動(dòng)四舍五入輸入25.05檢查Spin位置是否為25025.05×10250.5→round251不應(yīng)為250用戶快速連點(diǎn)SpinEdit數(shù)值跳變?nèi)?5.0→25.5→26.0OnDeltaposSpinTemp中未加臨界區(qū)多線程消息并發(fā)導(dǎo)致GetDlgItemText讀取到舊值在函數(shù)開頭加CSingleLock lock(m_csSpinLock, TRUE);需提前聲明CCriticalSection m_csSpinLock在GetDlgItemText前后加日志觀察是否讀取到不同值Edit中輸入12.后失焦顯示12但Spin位置錯(cuò)誤EN_KILLFOCUS未處理且EN_CHANGE防抖未覆蓋失焦場(chǎng)景添加OnKillfocusEditTemp()在其中調(diào)用與OnTimer相同的解析邏輯失焦后檢查Spin位置是否與Edit顯示值匹配高DPI縮放下Spin箭頭顯示不全或錯(cuò)位Spin控件未啟用DPI感知或資源腳本未設(shè)置DPIAWARE在manifest文件中添加dpiAwaretrue/dpiAware在資源腳本.rc中為Spin控件添加STYLE WS_CHILD | WS_VISIBLE | UDS_ALIGNRIGHT | UDS_SETBUDDYINT在125%縮放下檢查Spin是否完整顯示4.2 獨(dú)家避坑技巧來(lái)自十年MFC維護(hù)現(xiàn)場(chǎng)的血淚經(jīng)驗(yàn)技巧1用GetWindowTextLength()替代GetWindowText()做長(zhǎng)度預(yù)判在OnEnChangeEditTemp中若Edit內(nèi)容很長(zhǎng)如用戶粘貼了一段文本GetDlgItemText()會(huì)分配大內(nèi)存。我們先用GetWindowTextLength()獲取長(zhǎng)度若超過(guò)50字符則直接拒絕溫度值不可能超長(zhǎng)int nLen ::GetWindowTextLength(GetDlgItem(IDC_EDIT_TEMP)-GetSafeHwnd()); if (nLen 50) { SetDlgItemText(IDC_EDIT_TEMP, m_strLastValid); return; }這能避免因惡意輸入導(dǎo)致的內(nèi)存耗盡。技巧2Spin位置同步的“原子性”保障SetPos()和SetWindowText()是兩個(gè)獨(dú)立操作若在二者之間發(fā)生線程切換可能造成Spin位置與Edit值不一致。解決方案是封裝為原子操作void CTempDlg::SetTempValue(double dValue) { // 先更新Edit CString str; str.Format(_T(%.1f), dValue); if (str.Right(2) _T(.0)) str str.Left(str.GetLength() - 2); SetDlgItemText(IDC_EDIT_TEMP, str); // 再更新Spin確保順序 int nPos static_castint(round(dValue * 10.0)); CSpinButtonCtrl* pSpin static_castCSpinButtonCtrl*(GetDlgItem(IDC_SPIN_TEMP)); pSpin-SetPos(nPos); m_strLastValid str; // 同時(shí)更新最后合法值 }所有數(shù)值變更包括Spin滾動(dòng)、Edit輸入、外部API調(diào)用都走SetTempValue()徹底消除狀態(tài)不一致。技巧3調(diào)試時(shí)注入“可視化日志”MFC調(diào)試不便我習(xí)慣在關(guān)鍵路徑插入OutputDebugString()配合DebugView工具實(shí)時(shí)監(jiān)控OutputDebugString(CString(_T(Spin Delta: )) CString(_itot(pNMUpDown-iDelta, szBuf, 10)) _T(, Current: ) strCurrent _T(\n));比斷點(diǎn)更高效且不影響UI線程。技巧4應(yīng)對(duì)“粘貼”輸入的終極方案用戶可能粘貼123.45, 67.89等多值需在OnEnChange中檢測(cè)剪貼板if (::IsClipboardFormatAvailable(CF_TEXT)) { if (::OpenClipboard()) { HANDLE hClip ::GetClipboardData(CF_TEXT); if (hClip) { char* psz static_castchar*(::GlobalLock(hClip)); if (psz strstr(psz, ,)) { // 包含逗號(hào)視為非法 AfxMessageBox(_T(請(qǐng)勿粘貼多值)); ::CloseClipboard(); return; } ::GlobalUnlock(hClip); } ::CloseClipboard(); } }5. 進(jìn)階擴(kuò)展與工程化實(shí)踐從Demo到工業(yè)級(jí)模塊的跨越5.1 封裝為可復(fù)用控件CTempSpinEdit類的設(shè)計(jì)將上述邏輯封裝為獨(dú)立類可復(fù)用于多個(gè)對(duì)話框。核心設(shè)計(jì)繼承CWnd而非CEdit因需同時(shí)管理Edit和Spin采用組合模式構(gòu)造函數(shù)接收父窗口和IDCTempSpinEdit::Create(CWnd* pParent, UINT nIDEdit, UINT nIDSpin)內(nèi)部持有CEdit和CSpinButtonCtrl指針通過(guò)SubclassDlgItem()關(guān)聯(lián)提供SetRange(double min, double max, double step)接口隱藏底層整數(shù)映射細(xì)節(jié)事件回調(diào)機(jī)制ON_NOTIFY_REFLECT將UDN_DELTAPOS轉(zhuǎn)發(fā)給父窗口或提供OnValueChanged虛函數(shù)供派生類重寫。這樣其他開發(fā)者只需三行代碼即可復(fù)用CTempSpinEdit m_wndTempCtrl; m_wndTempCtrl.Create(this, IDC_EDIT_TEMP, IDC_SPIN_TEMP); m_wndTempCtrl.SetRange(-50.0, 200.0, 0.1);5.2 多語(yǔ)言支持字符串格式化的本地化適配str.Format(_T(%.1f), dValue)在德語(yǔ)系統(tǒng)中會(huì)輸出25,0逗號(hào)作小數(shù)點(diǎn)但Spin邏輯仍用英文格式解析。解決方案使用_tcsncpy_s()和_tcscpy_s()配合locale更優(yōu)方案在SetTempValue()中用std::stringstream配合std::locale()std::wstringstream wss; wss.imbue(std::locale()); // 使用系統(tǒng)locale wss std::fixed std::setprecision(1) dValue; CString str wss.str().c_str();5.3 單元測(cè)試要點(diǎn)如何為MFC UI控件寫測(cè)試MFC UI難以單元測(cè)試但我們可測(cè)試核心邏輯ParseInput(const CString str)函數(shù)輸入字符串返回double和bool成功標(biāo)志CalculateNewValue(double current, int delta, double step)函數(shù)輸入當(dāng)前值、步進(jìn)量返回新值FormatOutput(double value)函數(shù)輸入double返回格式化CString。用Google Test編寫TEST(TempSpinLogic, ParseValidInput) { double val; EXPECT_TRUE(ParseInput(_T(25.0), val)); EXPECT_DOUBLE_EQ(val, 25.0); } TEST(TempSpinLogic, FormatZeroDecimal) { EXPECT_STREQ(FormatOutput(25.0), _T(25)); }UI層只做薄包裝業(yè)務(wù)邏輯100%可測(cè)試。我個(gè)人在實(shí)際使用中發(fā)現(xiàn)最有效的調(diào)試方式是在OnDeltaposSpinTemp和OnEnChangeEditTemp中各加一行OutputDebugString用DebugView實(shí)時(shí)觀察消息流。曾有一個(gè)Bug困擾團(tuán)隊(duì)三天Spin點(diǎn)擊后Edit更新但再次點(diǎn)擊時(shí)數(shù)值不變。最終發(fā)現(xiàn)是GetDlgItemText讀取到了Edit的舊緩存值——因?yàn)镾etWindowText后未調(diào)用UpdateWindow()強(qiáng)制重繪。加上UpdateWindow()后問(wèn)題消失。這種細(xì)節(jié)只有在真實(shí)鍵盤敲擊、鼠標(biāo)點(diǎn)擊的節(jié)奏中才能暴露。所以別信“理論上應(yīng)該沒問(wèn)題”每個(gè)SetWindowText后都值得加一行UpdateWindow()保平安。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
少妇久久久免费| 亚洲啪啪视频一区二区| 国产亚卅97| 无码国产精品久久久久| 亚洲伊人成综合成人网| 男人天堂 天天射| 九九久久99| 国产丸一视频| 色婷婷激一区二区三区| 国产精品探花在线| 第四色奇米影视777| 久久久青青草| 中文字幕一二区二三区人妻专区| 91麻豆天美| 国产97色在线| 在线无码网站| 中文字幕人妻资源在线| 大香蕉人妻久久| 91女优在线观看| 男人久久精品| 国产青视频| 中文字幕在在线观看网站| 99热欧美| 综合激情五月丁香| www.国产高潮精品| 欧亚在线视频| 无码免费精品高清| 久久久久久电影| yellow网站免费观看日韩高清无码| 91精品国产91综合久久蜜臀| 熟妇色99| 肉动漫无遮挡h在线观看| 精品十三区| www国产天美久久久| 五月天亚洲网| AV一区观看| 中文字幕aⅴ在线视频| 九九九九亚洲| 日韩亚洲欧美中文字幕| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 少妇高潮99p| www.色99| 天美传媒国产原创中文字幕亚洲欧美另类 | 精品大全99999| 日本黄色天堂| 9美女超碰在线免费观看| 变态综合色| 免费AV中文网在线观看| 欧美呦呦性爱| 欧美精品久久久久久久久88| 五月婷色| 99久久婷婷丁香| 天美传媒精品一区二区| 天堂射| 超碰色综合| 中文字幕欧美日韩三级| 久欲AV| 不卡视频一区蜜桃视频 | 欧美少妇性乱| 欧美综合在线第一页| 干B网| 懂色中文一区二区三区 | 中文字幕精品一区二区精| 51久久夜色精品国产麻豆| 天天色综亚洲91污| 日韩精彩免费| 5252色欧美在线男人的天堂| 草草草视频在线免费看| 亚洲福利中文字幕在线| 99久久无色码| 欧美色91| 色嗨嗨在线| 日韩人妻操B| 玖玖大干人妻| 一起草日韩| 97操97色| 国产精品久久久久久久免牛肉蒲团| 精品一区二区啪啪啪| 亚洲精品国产专区在线观看| 热久久无毒不卡| 八戒午夜福利理论片| av影院十区| 4虎在线视频| 欧美日韩啪啪电影| 青青色综合| 综合伊人网12色| 九九天堂| 日本欧美一区二区三区视频麻豆| 九久9热| 天天噜| 女优免费一区二区永久| 91伊人| 大香蕉97久久| 老熟女乱伦片| 极品色电影院| 人妻中文在线| 国产无码久久高清| 国产熟女| 国产亚州高清国产拍精| 撸撸成人在线视频| 夜夜操青青草| 呻吟 欧美 日本 中出| 日韩色欲久久一二三四区| 久久m| 无码高清专| 久热99999| 久久久久久性爱免费视频| 三级三级三级日本99| 天堂综合网| 日韩三级视频一区二区三区| 一级一性爱免费视频| 99999久久久久9国产精品| 亚洲日韩av专区无码| 久久久婷婷| 国产精品久久久久亚洲av | 爱av免费| 天天干18禁| 天天色综合图片| 无码高清操逼| 亚洲女人毛茸茸91| 超碰调教97| 欧美1区二区三区公司 | 欧美不卡在线一区二区| 亚洲色香| 婷婷久久五月天| 伊人国产成人av网站| 一本一首道人妻少妇免费久久| 久久精品人人做人人看| 亚洲中文sv| 久久超碰爱| 亚洲精品性爱片| 欧洲一区二区三区四区在线观看| 色五月婷婷麻豆在| 青娱乐999| 亚洲日韩久久精品一区| 五月天婷婷色| 91丨豆花丨熟女| 99视频自拍区| 欧美色图中文字幕| 自拍偷拍2025在线观看 | 另类欧美色| 蜜臀久久99精品久久久久久久久| 综合久久少妇中文字幕| 青草影院内射高潮| 天天看天天综合成人网| 亚洲成人性爱在线观看| 日韩激情毛片一级久久久| 亚洲资源吧| 天天综和| 99精彩视频| 午夜视频好爽啊| 日韩精品一区二区人人人| 一级黄色性爱A级片| 香蕉av一区二区三区| 日本精品一区三区| 中文字幕日本久久| ji熟女.com| 96超碰网| 日韩 女同 综合| 男人亚洲91首页在线| 欧美强奸乱能| 成 人 A V免费视频在线观看| 蜜臀无码一区二区| 乱老熟女一区二区三区| 第二页中文字幕| 亚洲精品精品一区二区| 激情干在线| 青娱乐欧美激情一区二区| 亚洲交性| avav青青草久久夜| 97超碰久久色| 97免费免费视频网| 亚殴在线| 午夜精品99久久久久传媒| 91精品人妻电影| 五十路一区无码| 久啪| 青青草精品| 强奸a片网| 日韩国产成人自拍视频| 欧美精品一区二区少妇免费A片| 欧美亚洲今日在线| 欧美情色亚洲| 神马久久久久久久久| 白丝少妇一区二区| 96AV久久久| 五月综合视频| 亚洲色婷婷| 性开放中文AV高清无码免费看| 国产强奸乱伦无码视频| 蜜臀99999| 欧美亚洲第1页| 又黄又爽在线观看视频| 91蜜臀熟女| 欧美日韩m| 综合网欧美在线| 任你草| 婷婷91| 曰韩成人免费视频| 日韩不卡在线一区二区| 萌白酱自拍视频| 国产乱色国产精品免费视| 人妻三级在线中文字幕| 在线观看中文字幕| 国产精品片| 亚洲综合九九| 欧美综合亚洲综合| 亚洲情色欧美| 日韩99999| 蜜区区视频79| 精品无人区麻豆乱码1区2区图片| 玖玖大干人妻| av日韩中文字幕| 嗯嗯啊啊的视频| 91nbbbbbb| 91超碰碰在线| 青青草玖玖爱| 玖玖大干人妻| 爱欲AV| 人妻精品4K4K4K4K4| 大香蕉97久久| 乱码熟妇人妻久久久| 日韩人妻精品久久久久| 超91综合网| 啊啊啊啊啊啊啊国| 欧洲一区二区三区免费| 精品中文日韩字幕视频| 天天搞欧美| 国产精品69久久久久久久| 天天性射网| 国产成人精品网站| 久操com| 成人乱码一区二区三少妇| 亚洲一区二区精品福利| 午夜激情床戏激情| 亚洲永久永久永久永久一级一级一级精品 | 亚洲少妇喷视频看| 日韩99神马视频播放| 97综合日韩| 91国产美女丝袜足交精品视频| 韩国国产欧美情侣视频在线| 激情一区二区| 日韩一级性爱无码| 琪琪精品免费一区二区三区 | 超碰亚洲97| 97爱欧美| 亚洲另类色综合网站| 国产成人五月天丁香花| 日韩在线一区高清在线| 熟妇操花| 国产乱婷婷精品二区三区| 国精综合一二三区影视| 在线亚洲丝袜视频网站| 中国熟妇| 操日韩第| 99色热| 后入人妻一区| 91痴汉| 色吧5亚洲| 秋霞影音一区二区三区| 9久综合网| 亚洲AV高潮| 午夜精品人妻二区三区| 婷婷色综合欧美日韩| 久久综合国产精品国产| 丁香激情五月| 国产精品久久久999| 另类欧美综合| 91亚洲色人| 久操婷婷| 青青欧洲黑| 另类欧美色| 污污汅18禁网站在线永久免费观看| 亚洲中文日韩欧美大香蕉视频| 国产亚洲人妻综合日韩 久久| 国精综合一二三区影视| 欧美乱欲| 亚洲无线码一区国产欧美国| 一区二区三区无卡视频在线观看| 婷婷8月天青娱乐| 被操高清无码视频| 超碰人人妻| ...日韩成人一区二区三区字幕| 舔足天天操天天射| 日韩不卡毛片Av免费高清| 欧美久久婷| 在线色资源| 亚洲日韩精品久久久久一区壹牛| 色婷婷狠狠| 熟妇高潮精品一区二区三区下载| 欧差乱伦二三| 六月婷婷色综合| 加勒比五月天| 国产精品久久久久久高清无码免费看| 婷婷五月天成人| 亚洲综合九| 亚洲无码精品AV久久久| 亚洲无套久久嗯嗯| 综合亚洲网| 婷婷视频在线免费观看| 蜜桃久久久久久久久久久久| 国产精品一区二区a| 色情婷婷| 后入合集| 欧美色综合影院| 97久久久精品| 欧美片第一页| 美国美女AV在线| 国产诱惑| 日韩亚洲中文有码视频| 熟妇艹鸡八| 9999久久久| 久久综合五月天| 91综合天天看| 91精品大奶人妻| 97视频新免费| 熟女这里只有精品6| 99re不伦| 极品欧美一区二区三区| 91人妻丝袜无码| 高清无码人妻久久久一区二区三区aⅴ| 草莓精品视频| 久久9精品网站| 天天激情综合站| 夜夜爽妓女| 2021国产成人精品久久| 97中文天堂| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 天天操天天干美女网址导航| 美中日韩无码| 亚洲怡春院| 国语av最新自产拍在线观看| 操老熟女AV| 亚洲啪啪视频一区二区| 91亚洲丝袜| 欧美视频一区二区在线| 看看日B真人视频| 国产黄色在线播放观看| 麻豆伊人网| 黑人白女精品一区| 97一区二区三区视频| 久久久亚洲Av| 免费国产| 久色网| 春色91| 久久精品一区二区三区不卡| 女性喷水高潮在线观看| 久草新免费| 变态乱伦伪娘灌肠一区二区| 狠狠做深爱婷婷久久二区| 亚州操逼图| 色香欲天天天天综合色| 天美麻花大全视频| 国内一区二区免费| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 伊人精品国产| 国产激情片在线观看| 97国产|免费| 九九热九九热| 欧美一二三级精品在线| 中文字幕人乱码中文字的预防方法 | 人妻精品一区二区全免费| 日本黄色大片一级视频免费麻豆| 懂色av中文字幕一区二区三区天美 | 精品午夜福利导航| 男人 天堂 日 亚洲| 激情综合二| 中文字幕人乱码中文字的预防方法| 懂色AV蜜臀无码精品APP| 91制服丝袜| 天天透伊人| 黄色人人| 日本高清视频在线观看黄已三辽| 亚洲青青青视频在线| 久久精品福利影院| 亚洲日韩欧美一区二区| 色情综合| 亚洲AV麻豆Aⅴ无码电影一 | 亚洲激情视频| 91老熟女老女人国产老太| 国产一区二区欧美日本| 老司机福利青青草| 五月色丁香| 日本人妻伦在线中文字幕| 久久熟女久| 婷婷五月色| 久久无码一区二区二三区性色| 亚洲高清男人天堂| 亚洲色欲一区二区三区| 日韩人成网站在线播放| 日韩中文字幕视频| 综合网亚洲在线| 国产一区麻豆免费观看| 婷婷五月天色色| 欧美一区二区一级岛国大片| 素颜老阿姨乱情色| 高清国产av无码| 中文字幕第9页萱萱影音先锋| 2019亚洲男人天堂| 欧美综合站| 免费人成在线观看网站品爱网| 性交一区二区在线播放| 久久久久久久久久久久久9999| 日韩欧美综合激情| 亚洲AV成人精品网站在AV| 偷拍亚洲情色| 精品一区二区麻豆| 女人爽到高潮久久久| 日本成人电影资源网| 蜜臀久久99精品久久久电影| 一区二区无码视频| 国产亚洲精品美女| 欧美中文字幕男人天堂久久精品| 一级啊性爱在线视频| 国产精品又黄又猛又粗| 亚洲欧美洲综合| 欧美大色交| 97 超碰 人人做 人人爱| 欧美拳交在线播放| 日韩成人高清一区二区| 久久久91| 亚洲做性| 另类专区加勒比| 色女99一级片在线观看| 亚洲成av人片色午夜乱码| 在线岛| 青春草莓视频在线观看网址| 亚洲综合色图欧美| 国产精品在线一区二区| 亚州色国| 国产欧美日韩臀| 97在线视频观看| 2019久久久久久久久福利| 国产综合色精品在线观看| 不卡二三区人妻少妇| 四虎影视 亚洲无码| 成熟熟女国产精品一区二区| 九九热超碰97亚洲最新香蕉| 欧洲无码一区二区| 国产一区二区三区中文字幕| 这里只有精品视频在线| 日韩欧美中文| 视频黄色国产一级| 欧美日韩色综合网| 国产乱伦性爱区| 天天上日日上日韩精品| 视频一区二区免费在线| 2023天天操夜夜操| 成人毛片免费| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 四虎国产精品永久在线囯在线| 无码人妻精品酒店| 亚洲九九九| 91伊人| 亚洲欧美另类小说| 蜜臀久久99精品久久久电影| 亚洲欧美天堂| 精品人妻中文字幕高清| 日韩 国产 欧美自拍| 一二三区精品视频| 色妇综合网| 九热中文字幕| 国产一区在线看| 9丨久久九九九| 好爽视频在线观看视频| 91综合网| 日本熟女不卡视频| 再深点灬舒服灬太大了添视频| 国产黄色小视频网站| 思思热一热婷婷热一热| 91大神精品长腿在线观看网站| 久久成年片色大黄全免费网站| A 天堂| 人妻丰满熟妇一区二区三| 精品毛片av一区二区| 嗯啊抽插大香蕉网页| 亚洲制服欧美另类内射| 婷婷性爱| 亚洲精品一二三四区| 欧美曰韩国产精品| 欧美猛交黑寡妇中文字幕| 免费成人在线熟妇网| 亚洲偷拍欧美激情| 无码九九九九| 伊人97色天使| 欧美 亚洲 另类 综合| 蜜臀无码一区二区| 久久久日本电影| 又大又大又大又粗爽高潮观看| 黄色片A级一区二区三区| 黄色操人| 色青青久久影视| 婷婷久草| 欧美性,亚州色| 亚洲久久东京热一二三四五区视频| 日夜精品| 熟女五十路一区二区三| 五月丁香综合网| 蜜臀久久在线视频| 亚洲欧美综合图片| 国产婷婷综合在线观看| 一区二区三区免费岛国片| 睡产熟女乱伦| 亚洲少妇诱惑| 亚洲男人天堂2| 国产精品久久泡妞网站| 国产精品高清2021在线| 99精品成人免费看| 1956日韩精品| 久久国模av| 亚洲色婷婷综合久久久久中文| 黑人娇小av在线播放| 十八禁的黄污污免费网站| 五月婷婷六月天| 欧洲天天在线| 俺也射| 一区在线精品中文字幕| 韩国午夜理伦三级好看| 嗯嗯嗯嗯啊啊啊好紧好大| 国产精品午夜福利视频| 天天操夜夜操| 亚洲人妻av| 亚洲性猛交| 国产精品国产精品国产| 黄色av一区二区在线| 天天碰操中国年青熟妇| 国产传媒日韩| 国内三级自拍小视频在线观看 | 免费一级a毛片久久久久久鸭绿欲| 骚逼高潮久久精品| 久久天堂网| 免费公开人人操| 国产精品 亚洲情色| 激情另类激情| 久久久免费的精品| 日韩精品人妻中文字有码在线| 亚洲九九九| 香蕉久久国产AV一区二区| 偷拍2020| 岛国黄| 熟女自慰久久久| 国产精品日日摸夜夜添骚逼| 久热91| 曰本道人妻久久久在线不卡色视频| 1级黄色夫妻对换性交免费看| 懂色综合久久久| 99热一区二区三区四区| 综合欧美日本三级| 97天天插| 久久高清欧美国产| 亚洲欧洲无码一区夜| 久久伊人亚洲AV无码网站| 熟妇视频一区二区三区在线观看| 国产精品视屏| 欧美日韩超碰在线| 国产综合久久久麻桃个| 91视频国品一二三区| 九九精品网| 桃花色涩综合影院| 欧美日韩亚洲少妇寂寞影院正在播放| 人妻在线视频| 欧美爱国产综合、| 91人人臊| 超碰导航97| 色五月综合| 亚洲精品九九九九九九| 亚洲中文字幕av| 精品国产乱码久久久影院| 久综合网| 999久久久九九九九| 日韩欧美女优电影| 色姑娘综合网| 亚洲精品一二三四区| 黄片免费日韩| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 1024日韩| 天天日天天干少妇日| 成人资源中文字幕在线观看天天| 欧美国产婷婷久久| 800zy一区二区| 欧美性爱第一页久久| 东北女人的毛片| 黄色片一区二区三区四区五区| 试看福利| 成年人一级黄色毛片大全在线观看| 欧美在线综合| 久久婷婷五月| 日韩福利电影网| 欧亚不卡| 91操人| 欧美丝袜91| 免费看毛片操穴| 2024年最新色情网站在线观看| 久久做97| 亚洲操逼无码| 国产91 丝袜在线播放00-百度| 精精夜夜| 日本十八禁免费看污网站| 97超碰这里只有精品| 精品国产肉丝袜在线拍国语 | 国产91乱伦| 丰满少妇精品一区二区| 999在线电影香蕉| 岛国1区2区3区在线观看| 激情人妻另类| 在线只有精品| 国产精品白丝在线播放| 色色青青久久| 资源在线观一 二| 国产黄色小视频网站| 精品综合久久久久久97| 久久五月份| AV一区观看| 色天天野狼综合社区| 青青11操操操操操操操操| 日本免费一级AAA大片器| 欧美色图99| 特级大荫道BBwBBwBBW| 草草网站影院白丝内射| 亚洲不雅视频1区二区| 亚洲码和欧洲精品激情系列| 亚洲Av无码成人精品国产| 2017大香蕉| 物业黑人 AV一区| 加勒比无码一区二区三区| 国产高清精品一区二区三区毛片| 99精品九九九九九九| 美女淫穴| 色五月综合网| 国产亚洲精品激情| 操人妻视频| 精品9区| 国语人妻精彩刺激| 综合久久六月久久婷婷| 岛国爱情动作片在国产AV无码专区亚洲AV漫画| 久久国产999| 禁止观看美女黄| 被体育老师抱着c到高潮| 最新日本中文字幕| 91国产丝袜白虎| 国产精品久久久777| 亚洲激情综合| 青娱乐久久艹| 极品欧美一区二区三区| 超碰色97| 亚洲综人| 一区二区三区成人| 青青草在线视频人人想人人上| 怡红院一区二区熟女人妻| 日韩精品资源专区二区| 一本色道人妻久久| 久久久久久久9最新免费视频观看| 伊人久久亚洲中文字幕| 热久久这里只有精品| 国产白嫩漂亮KTV在线| 家庭乱伦麻豆| 91网站18禁| 日韩电影免费网站麻豆视频| 日韩精品操少妇| 国产老熟女| 亚洲成人av色网| 噜噜噜无码AV一级一级久久影院| 无码精品人妻一区二区三区妖精| 日韩免费中文字幕视频| 熟女人妻一区二区三区免费看| 黑白配性爱AV成| 国产美女激情| 天天影视激情欧美| 久久久999日本大片| 色婷婷香蕉| 日韩激情啪啪| 中文字幕伊人| 激情五月天校园春色网| 欧美日韩在线视频网站| 夜夜高潮夜夜爽夜夜爱爱一区| 啊啊啊啊啊啊啊网址在线观看| 一区 欧美 日韩 麻豆| 久久久精品日本一道| 激情五月丁香五月| 天堂8在线新版官网| 欧美性爱中文字幕无线码| 亚洲日韩在线a不卡99精品| 啊啊啊想要| 97视频在线观看免费高清| 久久九九精品一区二区 | 美中日韩无码| 欧美,日韩综合久久| 综合激情二| 久久国产逼| 1769一区| 国产亚洲精品一区二区三区| 精品免费视频国产一区| 乱欲视频| 夜草网站| 在线观看一级α片刺激高潮视频| 色吧5亚洲| 欧美组图日韩亚洲中文字幕| 日韩一级欧美一级国产一级台湾| 天天澡天天爽日日AV| 97视频网站| 秋霞Av理论一级在线| 亚洲无码com| 亚洲一区二区三区春色| 日韩在线欧美精品一区二区| 国产精品日本无码A片| 人人做,人人操,人人摸| 熟妇xxxxx性春色| 一区二区三区亚洲| 色网在线视频观看免费| 日韩乱中文| 日韩丝袜二区| 熟女视频久久| 91 刺激在线| 天堂九九九九九九九九九| 99青草| 91视频观看网站| 色诱avtt| 97超碰人操| 97在线日韩中文字幕| 久久久亚洲精品中文字幕人妻| 久久精品无码专区| 偷拍综合网| 久久精品 六十路 熟女 欧美| 嫩呦国产一区二区三区AV| 日本成人A片免费看| 亚洲精品啪视频| 久久久com| 俺去久久| 91nbbbbbb| 天天综合,91入口| 91爱| 免费一级性爱久久| 粉嫩在线一区二区懂色| 免费看毛片操穴| 少妇500双飞99| 997色在线| 99在线精品视频| {男男暴菊gay无套网站| 最新日产中文在线麻豆| 少妇一线天久久久久久| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 草草影院最新网址| 婷婷激情五月综合| 超碰在线人妻不卡| 色香网| 在线a亚洲视频播放在线| 久久riav中文精品| 人人操av| 最新av在线| 亚洲资源一区| 午夜无遮挡男女啪啪视频| 青草av在线| 中文乱码99| 亚洲第一男人天堂| 亚洲人成网站7777| 极品色www影院| 久艹伊人精品综合在线| 97精品视频在线播放| 翔田千里A片一区二区| 强奸乱伦大香蕉网| 女人妻一区| 亚洲色天堂九9| 香蕉国产精品麻豆亚洲欧美日韩| 日本一级性爱| 久热精品色情| 人人澡人人干| 国产探花精品在线| 九色 人妻 大香蕉| 呻吟 欧美 日本 中出| 偷拍 欧美 日韩| 日本国产成人亚洲精品无码| 久久做97| 偷拍盗拍亚洲色图图片| 美中日韩无码| 干b在线性社区| 超碰97COm中文| 欧美日韩性爱无码| 五月天伊人| 欧美色图综合网| 日本一区二区做爱的视频| 欧美日韩免费专区在线| 97超级久久| 亚洲精品啪视频| 佐山爱中文字幕| 999久久久九九九九| 日本人人操人人操| 激情综合av| 麻豆久久精品亚洲精品88 | 最新国内自拍av免费| 国产玖玖| 色网亚洲人| 日韩一区二区高清在线观看的| 欧美另类色| 蜜臀Av一区二区三区| 人人操人人操人人人操| 狼天天狼天天大香蕉| 色97欧美| 91精品无码人妻系列| 国内黄色精品| 国产精品天堂| 操婷婷逼| 91操人| 国产超碰AV在线精品| 麻豆精品久久久久久久| 欧美激情内射| 午夜福利视频在线一区| 91精产一区二区三区| 日韩av无码网站| 禁片 高清 在线观看视频网站| 欧美第二页午夜| 色狠狠 - 百度| 国产自产91区13区| 91天天综合| 91大胆欧美| AV女优男人的天堂| 成人片在线播放| 综合一区二区影视| 综合久久六月久久婷婷| 91麻豆天美传媒HD| www.99色| ,国产乱人伦精品一区二区三区| 国产97亚洲| 91在线色综合| 久久大香蕉97| 日韩人妻无码专区| 欧亚日本情色| 欧美一区二区三区日韩| 亚洲综合射| 国产av强奸美女| 99亚洲人人| 免费视频在线一区二区不卡| 熟妇视频一区二区三区在线观看| 放黄片放3级黄片没穿衣服| 一区二区激情国产熟女| 99av| 六六久久日韩不卡| 日韩精品人妻| 狠狠中文字幕| 狠狠超| 大香蕉伊人网WWWn0n| 加勒比av官网在线| 麻豆国产96在线| 青青草原伊人网| 久久婷婷亚洲| 1区2区3区视频| 大奶啊啊好爽| 国产精品久久久啊| 国产精品色哟哟| 亚洲乱色熟女一区| 精品一国2| 精品人体无圣光凹凸| 亚洲男人的天堂网| 一区三区啪啪| 性欧美第一页| 密桃99999| 香蕉国产97| 人人人人人人少妇| 中文字幕久久婷婷丁香五月天| 热天堂一区二区| 久久久精品91八戒| 欧美综合在线91| 精品毛片久久久精品毛片| 精品九九淫乱男| 黄片直播三级黄片两女一男| 日韩欧美中文字幕搭讪巨乳美人妻视频| 色色色色网站| 亚洲综合91| 亚洲五区熟女| 亚洲古典另类欧美在线| 欧美国产婷婷久久| 亚洲免费精品一区| 18禁免费视频| 一本大道久| 天天综合AV| 无码天天操| 欧美亚洲韩国视频十五区| 激情丁香五月| 日本欧美中文字幕| 国产精品一区二区后入| 2019天天干天天操| 91久久婷婷| 久久久久久久久久久久黄色 | 91深夜夜| 美女91网址| 操我啊啊啊啊啊| xxxx网站亚洲精品| 欧色网址| 少妇同性| 97久久超碰| 亚洲国产成人7777| 久热99999| 欧美熟妇视频| 无码高清国产AV| 欧美激情区| 97在线观视频免费观看| 国产久久久久久久久一区二区| 亚洲成人激情小说视频| 我中文字幕6区| 婷婷五月天在线观看| 老司机天天操| 亚洲图片视频小说| 97色诱| 女人被添高潮免费视频| 男女做爰猛烈动高潮A片免费应用| 欧洲自拍第一页| WWW4虎| 青青草丝袜在线视频| 欧美精品三级黄片| 99热线麻豆| 亚洲激情色片| 激情网五月天| 久久久久久久亚洲Av无码| 91熟女丨老女人| 欧美大战久久久伊人| 精品夜夜澡人妻无码| 亚洲精品天堂久久A∨51成人漫| 国产精品白丝| 天天久久久久久| 日本啊啊啊啊啊视频| 思思热在线| 国产一区二区a毛片| 探花视频免费观看国产专区| 凹凸 69堂 在线播放| 亚洲综合图文| 中文伊人大香蕉视频| 国产精品视频白浆免费| 操逼视频色| 日本阿v天堂在线观看| 综合色久欲| 美女黑人91神马| 婷婷激情一区二区三区俺也去| 免费观看啪视频| 夜间福利片1000无码| 国产精品不卡高清在线观看| 超碰色97| 限制级中的三级片中的黑粗大屌屌日人妻熟女| 中文字幕55555| 精品人人| 免费视频无码| 国产精品视频白浆免费| 精品视频免费在线一区| 男人在线天堂| 偷拍盗拍亚洲色图图片| 黄页网站成人免费| 亚洲视频二区 | 久操频道免费在线呗看| 日本熟妇色熟妇在线视频播放| 亚洲视频,小说| 99自拍视频| 久久性爱免费送| 亚洲一卡2卡3卡4卡乱码网站| 一本色道综合久久欧美| 免费精品无码一级毛片牛牛影视 | 天天超级碰碰碰| 久久久久ab| 日韩天堂av电影在线观看 | 超碰97在线中文| 1区2区3区中文字幕日韩| 少妇被玩视频二三区| 99热这里只有精品8| 丁香五月天堂| 丁香五月性爱| 久久香蕉国产线看观看猫咪av| 日韩国产乱子伦App| 国产一区二区精品久久99| 黄视频免费| 牛牛久久国产精品视频一二三| 亚洲天堂 视频你懂的| 久久精品色欧美aⅴ一区二区| 特级丰满少妇一级AAAA爱毛片 | 99爱视频| 日本91白丝| 国产原创自拍| 久久久com| 国产乱婷婷精品二区三区| av优播| 国产怡红院| 东京热一区二区三区四区五区六区| 久jiu久神马影院| 久9久| 女人妻一区| 99青青草国产视频| 91超碰碰在线| 97超碰人操| 曰本特级特黄特色黄色A级网站高清在线免费看 | 五月天开心网| 丁香六月婷婷综合| 日韩无码嘿咻黑热久| 五月婷在线| 亚洲综合五月天| 加勒比大香蕉视频在线| 亚洲精品 大香蕉| 好吊色在线观看| 婷婷五月成人| 欧日韩不卡视.频| 97人肏| 熟女自慰久久久| 亚州欧美总和| 在线电影亚洲色图| 亚洲成成熟女人综合一区二区| 中文字幕在线观| 一区二区三区国产在线播放| 91伊人久| 国产日韩区| 嫩草一区二区在线观看| 国产亚洲综合欧美一区| 视频二区美腿丝袜制服人妻欧美| 日韩在线女优天天干| 青青操在线亚洲视频观看欧美在线| 北京专精特新企业招聘信息| 亚洲揄拍网| 91超碰在线观看| 超碰色97| 亚洲欧洲日本精品中文a∨| 无码逼| www久久99| 亚洲免费精品一区| 中亚黄色三级大片| 97久久综合网| 国产操逼网站亚洲一级黄色| 超碰在线观看av不卡| 亚洲色图欧美视频| 丝袜夫妻自拍| 亚洲图片 激情小说| 色网亚洲人| 成人一二| www成人啪啪18秘 免费| 天天日天天爽| 啊啊啊快操我视频| 亚洲黄色电影| 老司机午夜精品视频| 强奸乱伦麻豆| 国产精品天美传媒| 强上我不卡卡| 2020中文字幕在线| 日本国产欧美一区三区二区| 天天看天天在线精品| 婷婷丁香六月| 今日头条成人一区二区三区四虎精品| 国产视频97| 国产精品福利资源在线尤物| 国产一区二区av综合| 色婷婷综合视频| 超碰人妻久久人妻中文97| 超碰精品97| 中文字幕国产| 开心五月天激情网| 色综合久久夜色精品国产天堂| 欧美天堂在线| 色97欧美| 日韩欧美大力操| 精品久久一区二区三区四区五区| 日韩三级在线观看mp4| 中文三一区| 91碰超| 日韩AV一区二区三区四四| 欧美色日| 国产精品不卡一区二区三区av| 久久免费精品视频免一| 9999伦理视频| 91精品导航| 中文字幕AV乱伦| www.狠狠| 中文字幕精品专区搜索结果91| 日韩av在线精品观看| 最近的最新的中文字幕视频| 日韩国产十八禁| 色爱亚洲| 一区二区三区四区免费视频| 中文久久一区| 精品在线蜜臀| 午夜影美女日鸡鸡天天视频国产| 夜夜嗨AV蜜臀av| 九久9精品| 岛国视频免费在线观看| caopeng97人妻| 东京热天堂网| 秋霞无码av鲁丝片一区| 97 亚洲 日韩 欧美 在线| 婷婷国产精品一区二区| 啪一啪免费视频| 国产一级久久久| 亚洲男人电影天堂| 婷婷丁香五月综合| 亚洲黄a三级三级三级看三级| 思思热在线视频免费| 黄色网址久久精品欧美喷水| 四虎在线播放| 无码高清少妇久久| 亚洲免费精品一区| 国产99热| 91日本在线观看| 色哟哟av| 欧美性爱十八禁| 中文幕97| 天天操人人操狠狠插| 超碰国产情侣自拍网| 久久六六| 99无码视频| 欧美综合中文| 欧美性爱另类综合| 鸥美极品| 口爆吞精在线观看| 国产精品久久久久久久久久久久久久久久 | 亚洲人妻在线一区| 久久夜嗨| 国产午夜精品理论片一二三区区| 男人的天堂2018东京热啪啪啪| 青草成人免费视频一COm| 五月婷婷综合在线| 超碰在线日韩一区| 99九九精品| 9久久久久久| 日本午夜久久电影| 91天天综合在线| 久久久18| 啊啊啊啊好疼| 久久99网站| 欧美色图电影| 亚洲有薄码区日本系列中文字幕| 亚洲交换| 五月天丁香网| 日本熟妇人妻一区二区三区| 久碰视频| 丰满人妻-区二区三区免费看 | 亚洲精品久久久久毛片A片拉屎| 青青11操操操操操操操操| 死我十八禁| 久草看看看| 99热这里只有精| 亚洲黑人在线| 精品夜夜澡人妻无码| 免费a v| 欧美最婬乱婬爆婬性视频 | 日本一区三级韩国| 曰韩人妻中文字幕在线| 97色五月天完| 操操操五月天婷婷丁香影院| 白丝少妇一区二区| 伊人激情五月天一区二区 | 9久在线视频只有精品| 久久111| 少妇无码av专区线| 999九九九九国产动| 色播综合| 男人的天堂 在线一区| 国产精品熟女AV中文字幕在线播放| 精品美女久久久久| 欧美大色交| 热九九精品| 2020中文字幕在线观看| 亚洲日韩av一区二区三区百合| 午夜.DJ高清在线观看免费7| 日日干夜夜操视频h| 91香蕉视频在线观看免费| 男人的天堂2000| 亚洲操逼视频网站| 亚洲男人天堂手机版| 俺去久久| 老熟女搡BBBB搡BBBB视频|