社区
界面
帖子详情
ListCtrl能否显示UNICODE
huaboy408
2004-03-29 02:45:33
我的程序改为UNICODE版本后,ListCtrl中的汉字显示为乱码,程序应该没有什么问题,现在我考虑是不是ListCtrl不支持UNICODE,需要做什么设置或用代码控制,希望大家鼎力帮助
...全文
100
12
打赏
收藏
ListCtrl能否显示UNICODE
我的程序改为UNICODE版本后,ListCtrl中的汉字显示为乱码,程序应该没有什么问题,现在我考虑是不是ListCtrl不支持UNICODE,需要做什么设置或用代码控制,希望大家鼎力帮助
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
primen
2004-05-12
打赏
举报
回复
MFC类都支持BSTR及LPSTR的,你一般不需要特别的进行字串转换。MS提倡用TCHAR。
zuoke
2004-05-12
打赏
举报
回复
TO: lygfqy(风清扬)
-----------------------------------------------
注:unicode是看不到字符内容的
———————————————————————
怎么看不到字符内容呢?可以在调试中看到啊
huaboy408
2004-04-09
打赏
举报
回复
怎么这么久都没人顶一下啊,这个问题搞的我难过死了。
我在ConvertPatientNameFromDicom(szText, szText);前后各测试了szText= _T("试验");的情况,发现在这个函数前加上这句话,调试时这个函数会出错,而加在这个函数后面,没有出错情况,且LISTCTRL中各项均为“试验”,看起来是ConvertPatientNameFromDicom(szText, szText);搞的鬼,我把这个函数贴上来,大家一起看看有什么问题,谢谢了
void ConvertPatientNameFromDicom( LPCTSTR in, LPTSTR out )
{
for( int i = 0; i < _tcslen(in); i++)
{
if(in[i] == _T('^'))
*out++ = _T(' ');
else
*out++ = in[i];
}
*out = _T('\0');
}
huaboy408
2004-04-08
打赏
举报
回复
TO: lygfqy(风清扬)
我用的是2000系统
因为查询到记录——添加到LISTCTRL控件中的这个过程都是通过Active X控件(*.dll)来实现的,而主程序和实现*.dll的程序不在一个WORKSPACE里面,我在*.dll程序里设置断点,根本不执行,这怎么办?
我觉得就是我说的那个字符串操作szText= OLE2T(bstrText);,这个就是加载前的字符串操作,不知道是不是正确?
lygfqy
2004-04-08
打赏
举报
回复
支持是肯定的
如果是2000以上版本系统,
系统内部都是unicode方式操作的
建议你跟一下代码
找到从载入字符串开始的地方看看是不是unicode形式
并到最后加载的时候
注:unicode是看不到字符内容的
huaboy408
2004-04-08
打赏
举报
回复
谢谢大家的帮助,我仔细看了代码,没有发现问题到底出在哪里,我把填充LISTCTRL控件的代码贴上,大家帮忙看一下,谢谢了。
void CEvent::SetOnlineItemToListView( long lIndex, IItem* pItem )
{
HRESULT hr = S_OK;
BOOL bRes = TRUE;
TCHAR szMsg[MAX_MSG_LEN+1];
LoadString(_Module.m_hInstResource, IDS_ERRORGETATTR, szMsg, MAX_MSG_LEN);
// Retrieve attributes and set it to the list view
try
{
for( int i = 0; i < MWL_LV_COLUMN_NUMCOLUMNS; i++ )
{
_variant_t var;
long lVal;
MWL_LV_COLUMNS_FLAGS nFlag = (MWL_LV_COLUMNS_FLAGS)(MWL_LV_COLUMN_PATIENTNAME+i);
m_pPMWLCtrl->GetColumnQueryParameterID(nFlag, &lVal);
if ( FAILED( (hr = pItem->raw_GetAttribute( (ID)lVal, &var )) ) )
{
lstrcat(szMsg, _T(" raw_GetAttribute"));
bRes = FALSE;
}
if( var.vt == VT_BSTR && var.bstrVal != NULL )
m_pPMWLCtrl->ListViewAddItem(var.bstrVal, lIndex, nFlag);
}
}
catch ( _com_error &e )
{
USES_CONVERSION;
#if _UNICODE
std::string errmsg( W2A(e.ErrorMessage()) );
#else
std::string errmsg( e.ErrorMessage() );
#endif
lstrcat(szMsg, (LPCTSTR)errmsg.c_str());
bRes = FALSE;
}
catch ( LPCTSTR perror )
{
lstrcat(szMsg, perror);
bRes = false;
}
if( !bRes )
{
LOG_ERROR(szMsg, hr );
}
}
STDMETHODIMP CPMWLCtrl::ListViewAddItem(BSTR bstrText, int iItem, MWL_LV_COLUMNS_FLAGS nColumn)
{
// TODO: Add your implementation code here
if( ! m_pColumnConfig || !m_hListView ) return S_OK;
TCHAR* szText;
USES_CONVERSION;
szText= OLE2T(bstrText);
colConfig* pColumns = (colConfig*)(m_pColumnConfig);
for ( int i = 0; i < MWL_LV_COLUMN_NUMCOLUMNS; i++)
{
if ( pColumns[i].nFlag == nColumn && pColumns[i].nVis && pColumns[i].nPos != -1 )
{
if( nColumn == MWL_LV_COLUMN_PATIENTNAME ||
nColumn == MWL_LV_COLUMN_PERFORMPHYSICIAN ||
nColumn == MWL_LV_COLUMN_REFERRINGPHYSICIAN
)
{
//Convert patient name from DICOM format (with '^' to replace ' ') to normal name string
ConvertPatientNameFromDicom(szText, szText);
}
//Add to list view
LV_ITEM item;
item.iItem = iItem;
item.iSubItem = pColumns[i].nPos;
item.pszText = szText;
item.cchTextMax = lstrlen ( szText );
BOOL iRet;
if ( pColumns[i].nPos == 0 )
{
//Remember the original item index in online query result.
item.mask = LVIF_TEXT|LVIF_PARAM;
item.lParam = iItem;
iRet = ListView_InsertItem ( m_hListView, &item );
ATLTRACE("\nInsertItem iRet=%d", iRet );
}
else
{
item.mask = LVIF_TEXT;
iRet=ListView_SetItem ( m_hListView, &item );
ATLTRACE("\nSetItem iRet=%d", iRet );
}
return S_OK;
}
}
return S_OK;
}
唯一对字符串进行操作的就szText= OLE2T(bstrText);这一句,不知道在UNICODE下是不是有问题,我对COM编程不了解,这些字符串的转换搞的我头疼,发现网上很少有这方面的介绍,哪位有了解多多指教,或者哪里有这方面的知识,谢谢大家了。
小李匪盗
2004-03-29
打赏
举报
回复
支持是毫无疑问的。我也出现过这种情况,是读的时候读错了。
蒋晟
2004-03-29
打赏
举报
回复
ListCtrl支持UNICODE
你的问题可能是错误的传递了非Unicode字符串到控件
huaboy408
2004-03-29
打赏
举报
回复
我现在需要确切的说法,ListCtrl是否支持UNICODE
马丁当
2004-03-29
打赏
举报
回复
你搞错了吧,怎么会不支持??
huaboy408
2004-03-29
打赏
举报
回复
这样说来,LISTCTRL就不支持UNICODE了?
那么多字段,我每个都转换,是不是太麻烦了,有没有其他好方法
fzd999
2004-03-29
打赏
举报
回复
#ifdef UNICODE
WideCharToMultiByte(……)
#endif
……
进行Unicode到多字节文本的转换
duilib界面库,库
ListCtrl
可以添加checkbox
2. 自定义控件绘制:由于Duilib默认的
ListCtrl
可能不直接支持复选框,因此可能需要通过重写OnPaint函数,利用UIPainter进行自定义绘制,将复选框的图形绘制到列表项上。同时,需要监听鼠标事件,处理用户的点击行为...
X
ListCtrl
大全.zip
通过分析"X
ListCtrl
大全.zip"这个资源,我们可以期待学习到如何在实际项目中充分利用
ListCtrl
的自绘功能,提升用户体验,同时也能了解到在不同Visual Studio版本下MFC程序的兼容性问题。这份大全不仅适用于初学者...
C
ListCtrl
的使用方法
C
ListCtrl
m_
listCtrl
; // ... }; ``` 接下来,你需要在对话框的初始化函数`OnInitDialog()`中创建并设置C
ListCtrl
控件: ```cpp BOOL CMyDialog::OnInitDialog() { CDialogEx::OnInitDialog(); // 设置...
MFC特强大C
ListCtrl
Ex(支持插入控件、设置颜色、始终高亮、列排序等)
本资源中提供了C
ListCtrl
Ex的CPP与H文件与一个Demo示例,C
ListCtrl
Ex继承自C
ListCtrl
,可以让您很方便的操作
listCtrl
控件。此类最初来源于网络,本人在其上进行加工整理,添加了一些新功能,优化了一些细节代码,...
完整版本MFC特强大C
ListCtrl
Ex(支持插入控件、设置颜色、始终高亮、列排序等).rar
本资源中提供了C
ListCtrl
Ex的CPP与H文件与一个Demo示例,C
ListCtrl
Ex继承自C
ListCtrl
,可以让您很方便的操作
listCtrl
控件。此类最初来源于网络,本人在其上进行加工整理,添加了一些新功能,优化了一些细节代码,...
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章