惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
B
Blog RSS Feed
宝玉的分享
宝玉的分享
腾讯CDC
博客园_首页
T
Tailwind CSS Blog
月光博客
月光博客
博客园 - 司徒正美
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
M
MIT News - Artificial intelligence
A
About on SuperTechFans
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
V
Visual Studio Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
SecWiki News
SecWiki News
美团技术团队
P
Privacy International News Feed
H
Help Net Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Security Blog
Microsoft Security Blog
Know Your Adversary
Know Your Adversary
Y
Y Combinator Blog
D
DataBreaches.Net
Project Zero
Project Zero
T
The Blog of Author Tim Ferriss
Cyberwarzone
Cyberwarzone
C
Cybersecurity and Infrastructure Security Agency CISA
C
Cisco Blogs
S
Schneier on Security
G
GRAHAM CLULEY
博客园 - 三生石上(FineUI控件)
Cisco Talos Blog
Cisco Talos Blog
小众软件
小众软件
Forbes - Security
Forbes - Security
D
Docker
T
Tenable Blog
S
Secure Thoughts
雷峰网
雷峰网
S
Security @ Cisco Blogs
T
The Exploit Database - CXSecurity.com
The Cloudflare Blog
博客园 - 【当耐特】
Spread Privacy
Spread Privacy
阮一峰的网络日志
阮一峰的网络日志

博客园 - 想飞

区块链应用场景 系统微服务架构 shell sed命令 项目pom.xml第一行报错解决方案 Fabric事务机制 MSP成员服务管理 Dockerfile 说明 Docker-Compose 配置详解 Fabric 术语 Docker数据管理:Named volume Mac 查看Volumes Android中的JSON详细总结 经典黑客程序gh0st汇编改写 关于使用WM_COPYDATA进行进程之间交换数据的问题 CListBox没产生LBN_SELCHANGE消息 使用#define定义引用的编译问题 WTL中CListViewCtrl中LVS_ICON和LVS_REPORT模式的不同 浏览器研究 图片合并工具V1.1
关于金山开源界面BkWin不能使用DDX 的解决办法
想飞 · 2011-08-21 · via 博客园 - 想飞

金山开源界面BkWin熟悉的后做界面的效果还不错,但它的界面排版的特殊性,使得WTL的DDX(对话框数据交换)没法使用,具体原因是:

金山开源界面BkWin的对话框的所有控件都是用CBkDialogView来排版和管理。

所以WTL中的DDX是接收不到控件的消息

看原来实现的代码:

BOOL DDX_Text(UINT nID, LPTSTR lpstrText, int cbSize, BOOL bSave, BOOL bValidate = FALSE, int nLength = 0)

{

//实际上T不是窗口控件的父窗口,所以导致下面的方法都是不成功的 

T* pT = static_cast<T*>(this);

BOOL bSuccess = TRUE;

if(bSave)

{

HWND hWndCtrl = pT->GetDlgItem(nID);

int nRetLen = ::GetWindowText(hWndCtrl, lpstrText, cbSize / sizeof(TCHAR));

if(nRetLen < ::GetWindowTextLength(hWndCtrl))

bSuccess = FALSE;

}

else

{

ATLASSERT(!bValidate || lstrlen(lpstrText) <= nLength);

bSuccess = pT->SetDlgItemText(nID, lpstrText);

}

if(!bSuccess)

{

pT->OnDataExchangeError(nID, bSave);

}

else if(bSave && bValidate)   // validation

{

ATLASSERT(nLength > 0);

if(lstrlen(lpstrText) > nLength)

{

_XData data = { ddxDataText };

data.textData.nLength = lstrlen(lpstrText);

data.textData.nMaxLength = nLength;

pT->OnDataValidateError(nID, bSave, data);

bSuccess = FALSE;

}

}

return bSuccess;

 解决办法:

修改原来atlddx.h,专门处理金山界面库的处理。

BOOL DDX_Text(UINT nID, BSTR& bstrText, int /*cbSize*/, BOOL bSave, BOOL bValidate = FALSE, int nLength = 0)

{

T* pT = static_cast<T*>(this);

BOOL bSuccess = TRUE;

if(bSave)

{

bSuccess =::GetDlgItemText(pT->GetViewHWND(),nID, bstrText);

}

else

{

USES_CONVERSION;

LPTSTR lpstrText = OLE2T(bstrText);

ATLASSERT(!bValidate || lstrlen(lpstrText) <= nLength);

bSuccess =::SetDlgItemText(pT->GetViewHWND(),nID, lpstrText);

}

if(!bSuccess)

{

pT->OnDataExchangeError(nID, bSave);

}

else if(bSave && bValidate)   // validation

{

ATLASSERT(nLength > 0);

if((int)::SysStringLen(bstrText) > nLength)

{

_XData data = { ddxDataText };

data.textData.nLength = (int)::SysStringLen(bstrText);

data.textData.nMaxLength = nLength;

pT->OnDataValidateError(nID, bSave, data);

bSuccess = FALSE;

}

}

return bSuccess;

}

 修改后的文件:

bkddx.h

https://files.cnblogs.com/wantfly/bkddx.rar