1. 小视频教程 > 知识库 >

updatedata,UpdateData和UpdateData的区别

本文目录索引

1,UpdateData和UpdateData的区别

当你使用了ClassWizard建立了控件和变量之间的联系后:当你修改了变量的值,而希望对话框控件更新显示,就应该在修改变量后调用UpdateData(FALSE);如果你希望知道用户在对话框中到底输入了什么,就应该在访问变量前调用UpdateData(TRUE)。
UpdateData(true);
用窗体上控件中的内容来更新和控件相关连的变量的值(只能更新value类型的变量)
例如:你在你的窗体中有一个Edit控件,为这个控件关联了CString类型的变量m_strName;
你在控件中添入内容之后,必须调用UpdateData(true);才能把你添入的内容传给m_strName这个变量
UpdateData(false);
和上面的正好相反,还是以上面的Edit为例,当你在程序中改变了m_strName变量的内容的时候,如果你想让那个Edit也显示更新后的m_strName,就必须调用UpdateData(false);
这样在你的Edit中才能显示更新完的变量的值!

UpdateData和UpdateData的区别

2,UpdateData和UpdateData的区别

当你使用了ClassWizard建立了控件和变量之间的联系后:当你修改了变量的值,而希望对话框控件更新显示,就应该在修改变量后调用UpdateData(FALSE);如果你希望知道用户在对话框中到底输入了什么,就应该在访问变量前调用UpdateData(TRUE)。
1、
UpdateData(true);
用窗体上控件中的内容来更新和控件相关连的变量的值(只能更新value类型的变量)
例如:你在你的窗体中有一个Edit控件,为这个控件关联了CString类型的变量m_strName;
你在控件中添入内容之后,必须调用UpdateData(true);才能把你添入的内容传给m_strName这个变量

UpdateData(false);
和上面的正好相反,还是以上面的Edit为例,当你在程序中改变了m_strName变量的内容的时候,如果你想让那个Edit也显示更新后的m_strName,就必须调用UpdateData(false);
这样在你的Edit中才能显示更新完的变量的值!
2、

UpdateData(TRUE)是将控件的状态传给其关联的变量,当然你要为控件关联上变量才行。
UpdateData(FALSE)是将控件的关联变量的值传给控件并改变控件状态。
UpdateData刷新的是当前对话框。

UpdateData(true);//用于将屏幕上控件中的数据交换到变量中。
UpdateData(false);//用于将数据在屏幕中对应控件中显示出来。

3、edit控件,与控件关联的变量m_edit,当程序执行,你在控件中输入数21,要把21传到m_edit,UpdateData(true).如果把m_edit修改,要传到控件UpdateData(false);

另外注意一点:
使用UpdateData()函数时,当前界面上所有绑定了的变量(即通过MFC ClassWizard给控件添加了对应的变量)都会被UpdateData(TRUE)更新成对应控件中的内容;同样所有绑定了变量的控件中的内容也会UpdateData(FALSE)更新成对应变量中的内容。
要接受用户的输入就true,
要输入结果给用户就flase

数据量不多的话,最好用SetDlgItemText()和GetDlgItemText()

3,在VC++中UpdateData(TRUE)的作用是什么?

  UpdateData(TRUE)中为TRUE时, 更新控件值,为FALSE时,用控件值更新窗口显示;
  可以为对话框上的控件设置对应的变量,如文本框可以设置对应的CString变量,但是在程序中修改文本框的内容时,对应的CString变量不会随着改变,需要调用UpdateData(TRUE)来改变变量。类似的,程序中改变了CString变量,也需要调用UpdateData(FALSE)也改变文本框的内容。
  为TRUE时,将控件里显示的值传给变量;为FALSE时,将变量值传给控件显示.

4,GetDlgItem的用法

