按钮的触发

sf1986 2009-08-13 01:51:22
void CDlgInfo::OnButtonBegin()
{
m_btBegin.EnableWindow(FALSE);
m_btEnd.EnableWindow(TRUE);
m_btSave.EnableWindow(FALSE);
SetTimer(1,2000,NULL);
}

void CDlgInfo::OnButtonEnd()
{
m_btBegin.EnableWindow(TRUE);
m_btEnd.EnableWindow(FALSE);
m_btSave.EnableWindow(TRUE);
KillTimer(1);

SetHwnd(FALSE);
}

BOOL CDlgInfo::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
PSENDDATA pData =(PSENDDATA)pCopyDataStruct->lpData;
strcpy(sd.strUrl,pData->strUrl);
strcpy(sd.strCookie,pData->strCookie);
sd.bPostData =pData->bPostData;
CDlgInfo::OnUrl(0,0);
return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}


我希望在 OnButtonBegin 按下时,开始OnCopyData , 按下OnButtonEnd,OnCopyData停止。

该怎么写?希望详细点。初学
...全文
59 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sf1986 2009-08-13
  • 打赏
  • 举报
回复
谢谢Tr0j4n和专诸,Tr0j4n那种方法太麻烦了,我不会用...
zu4nu 2009-08-13
  • 打赏
  • 举报
回复
你的代码和我的一样...晕死 也是网上找的吧。。

不用那么麻烦,既然定义了button的状态,那直接根据状态来进行是否执行copydata的代码就ok了

BOOL CDlgInfo::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
if ( m_btBegin.EnableWindow(TRUE))
{
PSENDDATA pData =(PSENDDATA)pCopyDataStruct->lpData;
strcpy(sd.strUrl,pData->strUrl);
strcpy(sd.strCookie,pData->strCookie);
sd.bPostData =pData->bPostData;
CDlgInfo::OnUrl(0,0);
return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}
}
MoXiaoRab 2009-08-13
  • 打赏
  • 举报
回复
lpParam由线程参数传递进来,强制转换成CopyData结构即可
sf1986 2009-08-13
  • 打赏
  • 举报
回复
这样写肯定有问题啊 DWORD WINAPI MyThread( LPVOID lpParam ) 它不是copydata的话sd.strUrl\sd.strCookie这些函数就无法识别了
MoXiaoRab 2009-08-13
  • 打赏
  • 举报
回复
DWORD WINAPI MyThread( LPVOID lpParam )
{
PSENDDATA pData =(PSENDDATA)pCopyDataStruct->lpData;
strcpy(sd.strUrl,pData->strUrl);
strcpy(sd.strCookie,pData->strCookie);
sd.bPostData =pData->bPostData;
CDlgInfo::OnUrl(0,0);
}
sf1986 2009-08-13
  • 打赏
  • 举报
回复
不知道怎么让copydata有这个线程
也不知道怎么让开始和停止控制这个线程

能不能在我的代码上改。说过了,初学
MoXiaoRab 2009-08-13
  • 打赏
  • 举报
回复
这个要通过线程来做

uintptr_t _beginthread(
void( *start_address )( void * ),
unsigned stack_size,
void *arglist
);
开始线程

start_address
Start address of a routine that begins execution of a new thread. For _beginthread, the calling convention is either __cdecl or __clrcall; for _beginthreadex, it is either __stdcall or __clrcall.

stack_size
Stack size for a new thread or 0.

arglist
Argument list to be passed to a new thread or NULL.

security
Pointer to a SECURITY_ATTRIBUTES structure that determines whether the returned handle can be inherited by child processes. If NULL, the handle cannot be inherited. Must be NULL for Windows 95 applications.

initflag
Initial state of a new thread (0 for running or CREATE_SUSPENDED for suspended); use ResumeThread to execute the thread.

thrdaddr
Points to a 32-bit variable that receives the thread identifier. Might be NULL, in which case it is not used.

结束线程,用 _endthreadex
sf1986 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zoulie 的回复:]
可以把OnCopyData放进一个单独的线程,
OnButtonBegin 开始线程
OnButtonEnd  停止线程

[/Quote]

不会写。。。
zoulie 2009-08-13
  • 打赏
  • 举报
回复
可以把OnCopyData放进一个单独的线程,
OnButtonBegin 开始线程
OnButtonEnd 停止线程

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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