SendMessage出错?

没原来那个名字长了 2009-07-03 04:00:41
void CMy20Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
HWND hwnd1;
HWND hwnd2;
HWND mainhwnd1;
mainhwnd1=::FindWindow(NULL,"13");
if(mainhwnd1 != NULL)
{
hwnd1 = ::GetDlgItem(mainhwnd1,0x3F8);
hwnd2 = ::GetDlgItem(mainhwnd1,0x3F1);
if (hwnd1 != NULL)
{

CString strLine;
CStdioFile file;
file.Open("a.txt", CFile::modeRead);
file.ReadString(strLine);
file.Close();
::SendMessage (hwnd1, WM_SETTEXT, NULL,(LPARAM)&strLine);
::SendMessage (hwnd2, WM_SETTEXT, NULL,(LPARAM)&strLine);
MessageBox(strLine);
::UpdateWindow (mainhwnd1);
}
}
}
请各位大大帮我看一下上面的代码哪里错了
a.txt文件内容第一行是:张三
第二行是:123456789
我用MessageBox显示是张三正常但123456789不能显示....发送到我自己写的程序文本框中去的话连张三都变成乱码了

...全文
166 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
刚刚凉 2009-07-03
  • 打赏
  • 举报
回复
其实你为啥不把他写到一个程序中阿?如果是两个进程,就是你读文件这是一个进程,显示那个是一个进程,进程间通信只有:套接字(最简单)、管道、内存映射文件。
刚刚凉 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 daviemeng 的回复:]
引用 6 楼 free365 的回复:
要强制两次??,(LPARAM)(LPCSTR)strLine
我现在的问题是我有一文本里面是我自己写的一行一行的文件比如:
张三
123456789
李四
123456789
文本的格式是可以自己定的比如:
_1_张三_123456789
_2_李四_133333333
然后我想要一次读取一个名字跟一个号码然后分别分开来写到我别一个程序的文件输入框中去
注意我有两个输入框一个是写名字的一个是写号码的
然后写完一个再把文件指针向…
[/Quote]
还有
::SendMessage (hwnd1, WM_SETTEXT, NULL,(LPARAM)&strLine); 改成:
::SendMessage (hwnd1, WM_SETTEXT, NULL,*(LPARAM*)&strLine);

在接收方:比如你的消息处理函数中,
LRESULT CdtToolsDlg::OnOperateMessage(WPARAM,LPARAM lp)
{

CString str = *(CString*)(LPARAM*)&lp;
......
}
grf9527 2009-07-03
  • 打赏
  • 举报
回复
要是我,就先分割字符串
getprofile
stok

然后使用socket发送接收数据
send
on_recv

然后显示数据。
setwindowstext
刚刚凉 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 free365 的回复:]
要强制两次??,(LPARAM)(LPCSTR)strLine
我现在的问题是我有一文本里面是我自己写的一行一行的文件比如:
张三
123456789
李四
123456789
文本的格式是可以自己定的比如:
_1_张三_123456789
_2_李四_133333333
然后我想要一次读取一个名字跟一个号码然后分别分开来写到我别一个程序的文件输入框中去
注意我有两个输入框一个是写名字的一个是写号码的
然后写完一个再把文件指针向下一行再写另一个名字跟号码 …
[/Quote]
这样行不:
你别用txt,你用excel,然后两个列被,一个是名字,一个是电话。然后每行为一个用户信息。再用vc对excel进行操作,这样你可以读取一行,一列,某个单元格都行。代码网上有,自己艘。
再就是如果你的数据比较多,那么就放数据库里,比如access,sql server等,然后通过ado对数据库进行操作。

如果你就想用txt,那么你可以这样:

CString strLine;
CStdioFile file;
file.Open("a.txt", CFile::modeRead);
BOOL bNoEnd = TRUE;
BOOL IsName = TRUE;
do
{
bNoEnd =file.ReadString(strLine);
if(IsName) // Name,第一行为名字,第二行为数字,第三行为名字。。。
{
::SendMessage (hwnd1, WM_SETTEXT, NULL,(LPARAM)&strLine);
IsName = FALSE;
}
else //Number
{
::SendMessage (hwnd2, WM_SETTEXT, NULL,(LPARAM)&strLine);
IsName = TRUE;
}
} while( bNoEnd ); //file.ReadString到文件末尾,bNoEnd 为FALSE
file.Close();
  • 打赏
  • 举报
回复
要强制两次??,(LPARAM)(LPCSTR)strLine
我现在的问题是我有一文本里面是我自己写的一行一行的文件比如:
张三
123456789
李四
123456789
文本的格式是可以自己定的比如:
_1_张三_123456789
_2_李四_133333333
然后我想要一次读取一个名字跟一个号码然后分别分开来写到我别一个程序的文件输入框中去
注意我有两个输入框一个是写名字的一个是写号码的
然后写完一个再把文件指针向下一行再写另一个名字跟号码
请问如何实现
刚刚凉 2009-07-03
  • 打赏
  • 举报
回复
file.ReadString(strLine); 改成:
char ch[1024];
file.Read( ch, 1024);
strLine = ch;

我调试过了,好用
一次就把所有的都读上来,这样比你每读一行,就要调用一次ReadString强。当然你开的缓冲区char ch[1024]应该足够大
Allen_zhang 2009-07-03
  • 打赏
  • 举报
回复
不要用cstring,改成char sz[128]试试看
贪玩的老鼠 2009-07-03
  • 打赏
  • 举报
回复
::SendMessage(hwnd2,WM_SETTEXT,0,(LPARAM)(LPCSTR)strLine);
tkminigame 2009-07-03
  • 打赏
  • 举报
回复
这个跟SendMessage没什么关系。
tkminigame 2009-07-03
  • 打赏
  • 举报
回复
CString strLine,strLine2;
CStdioFile file;
file.Open("a.txt", CFile::modeRead);
file.ReadString(strLine);
file.ReadString(strLine2);
file.Close();
strLine=strLine+"\n"+strLine2;
::SendMessage (hwnd2, WM_SETTEXT, NULL,(LPARAM)&strLine);
MessageBox(strLine);

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

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