新手求助SDK RichEdit4.1版控件设置垂直文本问题

ding_01 2019-02-14 04:40:12
最近学习SDK,要调用msftedit.dll中的RichEdit4.1版实现垂直文本显示,看MSDN关于垂直文本风格是:ES_VERTICAL,但仅限远东地区文字,个人查了一下我的电脑系统中的msftedit.dll版本是简体中文版,完全符合要求。个人之前用MFC已经成功实现了垂直文本,说明此dll文件问题。但是用sdk编写,没有效果,成功编译链接后,还是横排文本,完全没有效果。请哪位大侠有闲暇之余给予指点一二,谢谢了。个人vc6.0编译通过,为此个人还特意升级了vc6.0的.h文件与Lib文件,使之支技4.1版本,个人又改动一下用vs2008编译链接通过,并运行后,还是如此,是横排,没有垂直文本效果,不知道是因为什么 ?为什么MFC能够成功,但是sdk不行,我的程序中肯定缺什么。请高人和大侠给予指点迷津,谢谢。
下面是我的代码。新人一开始没有太多的积分,只有20分,如果解决,定全部奉上。

#include <windows.h>
#include <richedit.h>
//#include <commctrl.h>
//#pragma comment(lib,"comctl32.lib")

TCHAR szTitle[20]="第二个视窗演示程序"; //窗口的标题。
TCHAR szWindowClassName[10]="Simple"; //窗口的名称。
HMODULE hRichEditDll = NULL;

ATOM MyRegisterClass(HINSTANCE); //注册窗口类
BOOL InitInstance(HINSTANCE,int); //初始化窗口
int Run(); //消息循环
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//消息理函数

int WINAPI WinMain(HINSTANCE hInstance, //指针变量,当前应用程序的实例句柄
HINSTANCE hPrevInstance,//指向当前应用程序的前一个实例句柄
LPSTR lpCmdLine, //指向本程序命令行字符串的指针
int nCmdShow) //本程序窗口显示方式的标志
{
if(!MyRegisterClass(hInstance))//注册窗口类
{
MessageBox(NULL,TEXT("This program requires Windows NT!"),
szWindowClassName,MB_ICONERROR);
return 0;
}
if (!InitInstance (hInstance,nCmdShow)) //初始化窗口
{
return FALSE;
}
return Run();
}

//注册窗口类
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wndclassex;//定义一个窗口类,其实是一个结构体。

wndclassex.lpszClassName =szWindowClassName;//窗口名
wndclassex.style = CS_HREDRAW | CS_VREDRAW;//窗口式样
wndclassex.lpfnWndProc = WndProc;//窗口处理函数
wndclassex.cbClsExtra = 0;//分配给窗口类结构之后的额外字节数,一般为0
wndclassex.cbWndExtra = 0;//分配给窗口实例之后的额外字节数,一般为0
wndclassex.hInstance = hInstance;//实例句柄
wndclassex.hIcon = LoadIcon(NULL, IDI_APPLICATION);//窗口图标
wndclassex.hCursor = LoadCursor(NULL,IDC_ARROW);//光标
wndclassex.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);//背景
wndclassex.lpszMenuName = NULL;//菜单
wndclassex.hIconSm = LoadIcon(wndclassex.hInstance ,(LPCTSTR) IDI_APPLICATION); //最小化时图标
wndclassex.cbSize = sizeof(WNDCLASSEX);//结构体的字节长度。

return RegisterClassEx(&wndclassex);
}

//初始化窗口
BOOL InitInstance(HINSTANCE hInstance,int nCmdShow)
{
HWND hWnd;
//创建窗口
hWnd = CreateWindow(szWindowClassName, //窗口名
szTitle, //窗口标题
WS_OVERLAPPEDWINDOW, //窗口式样
CW_USEDEFAULT, //窗口左上角的x 坐标
CW_USEDEFAULT, //窗口左上角的y 坐标
CW_USEDEFAULT, //窗口的宽度
CW_USEDEFAULT, //窗口的高度
NULL, //父窗口句柄
NULL, //菜单句柄
hInstance, //实例句柄
NULL); //创建参数

if(!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow); //显示窗口
UpdateWindow(hWnd); //立即显示
return TRUE;
}
//消息循环
int Run()
{
MSG msg;
while (GetMessage (&msg,NULL,0,0)) //消息循环。
{
TranslateMessage (&msg);//消息解释。
DispatchMessage (&msg); //消息发送。
}
//注意,不能用“return 0”,因为有非正常退出的可能性。
return msg.wParam ;
}

//窗口消息处理
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND hRichEdit;
long mStyle;
switch (message)
{
case WM_CREATE:
hRichEditDll = LoadLibrary(TEXT("msftedit.dll"));
//InitCommonControls();
hRichEdit = CreateWindowEx(WS_EX_CLIENTEDGE ,TEXT("RICHEDIT50W"), NULL,
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_NOHIDESEL | ES_VERTICAL ,
10, 10, 1000, 380, hWnd, 0, NULL, 0);

break;
case WM_DESTROY: //关闭窗口
FreeLibrary(hRichEditDll);
hRichEditDll = NULL;
PostQuitMessage(0); //发送关闭消息
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam); //缺省窗口处理函数
}
return 0;
}
...全文
146 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ding_01 2019-02-15
  • 打赏
  • 举报
回复
经过查MSDN得知,richedit控件的消息EM_SETLANGOPTIONS和EM_GETLANGOPTIONS是处理东亚文字的,查2008MSDN得知一些标志位的设置。可是还是没有解决。
下面是源程序,在VC6.0下编译通过,略微改动在vs2008下也通过,但是结果还是横排,没有效果。

case WM_CREATE:
hRichEditDll = LoadLibrary(TEXT("msftedit.dll"));
//InitCommonControls();
hRichEdit = CreateWindowEx(WS_EX_CLIENTEDGE ,TEXT("RICHEDIT50W"), NULL,
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_NOHIDESEL | ES_VERTICAL ,
10, 10, 1000, 380, hWnd, 0, NULL, 0);
lRichR=SendMessage(hRichEdit,EM_GETLANGOPTIONS,0,0);
SendMessage(hRichEdit,EM_SETLANGOPTIONS,0,lRichR | IMF_DUALFONT );
mStyle=GetWindowLong(hRichEdit,GWL_STYLE);
SetWindowLong(hRichEdit,GWL_STYLE,mStyle|ES_VERTICAL);
UpdateWindow(hRichEdit);
这是处理WM_CREATE 消息,其余的和上面的程序一样。
ding_01 2019-02-15
  • 打赏
  • 举报
回复
引用 1 楼 幻夢之葉 的回复:
ES_VERTICAL
Draws text and objects in a vertical direction. This style is available for Asian-language support only.

用过这个控件,但是不深
仅支持亚洲语言,它是如何知道是不是亚洲国家语言呢?
有哪些参数或者函数允许设置相关的诸如区域,语言,编码的,你试试看
谢谢指导,我找找看下。
ding_01 2019-02-15
  • 打赏
  • 举报
回复
谢谢大侠指导。这个也是我困惑的地方,要说那个DLL文件,我查询了它的属性中的详细信息,是简体中文。
幻夢之葉 2019-02-14
  • 打赏
  • 举报
回复
ES_VERTICAL
Draws text and objects in a vertical direction. This style is available for Asian-language support only.

用过这个控件,但是不深
仅支持亚洲语言,它是如何知道是不是亚洲国家语言呢?
有哪些参数或者函数允许设置相关的诸如区域,语言,编码的,你试试看

69,336

社区成员

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

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