目录
1、UpdateData 2
2、SetWindowText 3
3、GetBuffer 4
4、GetLength 6
5、OnCancel 6
6、OnOK 7
7、AfxMessageBox 7
8、DoModal 8
1、UpdateData
函数说明
UpdateData() 是MFC的窗口函数,用来刷新数据的。
函数使用
UpdateData()参数只有一个,默认为TRUE。
UpdateData(TRUE)
——刷新控件的值到对应的变量。(外部输入值交给内部变量)
即:控件的值—>变量。
UpdateData(FALSE)
—— 拷贝变量值到控件显示。(变量的最终运算结果值交给外部输出显示)
即:变量值—>控件显示。
例如,窗口中用 DDX_Text(pDX, IDC_EDIT1, m_usercode);
将IDC_EDIT1编辑框控件与m_usercode变量做了关联,如果修改m_usercode之后要想对应控件显示更改,则需要调用UpdateData(FALSE);反之在IDC_EDIT1的oneditchanged()中需要加入UpdateData(TRUE);
简单地说,如果Updatedata(TRUE) == 将控件的值赋值给成员变量,即从窗口编辑框中读入数据;Updatedata(FALSE) == 将成员变量的值赋值给控件,将数据从窗口显示。
实例说明:
例如我们在对话框窗口中添加了3个editbox,然后将前两个的值相加,然后在第三个editbox中输出。
那么我们可以做如下处理:
1。用类向导在3个editbox下添加3个变量,我们命名为m_num1,m_num2,m_num3。
2。然后我们可以多添加一个button控件,在其的click处理事件中,添加以下代码:
UpdateData();// 默认的缺省参数为TRUE,这样,将EditBox控件的内容读入到与其关联的
变量中
m_num3 = m_num1+m_num2;
UpdateData(FALSE);// 将变量的值,输出到与其关联的EditBox中
就可以了
2、SetWindowText
函数功能:该函数改变指定窗口的标题栏的文本内容(如果窗口有标题栏)。如果指定窗口是一个控件,则改变控件的文本内容。然而,SetWindowText函数不改变其他应用程序中的控件的文本内容。
函数原型:BOOL SetWindowText(HWND hwnd,LPCTSTR lpString);
参数:
hWnd:要改变文本内容的窗口或控件的句柄。
lpString:指向一个空结束的字符串的指针,该字符串将作为窗口或控件的新文本。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:如果目标窗口属于当前进程,SetWindowText函数会使WM_SETTEXT消息发送给指定的窗口或控件。然而,如果控件是以WS_CAPTION风格创建的列表框控件,SetWindowText函数将为控件设置文本,而不是为列表项设置文本。
SetWindowText函数不扩展tab字符(ASCII代码0×09),Tab字符以字符‘}’来显示。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;头文件;winuser.h;库文件:user32.lib;Unicode:Windows NT上实现为Unicode和ANSI两种版本。
3、GetBuffer
函数说明
GetBuffer :
说明:MFC函数
所属类:CString ,CBookMark,CBaseAllocator
介绍,CString:GetBuffer;
MSDN对该函数的解释:
This method retrieves a pointer to the internal character buffer for the CString object. The returned LPTSTR is not const and thus allows direct modification of CString contents.
fopen函数失败If nMinBufLength is greate than the length of the current buffer, the call to GetBuffer will destroy the current buffer. Replace it with a buffer of the requested size, and reset the reference count to zero. If you have previously called LockBuffer on this buffer, you will lose the lock on the buffer.
这个函数是为一个CString对象重新获取其内部字符缓冲区的指针,返回的LPTSTR为非const
的,从而允许直接修改CString中的内容!如果nMinBufLength 比当前buffer大,那么就调用ReleaseBuffer函数去释放当前的Buffer,用一个被请求的大小去覆盖这个buffer
重新设定计数器为0,如果在这之前你在这个buffer中调用了LockBuffer,那么你将失去你当前锁定的buffer
The following example demonstrates the use of CString::GetBuffer.
// example for CString::GetBufferCString s( "abcd" ); #ifdef _DEBUGafxDump << "CString s " << s << "\n";
#endifLPTSTR p = s.GetBuffer( 10 );
lstrcpy( p, _T("Hello") ); // directly access CString buffer
s.ReleaseBuffer( );
#ifdef _DEBUGafxDump << "CString s " << s << "\n";
#endif
注意事项
说明:
If you use the pointer returned by GetBuffer to change the string contents, you must call ReleaseBuffer before using any other CString methods.
The address returned by GetBuffer may not be valid after the call to ReleaseBuffer since additional CString operations may cause the CString buffer to be reallocated. The buffer will not be reallocated if you do not change the length of the CString.
The buffer memory will be freed automatically when the CString object is destroyed.
Note that, if you keep track of the string length yourself, you should not append the terminating null character. You must, however, specify the final string length when you release the buffer with ReleaseBuffer. If you do append a terminating null character, you should pass –1 for the length to ReleaseBuffer, which will perform a _tcslen on the buffer to determine its length.
如果你使用这个指向由GetBuffer所改变返回的字符串内容,那么在你使用CString其他CString方法之前你必须调用ReleaseBuffer
在调用ReleaseBuffer函数之后GetBuffer中的内容将无效(也就是销毁)
当这个CString被销毁的时候,这个buffer所占用的内存将被自动释放
注意这个: 如果你知道了这个字符串的长度,你不可以直接添加NULL字符了事,当你使用ReleaseBuffer的时候,无论如何,你必须指定最后的字符串的长度,如果你仅仅添加了一个NULL字符结束符给这个字符串,你应该给ReleaseBuffer传递一个-1, 当这个函数结束的时候,_tcslen 将决定这个buffer的长度
使用示例
例子:
// example for CString::GetBuffer
CString s( "abcd" );//定义一个CString s并且初始化为abcd
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论