【100分求救】VC 使用API函数获取edit控件中的内容出错

Monkey_D_Luffy 2013-01-15 03:18:51
环境:XP,VS2005,C
需求:我想使用API函数取得名为ID为IDC_EDT_TEXT的edit控件中的内容,并在messageBox中提示
问题:5行代码,出了两个错误,错误都在代码中用注释的方式写出来了,请大家看看

void addText(HWND hDlg){
//增加文本的函数
static TCHAR *TC;
int nMax=GetWindowTextLength(hDlg);
HWND hWnd= ::GetDlgItem(hDlg,IDC_EDT_TEXT); //获取edit控件中的内容,但是出错?
//上行error: 'GetWindowTextA' : cannot convert parameter 2 from 'TCHAR *' to 'LPSTR'
GetWindowTextA(hWnd,TC,nMax);
MessageBoxA(hDlg,(LPSTR)TC,TEXT("提示"),NULL);
//上行error:'MessageBoxA' : cannot convert parameter 3 from 'const wchar_t [3]' to 'LPCSTR'
}

诚心求救,每帖必结,要想好人来,结帖必须快!
...全文
279 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 5 楼 lvlufeng 的回复:
引用 1 楼 akirya 的回复:C/C++ code?12345678void addText(HWND hDlg){ int nMax=GetWindowTextLength(hDlg); HWND hWnd= ::GetDlgItem(hDlg,IDC_EDT_TEXT); //获取edit控件中的内容,但是出错? TCHAR *TC = n……
new对应的是delete malloc对应的是free
cchvsgame 2013-01-15
  • 打赏
  • 举报
回复
'GetWindowText的A去了
MessageBox的A去了

就好了
lee_鹿游原 2013-01-15
  • 打赏
  • 举报
回复
引用 8 楼 lvlufeng 的回复:
尤其感谢Mr_Li,我这两天每个问题都得到你的帮助,谢谢您!
你太抬举我了.. 甭客气..
Monkey_D_Luffy 2013-01-15
  • 打赏
  • 举报
回复
尤其感谢Mr_Li,我这两天每个问题都得到你的帮助,谢谢您!
Monkey_D_Luffy 2013-01-15
  • 打赏
  • 举报
回复
谢谢大家的回复,一下子这么多人回复,太感谢了 可能是我的字符集有问题,使用其他坛友的代码虽然也能弹出对话框,但是是乱码 目前使用4楼的回复,修改代码后为:

void addText(HWND hDlg){
	
	int nMax=GetWindowTextLength(hDlg); 
    HWND hWnd= ::GetDlgItem(hDlg,IDC_EDT_TEXT);  
    //TCHAR *TC = new TCHAR[nMax+1];
	TCHAR TC[200];
    GetWindowText(hWnd,TC,sizeof(TC)*sizeof(char)); //获取edit控件中的内容
    MessageBox(hDlg,TC,_T("提示"),NULL); 
}
能正常显示输入的字符串了, 前面说的卡顿问题是我自己其他代码的原因,没有处理好按钮事件,谢谢各位了,结帖,回者有分,因为人比较多,这些只能是意思意思了
yellowaygj 2013-01-15
  • 打赏
  • 举报
回复
引用 5 楼 lvlufeng 的回复:
引用 1 楼 akirya 的回复:C/C++ code?12345678void addText(HWND hDlg){ int nMax=GetWindowTextLength(hDlg); HWND hWnd= ::GetDlgItem(hDlg,IDC_EDT_TEXT); //获取edit控件中的内容,但是出错? TCHAR *TC = n……
TC先赋NULL,再删除。
Monkey_D_Luffy 2013-01-15
  • 打赏
  • 举报
回复
引用 1 楼 akirya 的回复:
C/C++ code?12345678void addText(HWND hDlg){ int nMax=GetWindowTextLength(hDlg); HWND hWnd= ::GetDlgItem(hDlg,IDC_EDT_TEXT); //获取edit控件中的内容,但是出错? TCHAR *TC = new TCHAR[nMax+1]; ……
谢谢你的回复,用了你的代码之后达到我的需求,但是弹完这个messageBox之后,程序就死掉了,卡住了 我因为都是用C的,我改成了如下代码:

void addText(HWND hDlg){
	
    int nMax=GetWindowTextLength(hDlg); 
    HWND hWnd= ::GetDlgItem(hDlg,IDC_EDT_TEXT);  //获取edit控件中的内容,但是出错?
      //TCHAR *TC = new TCHAR[nMax+1];
    TCHAR *TC = (TCHAR*)malloc(nMax+1);
    GetWindowText(hWnd,TC,nMax); 
    MessageBox(hDlg,TC,_T("提示"),NULL); 
    delete TC;
}
原来是没有初始化, 请问为什么运行之后会卡死在那里,只有ctrl+alt+del结束才行
fengqiao1999 2013-01-15
  • 打赏
  • 举报
回复
GetWindowTextA(hWnd,TC,nMax); 改为: static char TC[1024]; GetWindowTextA(hWnd,TC,sizeof(TC)*sizeof(char)); MessageBoxA(hDlg,(LPSTR)TC,TEXT("提示"),NULL); 改为 MessageBoxA(hDlg,TC,"提示",NULL);
jimette 2013-01-15
  • 打赏
  • 举报
回复
static TCHAR TC【1024】;
lee_鹿游原 2013-01-15
  • 打赏
  • 举报
回复

// unicode字符集
void addText(HWND hDlg)
{
	static TCHAR *TC;
	int nMax=GetWindowTextLength(hDlg); 
	HWND hWnd= ::GetDlgItem(hDlg,IDC_EDT_TEXT);
	GetWindowText(hWnd,TC,nMax); 
	MessageBox(hDlg,TC,TEXT("提示"),NULL); 
}

  • 打赏
  • 举报
回复
void addText(HWND hDlg){
	int nMax=GetWindowTextLength(hDlg); 
	HWND hWnd= ::GetDlgItem(hDlg,IDC_EDT_TEXT);  //获取edit控件中的内容,但是出错?
	TCHAR *TC = new TCHAR[nMax+1];
	GetWindowText(hWnd,TC,nMax); 
	MessageBox(hDlg,TC,_T("提示"),NULL); 
	delete TC;
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