谁了解“SetDlgItemText”这个函数?

carter10004 2011-10-26 06:33:51
CString str2=“你好”;
SetDlgItemText(IDC_EDIT1,str2);

HWND hwnd = ::GetDlgItem(g_MehWnd,IDC_EDIT1);
CRect Myrect;
::GetWindowRect(hwnd,Myrect);///-///达不到效果
ScreenToClient(Myrect);
::SetWindowPos(hwnd,HWND_TOP, Myrect.left, Myrect.top, (Myrect.right-Myrect.left), (Myrect.bottom-Myrect.top), SWP_NOZORDER|SWP_SHOWWINDOW);
InvalidateRect(Myrect,true);

HBITMAP hBitmap;
Sleep(500);
GetDlgItem(IDC_EDIT1)->GetWindowRect(Myrect);///-///达不到效果

hBitmap=CopyScreenToBitmap(&Myrect);

代码大体就是这样的
我在IDC_EDIT1中显示文字“你好”,然后想用CopyScreenToBitmap(&Myrect);截屏,就是类似于键盘的printscreen按键,
问题是,这些代码是在一个按钮的函数体内实现的,
然后什么也截不到。
开始我以为是因为文字发过去之后没有图形重绘,所以加了那句SetWindowPos和InvalidateRect,但是还不管用,
难道SetDlgItemText必须要等到一个Onbutton函数体整体运行完毕才执行?
...全文
1566 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
心所向皆可成 2011-11-17
  • 打赏
  • 举报
回复
界面线程中不要使用Sleep之类的调用,会阻塞当前的消息循环
yuucyf 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gameslq 的回复:]
>>难道SetDlgItemText必须要等到一个Onbutton函数体整体运行完毕才执行?
是这样情况,Onbutton也是消息处理,该消息处理没结束,其他消息处理就没机会
获得执行,而SetDlgItemText相当于发送了WM_SETTEXT消息,其他消息不结束
WM_SETTEXT没有执行的机会
修改的方案要么分开,要么不分开,而在单独的线程里执行上述代码
[/Quote]
正解.
梦境传说 2011-10-26
  • 打赏
  • 举报
回复
SetDlgItemText()设置过后要呼叫UpdateData()函数进行更新,否则显示不出来。
ziyue007 2011-10-26
  • 打赏
  • 举报
回复
同意七楼,楼主可以用GetDlgItem(控件ID)->SetWindowText("内容")设置控件初始内容
用GetDlgItem(控件ID)->GetWindowText(存储数组,大小)获取控件中的内容
梦境传说 2011-10-26
  • 打赏
  • 举报
回复
SetDlgItemText():

  函数功能:该函数设置对话框中Edit control控件文本和标题。

  函数原型:BOOL SetDlgltemText(HWND hDlg,int nlDDlgltem,LPCTSTR IpString);

  参数:

  hDlg:指定含有控制的对话框。

  nlDDlgltem:将被设置标题和文本控制的标识ID。

  IpString:指向一个以NULL结尾的字符串指针,该字符串指针包含了将被复制到控制的文本。

  返回值:如果函数调用成功,则返回值为非零值。如果函数调用失败,则返回值为零。若想获得更多的错误信息,请调用GetLastError函数。

  备注:SetDlgltem函数把一个WM_SETTEXT消息发送到指定的控制。

是CWnd类的成员函数,SetDlgItemText函数将某一个控件的内容设定为某个值。
龙行天下之Sky 2011-10-26
  • 打赏
  • 举报
回复
难道SetDlgItemText必须要等到一个Onbutton函数体整体运行完毕才执行?
不是的
The SetDlgItemText function sends a WM_SETTEXT message to the specified control.
也许控件还没有来得及处理它的WM_SETTEXT消息你就已经结束了

gameslq 2011-10-26
  • 打赏
  • 举报
回复
>>难道SetDlgItemText必须要等到一个Onbutton函数体整体运行完毕才执行?
是这样情况,Onbutton也是消息处理,该消息处理没结束,其他消息处理就没机会
获得执行,而SetDlgItemText相当于发送了WM_SETTEXT消息,其他消息不结束
WM_SETTEXT没有执行的机会
修改的方案要么分开,要么不分开,而在单独的线程里执行上述代码
gameslq 2011-10-26
  • 打赏
  • 举报
回复
>>难道SetDlgItemText必须要等到一个Onbutton函数体整体运行完毕才执行?
是这样情况,Onbutton也是消息处理,该消息处理没结束,其他消息处理就没机会
获得执行,而SetDlgItemText相当于发送了WM_SETTEXT消息,其他消息不结束
WM_SETTEXT没有执行的机会
修改的方案要么分开,要么不分开,而在单独的线程里执行上述代码
gameslq 2011-10-26
  • 打赏
  • 举报
回复
>>难道SetDlgItemText必须要等到一个Onbutton函数体整体运行完毕才执行?
是这样情况,Onbutton也是消息处理,该消息处理没结束,其他消息处理就没机会
获得执行,而SetDlgItemText相当于发送了WM_SETTEXT消息,其他消息不结束
WM_SETTEXT没有执行的机会
修改的方案要么分开,要么不分开,而在单独的线程里执行上述代码
Eleven 2011-10-26
  • 打赏
  • 举报
回复
界面线程中不要使用Sleep之类的调用,会阻塞当前的消息循环
Eleven 2011-10-26
  • 打赏
  • 举报
回复
界面线程中不要使用Sleep之类的调用,会阻塞当前的消息循环

16,472

社区成员

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

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

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