几个关于MFC的基础问题,大家有空过来回答一下啦。
1,
递减线程类和对象的一个使用技术?这个是什么原理呢?
CloseHandle(handle);
2,
2,关于在类中的函数(线程),以其他函数作为其成员,出现的问题?
当我们在创建一个线程的时候,系统呢,也就是我们的运行代码需要调用一个线程函数启动一个线程。
然而我们这个地方的线程函数是CChatDlg的一个成员函数。
要想调用CchatDlg的成员函数,我们必须定义一个对象。
我们必须要先产生一个对象,然后才能调用其内部的成员函数。
---------------------------------
“ 然而对于我们的运行时代码来说,他怎么知道要产生哪个对象呢?这个对象又应该如何去产生?”
---------------------------------
如果我们说要产生一个对象的时候,对象的构造函数要带参数,那么我们的运行时代码,怎么知道参数要如何传递呢?
所以对于运行时代码来说,他要调用线程函数来启动我们的线程。
那么是不需要产生的对象的。
然后我们这里错误的将函数设置成了成员函数。
这段话是孙鑫视频里的,不大懂,有人看到这些知道他要表达的是什么吗?
3,recvfrom返回接受到的字符长度?
是哪个长度?
所有字符,还是数据?
4,
#include<windows.h>#include<iostream>#define null NULLusing namespace std;DWORD WINAPI TicketSoldProc1(LPVOID lpParameter);DWORD WINAPI TicketSoldProc2(LPVOID lpParameter);int numTicket=100;//int index;HANDLE HMutex;void main(){ HANDLE handle1=CreateThread(0,0,TicketSoldProc1,null,0,null); HANDLE handle2=CreateThread(0,0,TicketSoldProc2,null,0,null); CloseHandle(handle1); CloseHandle(handle2); HMutex=CreateMutex(NULL,true,"tickets"); if(HMutex) { if(ERROR_ALREADY_EXISTS==::GetLastError()) { cout<<"已经有一个进程在运行了,你这个不能运行了!"<<endl; return; } }// WaitForSingleObject(HMutex,INFINITE);// ReleaseMutex(HMutex);// ReleaseMutex(HMutex); Sleep(4000); //cout<<"main thread is run!\n";}DWORD WINAPI TicketSoldProc1(LPVOID lpParameter){ while(true) {// ReleaseMutex(HMutex); ::WaitForSingleObject(HMutex,INFINITE); if(numTicket>0) { Sleep(1); cout<<"Thread1 has sell the ticket "<<numTicket--<<"\n"; } else break; ReleaseMutex(HMutex); }// ::WaitForSingleObject(HMutex,INFINITE);// cout<<"TicketSoldProc1 is run!"<<endl; //::ReleaseMutex(HMutex); return 0;}DWORD WINAPI TicketSoldProc2(LPVOID lpParameter){ while(true) { ::WaitForSingleObject(HMutex,INFINITE); if(numTicket>0) {// WaitForSingleObject(HMutex,INFINITE); Sleep(1); cout<<"Thread2 has sell the ticket "<<numTicket--<<"\n"; } else break; ReleaseMutex(HMutex); }// ReleaseMutex(HMutex);// WaitForSingleObject(HMutex,INFINITE);// cout<<"\n\nTicketSoldProc2 is run!"<<endl; return 0;}
this->OnOK();
return CDialog::PreCreateWindow(cs);
}
9,对于一个在VIEW类中显示的对话框(意思如上,在VIEW类中通过调用该对话框相关联的对象打开对话框),我如何能够让该对话框随着VIEW的窗口增大而发生相应的变化?
(可不可以对于对话框的长宽参数进行设置,让他和VIEW类同步,比如设置lengthDlg=lengthView,然后将对话框放在ONDRAW里,这样能实现对话框和VIEW视窗保持一样大小吗?)
10,如何设置按钮的大小和形状? (比如设置为一个圆形)
11,按钮如何进行属性设置,比如按钮具有 a ,b,c属性。 但按钮还有一个区域划分分别属于X集,Y集。
12,如何设置背景颜色?
[解决办法]
1. 递减索引计数,索引为0,系统会删除该内核对象。
2. 线程函数必须是类的静态程序函数或者是全局函数。类的成员函数默认带了个this指针
3. 如果recvfrom没有错误发生的话,返回的是接收的字节数。
4. HMutex=CreateMutex(NULL,true,"tickets");这句放到创建线程的前面,而不是后面。另外线程函数里面,break之前也需要释放互斥量(ReleaseMutex)
5.剪贴板是Windows系统一段可连续的。可随存放信息的大小而变化的内存空间,用来临时存放交换信息。内置在windows中,并且使用系统的内部资源RAM,或虚拟内存来临时保存剪切和复制的信息,可以存放的信息种类是多种多样的。剪切或复制时保存在剪贴板上的信息,只有再剪贴或复制另外的信息,或停电、或退出windows,或有意地清除时,才可能更新或清除其内容,即剪贴或复制一次,就可以粘贴多次。
6. 斜切是什么?
7.手动添加即可。
8.1在对话框类的OnPaint函数中绘制图形。
8.2你是要创建模态的还是非模态的?
8.3 A modal dialog box must be closed by the user before the application continues. A modeless dialog box allows the user to display the dialog box and return to another task without canceling or removing the dialog box.
绘图的操作请放到OnPaint函数中去做。
9. View类的OnSize函数中去MoveWinodw/SetWindowsPos()你的对话框(对话框作为View的子窗口,WM_CHILD)
10. 自绘按钮了,重写DrawItem虚函数,MSDN上有例子代码可以参考。
11. ModifyStyle() ??
12. 要设置什么的背景颜色?按钮吗?参考10