| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 818 人关注过本帖
标题:RichEdit控件 追加新行
只看楼主 加入收藏
smartdog
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-1-9
结帖率:0
收藏
已结贴  问题点数:20 回复次数:12 
RichEdit控件 追加新行
各位前辈:

我用Win32 api 写了一个UI,使用RichEdit显示文本。

第一次添加文本时 SendMessage(hwndrich, EM_SETTEXTEX, (WPARAM)&st, (LPARAM)text);

之后再添加文本我想 换一行添加,但是不知道用什么方法了。

随着添加的行数增加,如何实现自动滚动,并且最先添加的自动向上滚动 ?


谢谢!
搜索更多相关主题的帖子: 如何 
2014-01-09 23:28
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:7 
richedit控件有设置横向滚动条和纵向滚动条的选项  简单点 设置一个both 就可以
换行的问题  首先设置控件允许多行输入(默认应该就是多行)
其次  如果是用户界面  用户输入回车应该自动换行  如果是后台添加  发送回车、换行符即可

DO IT YOURSELF !
2014-01-10 08:40
smartdog
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-1-9
收藏
得分:0 
我试了很多办法,总是不能解决。只能将工程上传了。

VS 2010工程,麻烦帮帮小弟
Exec.zip (8.77 KB)
2014-01-12 20:40
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:7 
我只能是纯粹来看看
2014-01-15 11:40
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:7 
我试了很多办法,总是不能解决。
----- 2楼说的你试过了吗?我试过,行!
2014-01-15 12:39
smartdog
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-1-9
收藏
得分:0 
我在MFC 和 Winform 中很方便的换行,直接在字串后增加 “\r\n”就行,但是在Win32API 中我还真找不到方法
2014-01-15 18:46
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include <windows.h>
#include <stdio.h>

int main()
{

    wchar_t s[]=L"我是第一行数据\n我是第二行数据";
    int length1=wcslen(s);
    //printf("字符串长度为%d\n",length1);
    if (WinExec("c:\\windows\\notepad.exe",SW_NORMAL)>31)
    {
        //printf("成功打开记事本进程\n");
        HWND notepadhandle= FindWindow(L"notepad",NULL);
        if (notepadhandle!=0)
        {
            //printf("能够找到记事本主进程主窗体\n");
            HWND childhandle=FindWindowEx(notepadhandle,0,L"edit",NULL);
            if (childhandle!=0)
            {
                //printf("能够找到记事本编辑框窗体\n");
                int i=0;
                while (i<length1)
                {
                    //SendMessage(childhandle,WM_CHAR,s[i]&0XFF,0);
                    SendMessage(childhandle,WM_CHAR,s[i],0);
                    i=i+1;
                }
            }
        }

    }
    return 0;
}


DO IT YOURSELF !
2014-01-15 21:26
smartdog
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-1-9
收藏
得分:0 
参考七楼的代码,我修之后代码如下:

程序代码:
BOOL AppendTextToRich(TCHAR *text, int len)
{
    HWND hwndrich=GetDlgItem(hWnd, IDC_RICHEDIT2_LOG);      
    if (hwndrich != INVALID_HANDLE_VALUE)
    {
        int len = wcslen(text);
        int i = 0;
        do
        {
            SendMessage(hwndrich, WM_CHAR, text[i++], 0);
        } while (i < len);

        //自动滚动到最后一行
        SendMessage(hwndrich, WM_VSCROLL, SB_BOTTOM, 0);
    }
}


结果是完全没有显示,是不是我还有哪些地方不正确?
但是我将RichEdit控件的只读属性去掉之后就可以显示了,但是还是做不到换行。

[ 本帖最后由 smartdog 于 2014-1-15 22:15 编辑 ]
2014-01-15 22:06
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 8楼 smartdog
我这样写没问题呢、
程序代码:
#include <windows.h>
#include <stdio.h>

void AppendTextToRich(TCHAR *text, int len,HWND childhandle)
{
    int i=0;
    while(i<len)
    {
        SendMessage(childhandle, WM_CHAR, text[i++], 0);
    }

}





int main()
{

    wchar_t s[]=L"我是第一行数据\n我是第二行数据";
    int length1=wcslen(s);
    //printf("字符串长度为%d\n",length1);
    if (WinExec("c:\\windows\\notepad.exe",SW_NORMAL)>31)
    {
        //printf("成功打开记事本进程\n");
        HWND notepadhandle= FindWindow(L"notepad",NULL);
        if (notepadhandle!=0)
        {
            //printf("能够找到记事本主进程主窗体\n");
            HWND childhandle=FindWindowEx(notepadhandle,0,L"edit",NULL);
            if (childhandle!=0)
            {
                AppendTextToRich(s,length1,childhandle);
            }
        }

    }
    return 0;
}




DO IT YOURSELF !
2014-01-15 22:21
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
SORRY  我没想到edit、和richedit差别如此之大

你先问问度娘  如果我找到解决办法会给你贴出来的

DO IT YOURSELF !
2014-01-15 23:21
快速回复:RichEdit控件 追加新行
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020173 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved