一个小问题本来是想通过调用一个全局函数给一个rich edit控件动态赋直的.下面是我在全局函数里面的代码
CRichEditCtrl* RR=(CRichEditCtrl*)GetDlgItem(IDC_RICHEDIT1);
RR->SetSel(RR->GetTextLength(),RR->GetTextLength());
RR->ReplaceSel("str");提示GetDlgItem函数少一个参数,即需要当前对话框的句柄.我不知道怎么获得,但是来了一个星期了,也没有人能真正告诉我怎么获得,
都是一些作用域错误的脚本给我看,
难道真没人知道吗?我是初学者,但是大家回答问题也太没耐心了啊,都是编译通不过的代码,跪求真知者
CRichEditCtrl* RR=(CRichEditCtrl*)GetDlgItem(IDC_RICHEDIT1);
RR->SetSel(RR->GetTextLength(),RR->GetTextLength());
RR->ReplaceSel("str");提示GetDlgItem函数少一个参数,即需要当前对话框的句柄.我不知道怎么获得,但是来了一个星期了,也没有人能真正告诉我怎么获得,
都是一些作用域错误的脚本给我看,
难道真没人知道吗?我是初学者,但是大家回答问题也太没耐心了啊,都是编译通不过的代码,跪求真知者
请大家指点我
比如你的对话框类叫 CMyDialog
定义一个全局的 CMyDialog *g_pDlg ;
把你的“唯一的”对话框的地址赋值给 g_pDlg ; g_pDlg->m_hWnd 就是句柄。
这句话正是我想要的啊,
请问怎么表达啊
RR->SetSel(RR->GetTextLength(),RR->GetTextLength());
RR->ReplaceSel("str");虽然功能可以实现,但总是感觉这种代码很别扭。最好不要让外面直接访问对话框中的控件,可以给对话框添加一个 SetRichEditText 方法
通过这个方法动态改变控件的文本。
AfxGetapp()-〉m_pMainWnd为对话框的指针我建议在你的全局函数的参数中传递一个对话框指针:
myfunc(cdialog *pdia)
全局变量在当前工程中所有地方都可用。
在任意一个 cpp 文件中(当然要选个合适的地方)定义 CMyDialog *g_pDlg = 0 ;
// 定义,并赋初值 0 。定义变量的同时赋初值是个好习惯 :)在想要用的地方声明一下 // 比如你的“唯一的”对话框定义的地方
extern CMyDialog *g_pDlg ; // 这样就可以用了
RR->SetSel(RR->GetTextLength(),RR->GetTextLength());
RR->ReplaceSel("str");我是说这种代码,就算是正确的,功能可以实现,也不好。
在一个类的外面控制一个类里面的控件不是什么好习惯。实在不行的话,你干脆把所有代码都贴出来吧……
这样反倒省事。
void yourfunc(CYourDlg *pDlg)
{
;
}
定义 CMyDialog *g_pDlg = 0 ;
// 定义,并赋初值 0 。定义变量的同时赋初值是个好习惯 :)在想要用的地方声明一下 // 比如你的“唯一的”对话框定义的地方
extern CMyDialog *g_pDlg ; // 这样就可以用了
另外这句话,还是没有获得当前对话框的句柄啊,因为你只是初试化指向NULL了吧(指针好象不能副0),大哥,你也是一知半解啊, 不过还是谢谢你,
那些高手虽厉害,可是一点也不热心,也不负责啊, 浅点两句,搞得我这里火烧眉毛啊
void yourfunc(CYourDlg *pDlg)
{
;
}这个方法我也想过了,但是我的全局函数 是又动态连接库函数回调的,没法加参数,否则格式不对啊
CRichEditCtrl* RR=(CRichEditCtrl*)GetDlgItem(IDC_RICHEDIT1);
RR->SetSel(RR->GetTextLength(),RR->GetTextLength());
RR->ReplaceSel("str");你在全局函数中用上面的代码,肯定通不过的!
GetDlgItem()是窗口函数,要么在窗口类或其字类中使用,要么要指定窗口句柄。CTestWndDlg* pDlg = (CTestWndDlg*)AfxGetMainWnd();
CRichEditCtrl* RR = (CRichEditCtrl*)pDlg->GetDlgItem(IDC_RICHEDIT1);
RR->SetSel(RR->GetTextLength(), RR->GetTextLength());
RR->ReplaceSel("str");
{
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need. CMyDialog dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
} // Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}
在你的对话框的OnInitDialog中,对g_myhwnd赋值:g_myhwnd = this->m_hwnd;
在你的全局函数中加入:
if (g_myhwnd != NULL)
{
CRichEditCtrl* RR=(CRichEditCtrl*)GetDlgItem(g_myhwnd, IDC_RICHEDIT1);
RR->SetSel(RR->GetTextLength(),RR->GetTextLength());
RR->ReplaceSel("str");
}
CXXXDlg *pDlg = (CXXXDlg *)AfxGetMainWnd();
pDlg->GetDlgItem();如果你的对话框不是主窗口, 只是弹出的另一窗口
那 AfxGetMainWnd()失效, 你必须将它的指针另外储存起来
全局变量就是一种方法
xxhfortrue(红叶) 说的应该可以了吧 !
在你的对话框的OnInitDialog中,对g_myhwnd赋值:g_myhwnd = this->m_hwnd;
CRichEditCtrl* RR = (CRichEditCtrl*)pDlg->GetDlgItem(IDC_RICHEDIT1);
RR->SetSel(RR->GetTextLength(), RR->GetTextLength());
RR->ReplaceSel("str");
这段代码也是对的,我刚刚差点写对了,我写成
CTestWndDlg* pDlg = (CTestWndDlg*)AfxGetMainWnd();
CRichEditCtrl* RR = (CRichEditCtrl*)GetDlgItem(pDlg->GetSafeWnd(),IDC_RICHEDIT1);
RR->SetSel(RR->GetTextLength(), RR->GetTextLength());
RR->ReplaceSel("str");另外我想请教一下rich edit里面的内容动态现实有没有什么注意事项,比如说对话框需不需要domodule一下