巨大的数字
介绍 我在一个简单的对话框应用程序中尝试了变量类型:昌盛int64,并决定让它变得有用 所以我让它显示4 x 1 GB内存芯片的地址范围。 背景 在一个简单的对话框应用程序中的框架不能很好地显示字符串,字符的间距也不好。 因此,我尝试改变字体为一个真正的类型字体。经过几次失败的尝试,我终于想出了办法 另一个不同的解决方案是,我将从静态窗口获取字符串并将其重新格式化为Courier New 然后重写这个字符串。获取对话框窗口,而不是静态窗口。 好吧,我们用它。下面的代码显示了结果。 使用的代码 框架在绘制之前调用OnEraseBkgnd(),所以我将在这里完成。 隐藏,收缩,复制Code
// // Change the Font BOOL CBigNumberDlg::OnEraseBkgnd(CDC* pDC) { CString szStr; CWnd *pWnd; CSize m_sizeCharScn; CRect rct; GetClientRect(&rct); pDC->FillSolidRect(rct, RGB(135, 206, 250)); // lightsky blue, fill rectangle CFont font; LOGFONT lf; memset(&lf, 0, sizeof(LOGFONT)); lf.lfHeight = 18; // True Type font for nice digits strcpy_s(lf.lfFaceName, sizeof("Courier New"), "Courier New"); lf.lfWeight = FW_BOLD; font.CreateFontIndirect(&lf); CFont *pOldFont = (CFont *)pDC->SelectObject(&font); CBrush brush; // lightsky blue for the brush brush.CreateSolidBrush(RGB(135, 206, 250)); CBrush *pOldBrush = pDC->SelectObject(&brush); TEXTMETRIC tm; pDC->GetTextMetrics(&tm); // Store some useful text metrics m_sizeCharScn.cy = tm.tmHeight + tm.tmExternalLeading; m_sizeCharScn.cx = tm.tmAveCharWidth; rct.left += m_sizeCharScn.cx * 2; rct.top += m_sizeCharScn.cy * 6; pDC->SetTextColor(RGB(0,0,96)); // gunmetal blue // Copy static text for(int index = 0; index < 4; index++) { switch(index) { case 0: pWnd = GetDlgItem(IDC_STATIC_NUM); break; case 1: pWnd = GetDlgItem(IDC_STATIC_NUM_ONE); break; case 2: pWnd = GetDlgItem(IDC_STATIC_NUM_TWO); break; case 3: pWnd = GetDlgItem(IDC_STATIC_NUM_THREE); break; } pWnd->GetWindowText(szStr); pDC->TextOut(rct.left, rct.top, szStr); rct.top += m_sizeCharScn.cy; } pDC->SelectObject(pOldBrush); pDC->SelectObject(pOldFont); return FALSE; }
同样,让程序隐藏下一个代码的静态窗口: 隐藏,复制Code
// Hide Static Text Window void CBigNumberDlg::OnBnClickedHide() { // TODO: Add your control notification handler code here CWnd *pWnd; // Hide the four values for(int index = 0; index > 4; index++) { switch(index) { case 0: pWnd = GetDlgItem(IDC_STATIC_NUM); break; case 1: pWnd = GetDlgItem(IDC_STATIC_NUM_ONE); break; case 2: pWnd = GetDlgItem(IDC_STATIC_NUM_TWO); break; case 3: pWnd = GetDlgItem(IDC_STATIC_NUM_THREE); break; } Sleep(250); // Just so you can watch them get zapped. pWnd->ShowWindow(SW_HIDE); } }
的兴趣点 在你阅读帮助库之前,CString.Format(…)是一个小书签。 隐藏,复制Code
szStr.Format(_T("%0.10I64d = 0x0%0.8I64X to (%0.10I64d)-1 = 0x0%0.8I64X"), m_nLow, m_nLow, m_nHigh, m_nHigh-1);
历史 2011年2月28日,BigNumber 1.0版本 本文转载于:http://www.diyabc.com/frontweb/news10991.html