一个关于SendMessage(...)的问题,搞了我一下午,大虾快帮帮我!

wxmchuanzhang 2001-08-19 06:12:53
我用::SendMessage(AfxGetApp()->m_pMainWnd->m_hWnd,WM_DRAWITEM,0,(long)dts);给主对话框发WM_DRAWITEM的消息,希望改变控件(OWNER DRAW风格)的文字。
可是总是不成功。
OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCTlpDrawItemStruct)
FillRect(lpDrawItemStruct->hDC,&lpDrawItemStruct->rcItem,(HBRUSH)GetStockObject(WHITE_BRUSH));
SetBkMode(lpDrawItemStruct->hDC,TRANSPARENT);
if(nIDCtl==IDC_TEXT)
{
dts=lpDrawItemStruct;
if(IsChange)
DrawText(lpDrawItemStruct->hDC,"worl",-1,&lpDrawItemStruct->rcItem,DT_SINGLELINE|DT_VCENTER|DT_CENTER);
else
DrawText(lpDrawItemStruct->hDC,"hello",-1,&lpDrawItemStruct->rcItem,DT_SINGLELINE|DT_VCENTER|DT_CENTER);
}

我被搞得焦头烂额,帮帮我吧。IsChange是发消息前赋为true;结果控件上文本并不改变。但明明是执行了此消息响应函数的呀。太怪了!
...全文
154 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dcz 2001-08-19
  • 打赏
  • 举报
回复
原理上 WM_DRAWITEM 是系统控件发送出来的,为什么你的 BN_CLICK 事件会发送这个消息。

如果的确是你自己发送的该消息,则你需要填充 DRAWITEMSTRUCT 结构中的相关字段,例如:
hDC, rcItem 等。
如果该结构不是由你来填充,则是谁来填充?怎么填充的?
该结构只在消息发送时刻数据有效,消息处理完毕之后数据既失效。
wxmchuanzhang 2001-08-19
  • 打赏
  • 举报
回复
在一个button的BN_CLICKED的消息响应函数中写的。
dst是一个指针
dcz 2001-08-19
  • 打赏
  • 举报
回复
告诉我们你的SendMessage 在什么地方写的,dts 是一个结构还是一个指针?如果是结构,则应该使用 &dts 来传递。
ssh_zy 2001-08-19
  • 打赏
  • 举报
回复
好像要把cdc接过来

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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