我在对话框程序中调用了一个输入对话框,要求用户输入信息。但我想调用之前改变输入对话框中的静态文本的内容,如何做到?

dreamingcolt 2004-12-09 10:31:03
我在对话框程序中调用了一个输入对话框,要求用户输入信息。但我想调用之前改变输入对话框中的静态文本的内容,如何做到?
代码如下:
void CMemory_key_testDlg::OnUnlockUsrPin()
{
// TODO: Add your control notification handler code here
char newUsrPin[16];
char unlockPin[16];
CChangUserPin m_hChangUserPin;
int iRet = m_hChangUserPin.DoModal();
(GetDlgItem( IDC_STATIC_oldPin ))->SetWindowText( "Test111" );//<---在此位置改变文本内容

switch( iRet )
{
case -1:
MessageBox( "对话框不能被创建起来!", "错误信息", MB_OK | MB_ICONEXCLAMATION );
return;
case IDABORT:
return;
case IDOK:
//接受cstring值,并传入函数参数中
strncpy(newUsrPin,(LPCTSTR)m_hChangUserPin.m_OldPin,sizeof(newUsrPin));
strncpy(unlockPin,(LPCTSTR)m_hChangUserPin.m_NewPin,sizeof(unlockPin));
break;
case IDCANCEL:
return;
default:
return;
}

rv = NHTKEY_UnlockUsrPin(hKey,newUsrPin,unlockPin);
if( NHTKEY_SUCCESS != rv)
{
m_list.ResetContent();
m_list.AddString("NHTKEY_UnlockUsrPin error...\n");
}
else
{
m_list.ResetContent();
m_list.AddString("NHTKEY_UnlockUsrPin OK...\n");
(GetDlgItem( IDC_display ))->SetWindowText( "UnlockUsrPin OK!" );
}

return;
}

编译没问题,运行未见改变效果,而且出错。

诸位高手,帮我看看。
...全文
126 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
llihua 2004-12-10
1、想办法在主程序对话框和新建对话框之间通信。

比较好的一个办法是,在新建对话框的类中创建一个公共变量用于通信。

class CChangUserPin : public CDialog
{
//...
public:
CString m_strSender;
}

然后在主程序中这样使用新建对话框:

CChangUserPin ChangUserPin;

ChangUserPin.m_strSender = "我";
ChangUserPin.DoModal();
//...


2、在新建对话框创建之后以及显示之前的这段时间里,做你的事情。

比如,在新建对话框中重写OnInitDialog函数,或者定义WM_SHOWWINDOW消息处理。

BOOL COpenUrlDialog::OnInitDialog()
{
CDialog::OnInitDialog();

// TODO: 在此添加额外的初始化
if(m_strSender == "我")
GetDlgItem(IDC_STATIC_OLDPIN)->SetWindowText("我打开的");
else if(m_strSender == "你")
GetDlgItem(IDC_STATIC_OLDPIN)->SetWindowText("你打开的");
else
GetDlgItem(IDC_STATIC_OLDPIN)->SetWindowText("他打开的");

GetDlgItem(IDC_XXX)->SetFocus();
return FALSE; // return TRUE unless you set the focus to a control
}

或者

void COpenUrlDialog::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);

// TODO: 在此处添加消息处理程序代码
GetDlgItem(IDC_STATIC_OLDPIN)->SetWindowText("文本");
GetDlgItem(IDC_XXX)->SetFocus();
}
回复
chuanke 2004-12-09
把(GetDlgItem( IDC_STATIC_oldPin ))->SetWindowText( "Test111" );
放到CChangUserPin 的OnInitDialog()中去
回复
bohut 2004-12-09
放到新建的对话框的OnInitDialog()函数里面!
回复
dreamingcolt 2004-12-09
我试过了,(GetDlgItem( IDC_STATIC_oldPin ))->SetWindowText( "Test111" );
方法可以改变当前的对话框中的文本,但不能改变新创建的对话框。
我想改变新创建的对话框如何做到?
回复
Kudeet 2004-12-09
把代码放到OnInitDialog里
回复
bobob 2004-12-09
方便的话把工程发过来我帮你看
Water@newsoftinc.com.cn
回复
dreamingcolt 2004-12-09
CChangUserPin 中没有OnInitDialog()函数!
而且我想动态的改变文本内容。不同函数调用此对话框时显示内容不同。
谁知道?
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-12-09 10:31
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……