近来需要在一个Dlg类中创建一个线程用来实时显示当前系统的电量,原来以为很简单的问题,却用了我一个下午的时间才搞定。主要遇到以下几个问题:
1)在对话框初时化的时候创建线程,但是线程的主处理函数应该为该Dlg类的静态私有成员函数,或者是外部函数。由于要用到该Dlg类的成员变量,故将其声明为类的静态私有成员变量。注意:一定要是静态的成员函数,不然会提示error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__cdecl *)(void *)
2)在Dlg类中处理加载位图的时候,如果用API的LoadBitmap函数,则需要得到Dlg类实例的HINSTANCE(hInst),也就是LoadBitamp的第一个参数,想得到这个值可能比较麻烦,不过我想应该能拿得到(只要你想得到)。不过这里有个比较方便的方法就是用CBitmap类的LoadBitmap成员函数HGDIOBJ(typedef void * HGDIOBJ),该函数只有一个参数,就是位图的ID,然后再用CBitmap的GetSaftHandle成员函数,并将其返回值赋值给HGDIOBJ的变量,接下来就是HDC的SelectObject函数调用这个变量。最后就是BitBlt了,一些OK。
       其实用外部函数也可以用类中的成员变量,这样反而更好些,只要在类成员函数中创建线程的时候传一个this指针作为参数就万事大吉了,以前的想法太幼稚了