CButton* btn = (CButton*)GetDlgItem(IDC_BUTTON_SEND); btn-SetWindowTextW(_T("hello"));如果想得到其他对话框中的控件,用GetDlgItem(hwnd,IDD); CWnd::GetDlgItem(int nID) 这个是一个类成员函数,可使用CWnd* pWnd = GetDlgItem(ID_XXX); 而HWND GetDlgItem( HWND hDlg, // handle of dialog box int nIDDlgItem // identifier of control); 是一个sdk的函数 两个的主要区别是用的地方不一样 一个参数的是在窗口中调用的函数,两个参数的是在平台SDK中调用的 你在对话框类里面调用GetDlgItem(IDC_BOARD_SIZE),就是调用的类成员函数CWnd::GetDlgItem 获得某个控件的句柄GetDlgItem(IDC_BOARD_SIZE)-m_hWnd就可以了 如果要用到第二种用法,要这样 ::GetDlgItem(this- m_hWnd,IDC_BOARD_SIZE);效果一样的 那个IDC_BOARD_SIZE是你某个控件的id, 如果HWND GetDlgItem( HWND hDlg, // handle of dialog box int nIDDlgItem // identifier of control);的话, 第一个参数是窗体的句柄,第二个参数是某个控件的ID,和IDC_BOARD_SIZE是一个意思 GetDlgItem(IDC_..),GetDlgItem(HWND hWnd, GetDlgItem(IDC_..)是一个非静态方法,意思是你对话框内获取该控件指针,所以这里不需要获取对话框句柄,也就是说你如果在非对话框窗口里面调用这个方法就肯定会出错 GetDlgItem(HWND hWnd, IDC_..)是一个静态方法,它是一个让你指定从哪个对话框里获取控件指针 举个例子:你调用了上厕所这个函数,如果你在家里的话肯定是在自己家里上厕所,所以不需要知道在哪里上厕所(hwnd) 如果你在室外那么上厕所就一定要选一个地方(hwnd)。 如果说你上厕所的地方都不是一个房间,那么肯定会报错嘛,因为你在随地大小便,哈哈所以你先搞清楚这两个函数的使用环境区别

5,MFC,这个写成if怎么写呢

CButton*radio=(CButton*)GetDlgItem(IDC_RADIO1);
CButton*radio1=(CButton*)GetDlgItem(IDC_RADIO2);
CButton*radio2=(CButton*)GetDlgItem(IDC_RADIO3);
if(radio->GetCheck()==BST_CHECKED)
{
GetDlgItem(IDC_10)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_10H)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_23H)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_23)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_3H)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_3)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC )->ShowWindow(SW_HIDE);
}
else if(radio1->GetCheck()==BST_CHECKED)
{
GetDlgItem(IDC_10)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_10H)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_23H)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_23)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_3H)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_3)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC )->ShowWindow(SW_HIDE);
}
else if(radio2->GetCheck()==BST_CHECKED)
{
GetDlgItem(IDC_10)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_10H)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_23H)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_23)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_3H)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_3)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC )->ShowWindow(SW_HIDE);
}

6,怎样用VC++6.0编写简单的计算器窗口程序?需要具体步骤和源代码

#include
struct s_node
{
int data;
struct s_node *next;
};
typedef struct s_node s_list;
typedef s_list *link;
link operator=NULL;
link operand=NULL;

link push(link stack,int value)
{
link newnode;

newnode=(link) malloc(sizeof(s_list));
if(!newnode)
{
printf("\nMemory allocation failure!!!");
return NULL;
}
newnode->data=value;
newnode->next=stack;
stack=newnode;
return stack;
}

link pop(link stack,int *value)
{
link top;
if(stack !=NULL)
{
top=stack;
stack=stack->next;
*value=top->data;
free(top);
return stack;
}
else
*value=-1;
}

int empty(link stack)
{
if(stack==NULL)
return 1;
else
return 0;

}

int is_operator(char operator)
{
switch (operator)
{
case '+': case '-': case '*': case '/': return 1;
default:return 0;
}
}

int priority(char operator)
{
switch(operator)
{
case '+': case '-' : return 1;
case '*': case '/' : return 2;
default: return 0;
}
}

int two_result(int operator,int operand1,int operand2)
{
switch(operator)
{
case '+':return(operand2+operand1);
case '-':return(operand2-operand1);
case '*':return(operand2*operand1);
case '/':return(operand2/operand1);
}
}

