您的位置:首页 > 其它

一个在unicode文本插入标签的程序小结

2011-08-01 11:08 393 查看
声明一下开发环境,xp mfc vc6.0

实现的大致要求是,读入一个unicode编码的文件,显示在EditBox中,分页显示(因为我的目标文件能够清晰的分页)。在选定标签后,单击Editbox在光标处插入标签。如果是选定一段文本内容,则在两边插入标签。同时支持回车和退格操作。

1.首先我要实现读取unicode编码的文件并在Editbox上显示。

vc上默认是不支持unicode显示的,所以要自己做一些改变。至于为何做这样修改,不太清楚。

在project -> settings -> c/c++ 下,将Prepreocessor definitions的默认的_MDBS去掉,加上_UNICODE和UNICODE , 在settings -> Link 下,Catagory选为Output, Entry-point symbol 改为 wWinMainCRTStartup。

这样就能对unicode编码文件正确显示,下面是读入的代码

CFileDialog dlg(TRUE);
if(dlg.DoModal() == IDOK)
{
headPosVec.clear();
tailPosVec.clear();
total = 0;
str.Empty();
fileName = dlg.GetPathName();
//transfer CString to char*  for FILE
int nSize = WideCharToMultiByte(CP_ACP,
NULL,
fileName.GetBuffer(fileName.GetLength()),
-1,
NULL,
0,
NULL,
FALSE
);
char *pName = new char[nSize];
WideCharToMultiByte(CP_ACP,
NULL,
fileName.GetBuffer(fileName.GetLength()),
-1,
pName,
nSize,
NULL,
FALSE
);

FILE *file;
if((file = fopen(pName,"rb")) == NULL)
return;

int len;
while(1)
{
wchar_t tempStr[10240 + 1] = {0};
len = fread(tempStr, sizeof(wchar_t), 10240, file);
str += tempStr;
if(len != 10240)
break;
}


}


GetDlgItem(XXX)->SetWindowText(str);


这里使用了CFIleDialog类,选定文件后,文件全名保存为CString,因为我要使用FILE对文件进行读取和写入,所以要将CString 转换成 char *,这是在unicode环境下的,CString保存的对象是wchar_t,即2个字节的?

文件读入要使用wchar_t作为基本读入单位。

2. 插入标签和其他操作

这个直接利用Cedit的Getsel函数,得到光标的位置然后插入指定标签就可以了。因为要在鼠标点击时响应插入事件所以,必须拦截点击事件。在你的DLG对象中,重载

BOOL PreTranslateMessage(MSG *pMsg)函数

代码如下:
BOOL CNextPreEditDlg::PreTranslateMessage(MSG *pMsg)
{
if(pMsg->message == WM_LBUTTONUP && pMsg->hwnd == m_txtBox->m_hWnd)
{
if(!startLabel.IsEmpty())
{
insertLabel();
//saveFile();

}
}
if(pMsg->message == WM_KEYDOWN)
{
//为什么这里回车事件会响应2次???  原因是响应了 keydown  和  keyup ,
if(pMsg->wParam == VK_RETURN )
{
insertReturn();
//saveFile();
}

if(pMsg->wParam == VK_BACK)
{
deleteCurWchar();
}

if(pMsg->wParam == VK_LEFT)
{
OnButtonPrevious();
}

if(pMsg->wParam == VK_RIGHT)
{
OnButtonNext();
}
}
return CDialog::PreTranslateMessage(pMsg);
}
同理,可响应其他事件,例如回车啊,退格啊。

3.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