请教一个很简单的问题,线程画矩形的问题

IT保安 IT保安 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
线程的代码:
void threadChild1(PVOID pvoid) //窗口1的线程
{
HDC hdc;
int left,top,right,bottom;
HBRUSH hBrush,oldBrush;
PPARAMS pparams = (PPARAMS)pvoid; //_beginthread的第3个参数传给了pvoid
if(pparams->cxClient != 0 || pparams->cyClient != 0)//为什么要有这个判断
{
while(true)
{
hdc = GetDC(pparams->hwnd);
hBrush = CreateSolidBrush(RGB(0,0,255));
oldBrush = (HBRUSH)SelectObject(hdc,hBrush);
left = rand()%(pparams->cxClient);
right = rand()%(pparams->cxClient);
top = rand()%(pparams->cyClient);
bottom = rand()%(pparams->cyClient);
Rectangle(hdc,min(left,right),min(top,bottom),max(left,right),max(top,bottom));
SelectObject(hdc,oldBrush);
ReleaseDC(pparams->hwnd,hdc);
DeleteObject(hBrush);
Sleep(50);
}

}
}

刚开始写的时候,总是运行错误,后来对照一下课本,发现少了一句
if(pparams->cxClient != 0 || pparams->cyClient != 0)判断,我的疑问就是:
1.为什么要加入这一句判断就会正常了呢?
子窗口是在主窗口中响应 wm_size消息时创建的,指定了大小。
在子窗口的窗口过程中,已经将子窗口的cxClient 和 cyClient的值获取,并传递到了线程函数之中,
我想cxClient 和 cyClient的值应该始终都不会为0吧!如果都不为0,要这句判断语句干嘛?而且没有这句判断运行就出错,
盼指点!
LRESULT CALLBACK child1Proc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
static PARAMS params;
switch(uMsg)
{
case WM_CREATE:
params.hwnd = hwnd;
//_beginthread(threadChild1,0,¶ms);
return 0;
case WM_SIZE:
params.cxClient = LOWORD(lParam);
params.cyClient = HIWORD(lParam);
_beginthread(threadChild1,0,¶ms);
return 0;
}
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}

2.这句判断if(pparams->cxClient != 0 || pparams->cyClient != 0)为什么用||而不是&&呢?

...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
IT保安
进程/线程/DLL 15,466 成员 49,169 内容