请教一个很简单的问题,线程画矩形的问题
线程的代码:
刚开始写的时候,总是运行错误,后来对照一下课本,发现少了一句
if(pparams->cxClient != 0 || pparams->cyClient != 0)判断,我的疑问就是:
1.为什么要加入这一句判断就会正常了呢?
子窗口是在主窗口中响应 wm_size消息时创建的,指定了大小。
在子窗口的窗口过程中,已经将子窗口的cxClient 和 cyClient的值获取,并传递到了线程函数之中,
我想cxClient 和 cyClient的值应该始终都不会为0吧!如果都不为0,要这句判断语句干嘛?而且没有这句判断运行就出错,
盼指点!
2.这句判断if(pparams->cxClient != 0 || pparams->cyClient != 0)为什么用||而不是&&呢?
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)为什么用||而不是&&呢?
...全文
相关推荐
易语言画标尺源码-易语言
易语言是一种专为中国人设计的编程语言,它的目标是让编程变得简单易学。这个“易语言画标尺源码”是一个用易语言编写的程序,用于在屏幕上绘制标尺,帮助用户进行图形或者界面设计时进行精确测量。
易语言画边框源码-易语言
解决这些问题需要对易语言的绘图机制有深入理解,并可能涉及到一些高级技术,如多线程、内存管理等。
Java简单画图实例_画一个诺基亚手机
本实例将介绍如何利用Java的AWT(Abstract Window Toolkit)或Swing库来实现画出一个诺基亚手机的简单步骤。1.
Android利用SurfaceView实现简单计时器
考虑兼容性问题,选择适合各个API版本的绘图方法。通过这样的实现,我们可以创建一个动态且高效的计时器组件,满足应用程序的需求。同时,这也是对Android多线程编程和图形渲染能力的一种锻炼。
利用GDI简单的画线例子
在实际编程中,我们还需要考虑到多线程安全问题,因为GDI对象是线程不安全的,需要在适当的地方进行同步。同时,对于性能敏感的应用,可以使用GDI的优化技术,比如缓存和批处理,以提高绘制效率。


进程/线程/DLL
