SDK问答

作者: MagicalGuy | 来源:发表于2018-10-07 14:29 被阅读0次

    1、什么是windows 错误码?应该在什么时候获取? 使用什么函数获取? 获取到之后如何
    查看其所代表的内容?
    答:windows 错误码是不同的API有不同类型的错误返回值,在API结束之后获取,可以使用SetLastError函数获取,使用错误查找工具或者在VS监视栏中输入“err,hr”查看。
    2、如何为自己的函数定义windows 错误码,使用哪一个函数?
    答:SetLastError函数。
    3、在Virtual Stodio 中,在监视栏中输入什么字符,能够方便的查看错误码?
    答:err,hr字符。
    4、什么是句柄? 几个字节? 有什么用?
    答:在程序设计中,句柄是一种特殊的智能指针。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。在windows编程中,一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。
    5、什么是实例? WinMain 函数的四个参数分别代表什么意思?
    答:实例诸如一个窗口,按钮,图标,滚动条等,hInstance是程序实例的句柄,它是程序的加载地址,hPrevInstance这个参数已经废弃,IpCmdLine是由调用者传入的命令,nCmdShow是由调用者传入的int型参数。
    6、请问TCHAR,_tcslen 本质是什么?由谁控制? 使用通用字符需要包含什么头文件?
    答:T版的数据或者函数,本质上还是ascii编码或者unicode的编码,主要靠#indefine和typedef实现的,它只由编译环境自动选择,tchar.h头文件。
    7、窗口回调函数的原型是什么?
    答:原型如下:
    LRESULT CALLBACK WindowProc(
    HWND hwnd, //窗口句柄
    UINT uMsg, //消息ID
    WPARAM wParam, //消息参数1
    LPARAM lParam //消息参数2
    );
    8、使用SPY++查看QQ 登录框类名是什么? 聊天窗口类名是什么?
    答: TXGuiFoundation TXGuiFoundation
    9、窗口类结构体中hbrBackground 有什么用? 请尽量详细的说明。
    答:hbrBackground 可以刷新背景所用的画刷的句柄。Windows定义六种现有画刷:WHITE_BRUSH、LTGRAY_BRUSH、GRAY_BRUSH、DKGRAY_BRUSH、BLACK_BRUSH和NULL_BRUSH (也叫HOLLOW_BRUSH)。您可以将任何一种现有画刷选入您的装置内容中,就和您选择一种画笔一样。Windbws将HBRUSH定义为画刷的代号,所以可以先定义一个画刷代号变数:
    HBRUSH hBrush ;
    您可以通过呼叫GetStockObject来取得GRAY_BRUSH的代号:
    hBrush = GetStockObject (GRAY_BRUSH) ;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (GRAY_BRUSH);//设置窗口背景画刷的句柄

    10、什么是队列消息? 什么是非队列消息? 请各举出三个例子。
    答:队列消息包括系统和线程的消息队列,队列送到系统消息队列,然后送到线程消息队列,而非队列消息是直接送给目的窗口的过程。队列消息如WM_MOUSERMOVE,WM_CHAR,WM_PAINT。非队列消息有WM_ACTIVATE,应用系统发送WM_WINDOWPOSCHANGED,SendMessage函数也会发送非队列消息。

    11、PostMessage 和SendMessage 有什么区别?
    答:PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;而SendMessage必须等待其他程序处理消息后才返回,继续执行。PostMessage的返回值表示PostMessage函数执行是否正确;而SendMessage的返回值表示其他程序处理消息后的返回值。 PostMessage会造成消息的滞后性,而SendMessage则不会,但如果SendMessage消息处理失败,则会造成程序停止。

    12、下面这个结构体是窗口类结构体,请分别说明,各个字段是什么含义。
    答:各字段含义见注释。
    typedef struct tagWNDCLASSW {
    UINT style;//窗口类的风格(无符号32位整数)
    WNDPROC lpfnWndProc;//指向窗口过程的指针
    int cbClsExtra;//分派给窗口类的扩展的字节数
    int cbWndExtra;//分派给窗口实例的扩展的字节数
    HINSTANCE hInstance;.//实例句柄
    HICON hIcon;//类图标的句柄
    HCURSOR hCursor;//类鼠标指针的句柄
    HBRUSH hbrBackground;//刷新背景所用的画刷的句柄
    LPCWSTR lpszMenuName;//窗口类包含的菜单的名称
    LPCWSTR lpszClassName;//窗口类名
    }
    WNDCLASSW

    13、以下消息分别在什么时候触发
    WM_LBUTTONDOWN 点击鼠标左键
    WM_PAINT 绘制对象时
    WM_CLOSE 点击关闭程序按钮

    ==================

    1、窗口风格有三大风格,分别是什么? 各有什么特点?
    答:窗口三大风格是重叠窗口(Overlapped Window),弹出窗口(Popup Window),子窗口(Child Window),重叠窗口是顶级窗口,是缺省类型,它有边框,标题栏,客户区等,还有其他组件;弹出窗口也是顶级窗口,通常用于对话框或者Message对话框,它具有WS_POPUP窗口风格,隐含带有WS_CLIPSIBLINGS窗口风格。

    2、WM_COMMAND 作为控件的通知消息,wParam 与lParam 分别有什么含义?
    答:wParam是指32位的消息参数,是一个消息有关的常量值,也可能是窗口或控件的句柄, lParam 也是指32位的消息参数,通常是一个指向内存中数据的指针。

    3、什么是模态对话框? 什么是非模态对话框? 用什么创建?,
    答:模态对话框创建后一定要在用户关闭对话框后,其父窗口才能响应用户操作,否则父窗口便无法响应任何用户的操作,模态对话框函数自带消息循环;非模态对话框则是创建完后其父窗口不需要像模态窗口那样等到对话框关闭才能响应用户的操作,一样可以在对话框未关闭前响应用户操作,非模态对话框函数需要自己写消息循环。模态对话框使用DialogBox创建,非模态对话框使用CreateDialog完成。

    4、控件既可以用代码创建,也可以在对话框资源上拖拽,创建控件的函数是什么?。
    答:创建控件的函数是CreateWindow。

    5、WM_NOTIFY 和WM_COMMAND 的区别。
    答:WM_COMMAND和WM_NOTIFY都是控件通知消息,WM_NOTIFY和WM_COMMAND相比,是一种更灵活的消息格式,lParam中放的是一个称为NMHDR结构的指针。在wParam中放的则是控件的ID。最初Windows 3.x就有的控件,如Edit,Combo,List,Button等,发送的控件通知消息的格式是WM_COMMAND;而后期的Win32通用控件,如List View,Image List,IP Address,Tree View,Toolbar等,发送的都是WM_NOTIFY控件通知消息。

    6、使用通用(扩展)控件的准备工作都有哪些?
    答:在15版本以下的VS使用通用控件需要先包含<CommCtrl.h>,引入 #pragma comment(lib,"comct132.lib"),调用InitCommonControls初始化通用控件,使用CreateWindowEx函数创建通用控件。

    ==================
    1、什么是API? 什么是动态链接库? 写出常见的动态链接库及其大体功能。
    答:API是指API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组历程的能力,而又无需访问源码,或理解内部工作机制的细节。
    动态链接库的英文名称叫DynamicLinkableLibrary,它是microsoft在windows操作系统中实现共享函数库概念的一种实现方式。大多数与windows相关的磁盘文件如果不是程序模块,就是动态链接程序。
    常见的动态链接库及其大体功能:
    kernel32.dll Windows9x/Me中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理
    user32.dll Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息。
    gdi32.dll Windows GDI图形用户界面相关程序,包含的函数用来绘制图像和显示文字
    winspool.dll 一款文本编辑软件的库文件
    comdlg32.dll Windows应用程序公用对话框模块,用于例如打开文件对话框

    都包括什么?
    2、你所知道的文件操作
    答:文件操作包括新建打开文件CreateFile,删除指定文件DeleteFile,复制文件CopyFile,ReadFile读取文件,WriteFile写文件,GetFileAttribute获取文件属性,SetFileAttribute设置文件或目录的属性。

    3、什么是进程? 什么是线程?
    答:进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元,同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进程至少包括一个线程。

    4、Dll 可以导出什么?
    答:Dll可以导出类和函数。

    5、在编写dll 时,当我们想要导出一个东西时,有哪些方式? 分别如何实现?
    答:一、可以使用_declspec(dllexport),在函数声明前加_declspec(dllexport)。二、使用模块定义文件(扩展名为.def)导出,文件里面写
    LIBRARY
    DESCRIPTION "DLL"
    EXPORTS
    函数名

    6、我们使用dll 的时候,通常有两种方式。分别如何实现?
    答:见上一题。

    7、什么叫做对象库? 什么叫做导入库?
    答;对象库是一个扩展名为.LIB的文件,在这个文件的代码在运行链接器进行静态链接时被添加到程序的.EXE文件中。导入库是一种特殊的形式的对象库文件,后缀名和对象库一样,链接器用它来解析源代码中的函数调用。但是导入库不包含任何代码,它们只给链接器提供信息来建立EXE文件中用于动态链接的重定位表格。

    8、什么叫做名称粉碎? 有什么用处?
    答:名称粉碎是函数名称相同的函数在C中出现重定义,然而在C++中用于函数重载,相同的名称会粉碎成不同的函数内存地址,从而区别调用的是什么函数,由此可以实现多态。

    相关文章

      网友评论

          本文标题:SDK问答

          本文链接:https://www.haomeiwen.com/subject/pcpkaftx.html