首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

几个关于MFC的基础有关问题,大家有空过来回答一上啦

2012-09-09 
几个关于MFC的基础问题,大家有空过来回答一下啦。1,递减线程类和对象的一个使用技术?这个是什么原理呢?Clos

几个关于MFC的基础问题,大家有空过来回答一下啦。
1,
递减线程类和对象的一个使用技术?这个是什么原理呢?
  CloseHandle(handle);


2,

2,关于在类中的函数(线程),以其他函数作为其成员,出现的问题?
   

当我们在创建一个线程的时候,系统呢,也就是我们的运行代码需要调用一个线程函数启动一个线程。
   
  然而我们这个地方的线程函数是CChatDlg的一个成员函数。
  要想调用CchatDlg的成员函数,我们必须定义一个对象。
  我们必须要先产生一个对象,然后才能调用其内部的成员函数。
---------------------------------
  “ 然而对于我们的运行时代码来说,他怎么知道要产生哪个对象呢?这个对象又应该如何去产生?”
---------------------------------
  如果我们说要产生一个对象的时候,对象的构造函数要带参数,那么我们的运行时代码,怎么知道参数要如何传递呢?
  所以对于运行时代码来说,他要调用线程函数来启动我们的线程。
  那么是不需要产生的对象的。
   
  然后我们这里错误的将函数设置成了成员函数。

  这段话是孙鑫视频里的,不大懂,有人看到这些知道他要表达的是什么吗?


3,recvfrom返回接受到的字符长度?
  是哪个长度?

  所有字符,还是数据?


4,

C/C++ code
#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;}

这段代码运行的时候出现各种问题。哪儿有错吗?


5,
剪贴板究竟是什么,是一段内存地址,能够存储数据。(剪贴板有多大?)

还是就是一个对象,该对象会指向一段内存空间,使用的时候,就是移动该空间的数据。

6,斜切是怎么一个操作?

7,在Cdialog中存在一个OnOK的虚函数,我在定义一个派生自该类的类之后,在添加虚函数一个选项里,我并不能够找到该函数,为什么呢?
  (那里提示添加的虚函数只是一部分吗?)
   


8,单文档应用程序中,我在资源中添加一个对话框,然后用一个类与其关联,
  1,我如何能够在该对话框上画图?
   
  2,我如何设置该对话框的参数,包括其大小,在VIEW视窗中显示的位置,背景颜色之类的。 
   
  3,这里模态对话框是不是有一些限制?


  我想通过如下函数进行更改,但是基本无效
  BOOL CChessBoard::PreCreateWindow(CREATESTRUCT& cs) 
{
// TODO: Add your specialized code here and/or call the base class
CDC* dc;
dc=this->GetDC();
//dc=Borad.GetDC();
dc->MoveTo(0,0);
dc->LineTo(100,100);
//ReleaseDC(dc);
//cs.lpszName="Li";
cs.x=0;
cs.y=0;
cs.cx=100;
cs.cy=100;


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

热点排行