MFC 编辑框内容更新方法以及滚动条设置

 

  1. 内容更新,之前已经说过一种就是调用UpdateData(FALSE);来实现。但是这种方法是对整个编辑框进行更新。
  2. 通过单个编辑内容设置更新内容。这种是调用SetDlgItemText(IDC_EDIT,m_Edit1_Value);来实现。
  3. 滚动条的设置,首先是要先设置一下编辑框属性,使能多行滚动,以及其滚动方式。之后申请一个编辑框的控制变量类型。
    • 在事件处理时调用函数:m_Edit1_path_Ctl.LineScroll(m_Edit1_path_Ctl.GetLineCount());
    • 更新后代码如下:
    •   1 // FileCrcDlg.cpp : implementation file
        2 //
        3 
        4 #include "stdafx.h"
        5 #include "FileCrc.h"
        6 #include "FileCrcDlg.h"
        7 
        8 #ifdef _DEBUG
        9 #define new DEBUG_NEW
       10 #undef THIS_FILE
       11 static char THIS_FILE[] = __FILE__;
       12 #endif
       13 
       14 /////
       15 // CAboutDlg dialog used for App About
       16 
       17 class CAboutDlg : public CDialog
       18 {
       19 public:
       20     CAboutDlg();
       21 
       22 // Dialog Data
       23     //{{AFX_DATA(CAboutDlg)
       24     enum { IDD = IDD_ABOUTBOX };
       25     //}}AFX_DATA
       26 
       27     // ClassWizard generated virtual function overrides
       28     //{{AFX_VIRTUAL(CAboutDlg)
       29     protected:
       30     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
       31     //}}AFX_VIRTUAL
       32 
       33 // Implementation
       34 protected:
       35     //{{AFX_MSG(CAboutDlg)
       36     //}}AFX_MSG
       37     DECLARE_MESSAGE_MAP()
       38 };
       39 
       40 CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
       41 {
       42     //{{AFX_DATA_INIT(CAboutDlg)
       43     //}}AFX_DATA_INIT
       44 }
       45 
       46 void CAboutDlg::DoDataExchange(CDataExchange* pDX)
       47 {
       48     CDialog::DoDataExchange(pDX);
       49     //{{AFX_DATA_MAP(CAboutDlg)
       50     //}}AFX_DATA_MAP
       51 }
       52 
       53 BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
       54     //{{AFX_MSG_MAP(CAboutDlg)
       55         // No message handlers
       56     //}}AFX_MSG_MAP
       57 END_MESSAGE_MAP()
       58 
       59 /////
       60 // CFileCrcDlg dialog
       61 
       62 CFileCrcDlg::CFileCrcDlg(CWnd* pParent /*=NULL*/)
       63     : CDialog(CFileCrcDlg::IDD, pParent)
       64 {
       65     //{{AFX_DATA_INIT(CFileCrcDlg)
       66     m_path = _T("");
       67     m_crc_hex = _T("");
       68     m_crc_dec = _T("");
       69     //}}AFX_DATA_INIT
       70     // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
       71     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
       72 }
       73 
       74 void CFileCrcDlg::DoDataExchange(CDataExchange* pDX)
       75 {
       76     CDialog::DoDataExchange(pDX);
       77     //{{AFX_DATA_MAP(CFileCrcDlg)
       78     DDX_Control(pDX, IDC_EDIT3_crc_dec, m_Edit3_dec_Ctl);
       79     DDX_Control(pDX, IDC_EDIT2_crc_hex, m_Edit2_hex_Ctl);
       80     DDX_Control(pDX, IDC_EDIT1_path, m_Edit1_path_Ctl);
       81     DDX_Text(pDX, IDC_EDIT1_path, m_path);
       82     DDX_Text(pDX, IDC_EDIT2_crc_hex, m_crc_hex);
       83     DDX_Text(pDX, IDC_EDIT3_crc_dec, m_crc_dec);
       84     //}}AFX_DATA_MAP
       85 }
       86 
       87 BEGIN_MESSAGE_MAP(CFileCrcDlg, CDialog)
       88     //{{AFX_MSG_MAP(CFileCrcDlg)
       89     ON_WM_SYSCOMMAND()
       90     ON_WM_PAINT()
       91     ON_WM_QUERYDRAGICON()
       92     ON_BN_CLICKED(IDOK, OnOpen)
       93     ON_BN_CLICKED(IDC_BUTTON1, OnButton1_ClearAll)
       94     ON_WM_DROPFILES()
       95     //}}AFX_MSG_MAP
       96 END_MESSAGE_MAP()
       97 
       98 /////
       99 // CFileCrcDlg message handlers
      100 
      101 BOOL CFileCrcDlg::OnInitDialog()
      102 {
      103     CDialog::OnInitDialog();
      104 
      105     // Add "About..." menu item to system menu.
      106 
      107     // IDM_ABOUTBOX must be in the system command range.
      108     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
      109     ASSERT(IDM_ABOUTBOX < 0xF000);
      110 
      111     CMenu* pSysMenu = GetSystemMenu(FALSE);
      112     if (pSysMenu != NULL)
      113     {
      114         CString strAboutMenu;
      115         strAboutMenu.LoadString(IDS_ABOUTBOX);
      116         if (!strAboutMenu.IsEmpty())
      117         {
      118             pSysMenu->AppendMenu(MF_SEPARATOR);
      119             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
      120         }
      121     }
      122 
      123     // Set the icon for this dialog.  The framework does this automatically
      124     //  when the application's main window is not a dialog
      125     SetIcon(m_hIcon, TRUE);            // Set big icon
      126     SetIcon(m_hIcon, FALSE);        // Set small icon
      127     
      128     // TODO: Add extra initialization here
      129     
      130     return TRUE;  // return TRUE  unless you set the focus to a control
      131 }
      132 
      133 void CFileCrcDlg::OnSysCommand(UINT nID, LPARAM lParam)
      134 {
      135     if ((nID & 0xFFF0) == IDM_ABOUTBOX)
      136     {
      137         CAboutDlg dlgAbout;
      138         dlgAbout.DoModal();
      139     }
      140     else
      141     {
      142         CDialog::OnSysCommand(nID, lParam);
      143     }
      144 }
      145 
      146 // If you add a minimize button to your dialog, you will need the code below
      147 //  to draw the icon.  For MFC applications using the document/view model,
      148 //  this is automatically done for you by the framework.
      149 
      150 void CFileCrcDlg::OnPaint() 
      151 {
      152     if (IsIconic())
      153     {
      154         CPaintDC dc(this); // device context for painting
      155 
      156         SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
      157 
      158         // Center icon in client rectangle
      159         int cxIcon = GetSystemMetrics(SM_CXICON);
      160         int cyIcon = GetSystemMetrics(SM_CYICON);
      161         CRect rect;
      162         GetClientRect(&rect);
      163         int x = (rect.Width() - cxIcon + 1) / 2;
      164         int y = (rect.Height() - cyIcon + 1) / 2;
      165 
      166         // Draw the icon
      167         dc.DrawIcon(x, y, m_hIcon);
      168     }
      169     else
      170     {
      171         CDialog::OnPaint();
      172     }
      173 }
      174 
      175 // The system calls this to obtain the cursor to display while the user drags
      176 //  the minimized window.
      177 HCURSOR CFileCrcDlg::OnQueryDragIcon()
      178 {
      179     return (HCURSOR) m_hIcon;
      180 }
      181 /******************************************************************************
      182 Public external variables declaration
      183 ******************************************************************************/
      184 const unsigned short crc_table[256]={ 
      185         0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 
      186         0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 
      187         0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 
      188         0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 
      189         0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 
      190         0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 
      191         0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 
      192         0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 
      193         0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 
      194         0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 
      195         0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 
      196         0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 
      197         0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 
      198         0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 
      199         0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 
      200         0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 
      201         0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 
      202         0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 
      203         0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 
      204         0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 
      205         0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 
      206         0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 
      207         0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 
      208         0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 
      209         0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 
      210         0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 
      211         0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 
      212         0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 
      213         0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 
      214         0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 
      215         0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 
      216         0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 
      217 }; 
      218 
      219 
      220 /************************************************
      221 function name: crc 16
      222 using e.g.
      223   crc = 0xffff;
      224   for(i=0;i<bytes_length;i++)
      225   {
      226     crc = crc_16(crc,data_bytes_buf[i]);
      227   }
      228   return crc;
      229 ***
      230 parameter: crc, data
      231 return: crc-16
      232 ************************************************/
      233 unsigned short crc_16(unsigned short crc,  BYTE data)
      234 { 
      235   BYTE da;
      236   
      237   da=(BYTE)(crc/256);
      238   crc<<=8;              //crc=crc*256
      239   crc ^= crc_table[da^data];
      240   return(crc);
      241 }
      242 //0x12a5 --> "12a5"
      243 void swap_word_byte(WORD wd,BYTE *by)
      244 {
      245     unsigned char i,k;
      246     for(i=0;i<4;i++)
      247     {
      248         k = (wd & 0xF000)>>12;
      249         if(9>=k)
      250         {
      251             *by++=k+'0';
      252         }
      253         else if((k>=0x0a)&&(0x0f>=k))
      254         {
      255             *by++=k+0x37;
      256         }
      257         wd<<=4;
      258     }
      259 }
      260 void CFileCrcDlg::OnOpen() 
      261 {
      262     // TODO: Add your control notification handler code here
      263     WORD n;
      264     WORD i;
      265     BYTE szchar[201];
      266     BYTE crc_hex[4],bt;
      267     CString strtemp="";
      268     CFileDialog fileDlg(TRUE);
      269     fileDlg.m_ofn.lpstrFilter="All files (*.*)";
      270     if(fileDlg.DoModal()==IDOK)
      271     {
      272         CFile file(fileDlg.m_ofn.lpstrFile,CFile::modeRead);
      273         UpdateData(TRUE);
      274         m_path += file.GetFilePath();
      275         m_path += "\r\n";
      276         //clear the Edit Dlg
      277         i=0xffff;
      278         memset(szchar,0,201);
      279         while(file.Read(szchar,200))
      280         {
      281             n=0;
      282             while(szchar[n])
      283             {
      284                 i=crc_16(i,szchar[n]);
      285                 n++;
      286             }
      287             memset(szchar,0,201);
      288         }
      289         strtemp.Format("%d",i);
      290         m_crc_dec+=strtemp;
      291         m_crc_dec+="\r\n";
      292         
      293         swap_word_byte(i,crc_hex);
      294         for(i=0;i<4;i++)
      295         {
      296             bt =*(char*)(crc_hex+i);
      297             strtemp.Format("%c",bt);
      298             m_crc_hex+=strtemp;
      299         } 
      300         m_crc_hex += "\r\n";
      301         // write value to edit
      302         SetDlgItemText(IDC_EDIT1_path,m_path);
      303         SetDlgItemText(IDC_EDIT2_crc_hex,m_crc_hex);
      304         SetDlgItemText(IDC_EDIT3_crc_dec,m_crc_dec);
      305         //set the line scroll to the bottom
      306         m_Edit1_path_Ctl.LineScroll(m_Edit1_path_Ctl.GetLineCount());    
      307         m_Edit2_hex_Ctl.LineScroll(m_Edit2_hex_Ctl.GetLineCount());
      308         m_Edit3_dec_Ctl.LineScroll(m_Edit3_dec_Ctl.GetLineCount());
      309         file.Close();
      310     }
      311 }
      312 
      313 void CFileCrcDlg::OnButton1_ClearAll() 
      314 {
      315     // TODO: Add your control notification handler code here
      316     UpdateData(TRUE);
      317     m_crc_dec = "";
      318     m_crc_hex = "";
      319     m_path = "";
      320     UpdateData(FALSE);
      321 }
      322 
      323 void CFileCrcDlg::OnDropFiles(HDROP hDropInfo) 
      324 {
      325     // TODO: Add your message handler code here and/or call default
      326     UINT j,iFileCount;
      327     char file_name[MAX_PATH];
      328     //variable for crc
      329     WORD n;
      330     WORD i;
      331     BYTE szchar[201];
      332     BYTE crc_hex[4],bt;
      333     CString strtemp="";
      334 
      335     iFileCount=::DragQueryFile(hDropInfo,0xffffffff,NULL,0);
      336     
      337     for(j=0;j<iFileCount;j++)
      338     {
      339         ::DragQueryFile(hDropInfo,j,file_name,MAX_PATH);
      340         CFile file(file_name,CFile::modeRead);
      341         UpdateData(TRUE);
      342         //clear the Edit Dlg
      343         i=0xffff;
      344         memset(szchar,0,201);
      345         while(file.Read(szchar,200))
      346         {
      347             n=0;
      348             while(szchar[n])
      349             {
      350                 i=crc_16(i,szchar[n]);
      351                 n++;
      352             }
      353             memset(szchar,0,201);
      354         }
      355         strtemp.Format("%d",i);
      356         m_crc_dec+=strtemp;
      357         m_crc_dec+="\r\n";
      358         
      359         swap_word_byte(i,crc_hex);
      360         for(i=0;i<4;i++)
      361         {
      362             bt =*(char*)(crc_hex+i);
      363             strtemp.Format("%c",bt);
      364             m_crc_hex+=strtemp;
      365         }
      366         m_crc_hex += "\r\n";
      367         
      368         m_path += file.GetFilePath();
      369         m_path += "\r\n";
      370         // write value to edit
      371         SetDlgItemText(IDC_EDIT1_path,m_path);
      372         SetDlgItemText(IDC_EDIT2_crc_hex,m_crc_hex);
      373         SetDlgItemText(IDC_EDIT3_crc_dec,m_crc_dec);
      374         //set the line scroll to the bottom
      375         m_Edit1_path_Ctl.LineScroll(m_Edit1_path_Ctl.GetLineCount());    
      376         m_Edit2_hex_Ctl.LineScroll(m_Edit2_hex_Ctl.GetLineCount());
      377         m_Edit3_dec_Ctl.LineScroll(m_Edit3_dec_Ctl.GetLineCount());
      378         file.Close();
      379     }
      380     ::DragFinish(hDropInfo);
      381     CDialog::OnDropFiles(hDropInfo);
      382 }

       

OK, That is all. Thank you!

 

转载于:https://www.cnblogs.com/lumao1122-Milolu/p/7785040.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值