void main()
{
char expression[50];
int position=0;
int op=0;
int operand1=0;
int operand2=0;
int evaluate=0;

printf("\nPlease input the inorder expression:");
gets(expression);

while(expression[position]!='\0'&&expression[position]!='\n')
{
if(is_operator(expression[position]))
{
if(!empty(operator))
while(priority(expression[position])data)&&
!empty(operator))
{
operand=pop(operand,&operand1);
operand=pop(operand,&operand2);
operator=pop(operator,&op);
operand=push(operand,two_result(op,operand1,operand2));
}
operator=push(operator,expression[position]);
}
else
operand=push(operand,expression[position]-48);
position++;
}
while(!empty(operator))
{
operator=pop(operator,&op);
operand=pop(operand,&operand1);
operand=pop(operand,&operand2);

operand=push(operand,two_result(op,operand1,operand2));
}
operand=pop(operand,&evaluate);
printf("The expression [%s] result is '%d' ",expression,evaluate);
getch();
}
百度搜的

7,如何用VC++6.0做一个计算器 在线等! 急用

哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥呀 染发方法反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反复发给哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡方法反反复复反反复复反反复复反反复复佛浦东分配给搜到的等等等等等等等等等等发给哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥等等等等等等等等等等等等等等等等等等等等等等等等等等等等设施反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复反反复复覆盖广泛规范共分发给法国风格法国风格飞哥飞哥飞哥发给法官法规范共分规范共分规范共分订购方式的看见发多少了可观福利社特价惠特克讨论和一头iweyteiowtyhejk时间跨度嘎斯的看见俺是个大事大家看撒大哥的撒鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡撒旦嘎斯大家卡上的噶师傅家咖啡馆的师傅就看到事故发生的技术的规范是大家分公司的附件是蛋糕的时间的师傅给对方家就积极解决斤斤计较斤斤计较就积极解决斤斤计较斤斤计较就积极解决斤斤计较斤斤计较极leasdjas谁打扫打扫打扫打扫打扫大打扫打扫打扫的

8,VC MFC对话框有多个Edit控件,只更新其中一个Edit控件的显示(已设置对应的int变量),

那只有SetWindowText等类似的API,SetDlgItemText和SetDlgItemInt后面其实也是调用的SetWindowText

SetWindowText调用的是
SendMessage(hWnd,WM_SETTEXT,0,text);

SetWindowText的源码(from reactos)
BOOL WINAPI
SetWindowTextW(HWND hWnd,
LPCWSTR lpString)
{
PWND pwnd;

pwnd = ValidateHwnd(hWnd);
if (pwnd)
{
if (!TestWindowProcess(pwnd))
{
/* do not send WM_GETTEXT messages to other processes */
return (DefWindowProcW(hWnd, WM_SETTEXT, 0, (LPARAM)lpString) >= 0);
}
return (SendMessageW(hWnd, WM_SETTEXT, 0, (LPARAM)lpString) >= 0);
}
return FALSE;
}

9,1,mfc怎么把编辑框内的输入的数字存入int 2,如何把数字输出到编辑框内

两个方法:
第一种【用控件变量,运行快】:给这个Edit添加一个CEdit变量m_edit1。
在你需要这个编辑框的内容的时候,调用CString str=m_edit1.GetWindowText();
然后 int h=_tstoi(str);
而如果把一个int输出到编辑框,可以这样:
int h;
//此处为h赋值
CString str;
str.Format(_T("%d"),h);
m_edit1.SetWindowText(str);

第二种【系统自动的,很简单】:给这个Edit添加一个int类型变量 m_edit1;
在需要这个数的时候,UpdateData(TRUE);
在需要输出到编辑框的时候,UpdateData(FALSE);

------------------------------------------------------------------------------------------------------------------------------
讲一下,UpdateData()是对话框的数据交换函数,括号里填TRUE或不填,都代表从对话框获取,而为FALSE的时候,就是把当前的变量值发送回对话框。每次调用UpdateData()函数,都会针对对话框上所有的值类型变量控件交换数据,比如你有三个EDIT控件,那么调用UpdateData(TRUE)的时候,实际上获取了这三个控件的内容到对应的变量里,所以控件较多的时候,如果你只想获取某一个控件的状态,那么调用UpdateData()很慢。反而用GetWindowText()等函数反而很快。