跟着孙鑫VC视频学习,需要比较深入的学习windowSDK编程吗?
不是说想学习VC/MFC 就要比较深入的了解windowSDK编程吗。。
但是我只是会 ,设计类。注册类,创建类,显示类。。消息循环。
就是最最最基础的SDK代码
我就只有这种水平,,学习VC 会比较辛苦吗??
是否还要加强学习SDK呢。。
请高手帮忙啊!!!

解决方案 »

  1.   

    不用深入研究,主要用MFC开发的话,SDK原理明确就行了,除非你在做游戏软件
      

  2.   

    好像孙鑫那个只有一节课的内容讲了sdk的吧?只要了解一些就行了,可以帮助理解mfc就可以了
      

  3.   

    你要知道VC一般是用来做那方面开发的你就知道应该怎么去学习了,学VC没有SDK基础是不敢想象的,以后你就知道,SDK编程基础的重要性,没有一定的SDK基础就来学习MFC,到时候遇到问题也无从下手,原理不清,结果是被MFC牵着你,而很难有驾驭它的那种感觉。《windows程序设计》第五版,全球公认的windows SDK编程经典之作,好好看它,没错的。侯捷那本《MFC深入浅出》畅销N多年了吧?你看看人家大师怎么说的....
      

  4.   

    呵呵,学习SDK好啊 不过不用太过深入 浪费时间 差不多就行了,多学习一下数据结构、操作系统之类的。
      

  5.   

    1.    第一步注册窗口类型
    一个窗体类存储了以下信息:
    窗体类型,控制这个窗体的程序(回调函数),小图标大图标,背景染色,指定这个窗体属于哪个实例(属于哪个进程),窗体的菜单栏等。
    那么存储这些消息的结构是哪个呢:就是他拉WNDCLAS***(**表示扩展风格)存储了注册一个窗体所需要填写的各个属性。
       *NDCLAS*** wc;
        wc.cbSize       = sizeof(WNDCLAS***);
        wc.style         = 0;
        wc.lpfnWndProc   = WndProc;
        wc.cbCl***tra    = 0;
        wc.cbWndExtra    = 0;
        wc.hInstance     = hInstance;
        wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
        wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
        wc.lpszMenuName  = NULL;
        wc.lpszClassName = g_szClassName;
        wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);    if(!RegisterClas***(&wc))
        {
            MessageBox(NULL, "Window Registration Failed!", "Error!",
                MB_ICONEXCLAMATION | MB_OK);
            return 0;
        }
    当我们填写好了各个成员变量后就可以调用RegisterClas***进行注册咯。
    这段代码我们在WinMain()中注册我们的窗体类,下面解释一下WNDCLAS***各个成员的意思。
    cbSize 
    WNDCLAS***的大小,固定的sizeof(WNDCLAS***);因为要分配内存!所以需要指定,否则你的窗体会那么安稳的在屏幕上显示吗?
    style 
    风格类型具体的看MSDN也可以为空
    lpfnWndProc 
    为该窗体指定一个处理过程
    cbCl***tra 
    为该类型在内存中分配额外数据数量,通常为空或默认。
    cbWndExtra 
    在每个该类型窗体中分配额外数据数量。通常为空或默认。 
    hInstance 
    程序的实例(说明该类型窗体属于那个进程的)通常这个我们设置为WinMain()中的主进程实例(主窗口嘛!)
    hIcon 
    大图(通常为32*32的ICON格式图表)标。当用户按Alt+Tab的时候显示的那个图标
    hCursor 
    当鼠标在我们的窗体范围内的时候要显示的鼠标(默认为系统当前鼠标)
    hbrBackground 
    设置我们该窗体类型的背景颜色
    lpszMenuName 
    在我们的窗体中所使用的菜单资源名称
    lpszClassName 
    标示该类型的名称
    hIconSm 
    小图标(通常为16*16的ICON格式文件)。会显示在任务栏和窗体的左上角
    2.    第二步创建窗口
    当窗体注册后我们就可以调用CreateWindowEx创建该类型的窗体了
    HWND hwnd;
        hwnd = CreateWindowEx(
            W*_**_CLIENTEDGE,
            g_szClassName,
            "The title of my window",
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
            NULL, NULL, hInstance, NULL);
    参数1  W*_**_CLIENTEDGE 扩展的窗体风格,这样我们就设置了向凹陷的边框。关于其它风格在MSDN中有具体的说明在这里就不多说了因为(真的很多)。
    参数2  g_szClassName我们拥有的类型名称,告诉系统你需要创建一个何种类型的窗体。既然我们想创建我们刚刚注册的类型窗体,那么我就指定该类型的名称(唉!中文真的很难描述这个步骤。)
    之后的参数为我们窗体的标题
    参数3  参数4    指定左上角坐标
    参数5  参数6    指定右下角坐标
    参数7  指定父窗口如果没有为NULL
    参数8  要使用的菜单句柄
    参数9  这个就不用多说了吧!我自己都嫌烦了
    参数10 这个还是先在稍微说明一下吧!如果我能写完的话这个参数会在MDI部分讲解。这个参数指向一个传递给窗体的数值通过WM_CREATE 的lpParam参数中的CREATESTRUCT结构。也可以NULL。
    3.    第三步消息循环
    由于该方法创建的时一个模式窗体所以需要一个消息循环否则我们的这个窗体一闪而过。并且这部分是整个程序的核心,几乎windows程序中所作每件事都是通过这部分控制的。
        while(GetMessage(&Msg, NULL, 0, 0) > 0)
        {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
        }
        return Msg.wParam;
    GetMessage从程序的消息队列中获得一个消息。任何时候用户点击鼠标移动鼠标,点击菜单,按下键盘上任何一个按键或做其它事情,系统都会产生消息并进入你的程序的消息队列。通过调用GetMessage()可以请求到下一个可以使用的消息,之后该消息就会从消息队列中移出被你的程序所处理。
    TranslateMessage做一些额外的处理。如键盘处理。键盘事件类似产生附和着WM_KEYDOWN消息的WM_CHAR消息。
    DispatchMessage会将该window产生的消息转发出去
      

  6.   

    sdk也需要了解.这个是你提高的本钱.不懂原理.就很难在应用上提高。只是肤浅的在表面罢了