- 主题:mfc里面如何让button实时变灰
如题
我知道变灰可以这样做
GetDlgItem(IDC_BTN_X)->EnableWindow(FALSE);
但是这样做不到实时
具体情况是
我有两个button,BTN_X,和BTN_Y
click_btn_x里面要做很多事情,时间很长,我希望,做这些事情的时候,所有的button都变灰,等到事情做完了再变回来:
click_btn_x()
{
// make button grey
what_to_add_here_to_make_grey()?
do_something(); // real long time
// make button active again
what_to_add_here_to_make_active()?
}
如果是用开始提到的方法,做不到实时,就是在do_something的时候,并没有变灰,直到整个函数执行完之后,才有变灰变active的过程
感觉是没有同步实时
请问如何做到同步实时
--
FROM 1.202.141.*
AfxBeginThread我记的是这个。
【 在 lobachevsky (罗巴切夫斯基) 的大作中提到: 】
: 如题
: 我知道变灰可以这样做
: GetDlgItem(IDC_BTN_X)->EnableWindow(FALSE);
: ...................
--
FROM 125.34.1.*
耗时长的操作,放到worker线程中执行。做好worker线程或者线程池的生命周期管理(主要是worker线程不要一直闷头干活,要及时检查UI线程设定的通知标志、通知事件,要不然用户已经点了停止/退出,worker线程还在那里死干或者死等)
worker线程不要直接操作界面控件,而是发消息给UI线程让UI线程来操作控件。
worker线程和UI线程的通信,用自定义消息WM_APP+1、WM_APP+2这样的,通过PostMessage(),一般不需要用锁,因为UI线程的消息队列是OS已经串行化好了。
UI线程不能做耗时操作,否则消息循环被阻塞,那就无法绘制控件状态了,更无法响应鼠标键盘
OnButtonClicked( )这种control event handler是在UI线程中执行的。
--
修改:z16166 FROM 125.35.125.*
FROM 125.35.125.*
call一下updateWindow我记得是这样
当然正规做法就是二楼说的
【 在 lobachevsky () 的大作中提到: 】
: 如题
:
: 我知道变灰可以这样做
: GetDlgItem(IDC_BTN_X)->EnableWindow(FALSE);
--
FROM 124.78.220.*
do-some-thing 这个开启一个线程去坐。
【 在 lobachevsky (罗巴切夫斯基) 的大作中提到: 】
: 如题
: 我知道变灰可以这样做
: GetDlgItem(IDC_BTN_X)->EnableWindow(FALSE);
: ...................
--
FROM 139.226.109.*
老实讲你搞不清这个的话,还是直接用C#吧,await轻松搞定
其实解决方法也很简单,就是仿照C#的机制自己做个await
【 在 lobachevsky 的大作中提到: 】
: 如题
: 我知道变灰可以这样做
: GetDlgItem(IDC_BTN_X)->EnableWindow(FALSE);
: ...................
--
FROM 27.91.71.*
VS2017/2019已经有async/await了,不过学习曲线有点陡,MS blog给的例子要么太简单,要么太复杂
https://docs.microsoft.com/en-us/cpp/build/reference/await-enable-coroutine-support?view=vs-2019
【 在 xiaoju 的大作中提到: 】
: 老实讲你搞不清这个的话,还是直接用C#吧,await轻松搞定
: 其实解决方法也很简单,就是仿照C#的机制自己做个await
:
--
修改:z16166 FROM 123.115.131.*
FROM 123.115.131.*
visual c++的native能用的,visual studio的release notes去年还是前年已经宣告可以用于production code了
【 在 xiaoju 的大作中提到: 】
: 印象中这个只能用在UWP里面,传统MFC还是用不了
:
--
修改:z16166 FROM 123.115.131.*
FROM 123.115.131.*
不需要uwp库了?
【 在 z16166 的大作中提到: 】
: visual c++的native能用的,visual studio的release notes去年还是前年已经宣告可以用于production code了
:
--
FROM 27.91.71.*