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

IT保安 2015-03-01 02:42:51
线程的代码:
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)为什么用||而不是&&呢?

...全文
112 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-03-02
  • 打赏
  • 举报
回复
非A 或 非B 等价于 非(A 且 B)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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