CRect rc;
GetClientRect(rc); CDC dc;
dc.CreateCompatibleDC(pDC); CBitmap bm;
bm.CreateCompatibleBitmap(pDC, rc.Width(), rc.Height());
dc.SelectObject(bm);
dc.SetBoundsRect(&rc, DCB_DISABLE); CFont font;
font.CreateFont ( m_LineHeight, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, 0 );
CBrush bkBrush(RGB(255,255,255));
    dc.FillRect(rc, &bkBrush);

UINT lineCY, lineCX;
UINT dwPos;
char currentchar[20];
UCHAR text[17]; int lineBeginPos; m_HexStart = m_CharWidth * (8- m_LeftChar); //计算二进制显示开始位置
m_TextStart = m_HexStart + m_CharWidth * 70; //计算ASCII码显示开始位置 for(UINT i = 0; i < m_PageRows; i++) //按行显示数据
{
lineBeginPos = (m_TopLine+i-1)*16; //计算当前行开始字符相对于总缓冲区的位置
lineCY = i * m_LineHeight; //当前行的Y坐标
sprintf(currentchar, "%08Xh:", lineBeginPos); dc.SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
dc.SetBkColor(RGB(255,255,255));
memcpy(text,&m_text[lineBeginPos],16); //取当前行数据
text[16] = '\0'; for(int l = 0; l < 16; l++)
{
if(text[l] < 32)
text[l] = 46; //不可见ASCII字符用.表示
}
if(lineBeginPos+16 > m_CharCount)
{
text[m_CharCount%50] = '\0'; //最后的数据不满一行时
}

dc.TextOut (m_TextStart, lineCY, text);//显示右面的ASCII字符 for(UINT j = 0; j < 16; j++)
{
dwPos = j + lineBeginPos; if(dwPos > (m_CharCount-1))
goto bitblt; //显示完最后一行退出

lineCX = m_HexStart + j * m_CharWidth *3 ; //计算当前要显示的二进制字符的位置
sprintf(currentchar, "%02X", ((UCHAR *)m_text)[dwPos]);
dc.TextOut (lineCX, lineCY, currentchar); //显示二进制字符
}
}bitblt:
pDC->BitBlt(0, 0, rc.Width(), rc.Height(), &dc, 0, 0, SRCCOPY);
dc.DeleteDC ();有的语句不理解,帮忙解释一下··

解决方案 »

  1.   

    圣经当中有的语句不懂,请帮忙解释一下。
      

  2.   

    2012 12 21 世界末日不懂,请帮忙解释一下。
      

  3.   

    LZ,帮你解释下,难道全部解释??哪里不懂说出来才是正题
      

  4.   

    您好
    我是本版版主
    此帖已多日无人关注
    请您及时结帖
    如您认为问题没有解决可按无满意结帖处理
    另外本版设置了疑难问题汇总帖
    并已在版面置顶
    相关规定其帖子中有说明
    您可以根据规定提交您帖子的链接
    如您目前不想结帖只需回帖说明
    我们会删除此结帖通知见此回复三日内无回应
    我们将强制结帖
    相关规定详见界面界面版关于版主结帖工作的具体办法