新手求助SDK RichEdit4.1版控件设置垂直文本问题
最近学习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;
}