如何在dll函数中往屏幕上显示一个Label或者edit控件?十万火急

时间:2021-08-12 20:35:59
需要写一个dll,调用其中的函数可以直接在屏幕上显示以指定内容。不能用ocx,只能用dll,哪位高人会,还请不吝赐教,十万火急,谢谢。

10 个解决方案

#1


把窗体句柄,用参数的方式传递给 DLL 中的函数,不就可以了?

#2


就显示一个控件?

#3


创建包含VCL组件的DLL
    DLL的一个好处在于用一种开发工具创建的DLL可以用于另一不同的开发工具编写的程序使用。当在调用应用程序中使用了包含了VCL组件(比如窗体)的DLL,则必须提供输出接口路径以用于标准的传统调用来避免C++名称不匹配,并且不需要所调用的应用程序支持VCL库。为了创建能够输出的VCL组件,可使用运行时程序包,有关信息可以参阅第10章。
    比如,假设要创建一个DLL,显示如下简单的对话框(如图3-1所示)。
    这个对话框DLL的代码如下:


 

    这个例子代码显示对话框,并在Yes按钮被按下时在私有数据成员returnValue中存储true值,否则,returnValue值为false。公用的GetReturnValue()函数接收returnValue的当前值。
    为了调用这个对话框,并确定是哪一个按钮被按下,调用的应用程序调用输出函数InvokeYesNoDialog()。这个函数作为C链(以避免C++名称不匹配)和标准的传统C调用的一个输出函数在DLLMAIN.H中声明,在DLLMAIN.CPP中定义。
    在DLL中使用标准的C函数作为接口,不管是否是用C++Builder创建的,任意调用的应用程序都能使用这个DLL。要求支持这个对话框的VCL功能被链接入DLL本身,而所调用的应用程序不需要了解它的任何东西。
    要注意的是,当创建了一个VCL的DLL时,所需的VCL组件被链接入DLL,将导致一定量的越界(overhead),通过将几个组件结合进一个只需要VCL支持组件的一个备份的DLL中可以压缩这种越界,这将使应用程序的大小最小化。

#4


图片见http://www.bccn.net/Article/kfyy/cjj/jc/200512/2662.html

#5


楼主的意思是,光秃秃的只显示一个button。

#6


是不是需要弄个透明窗体呀

#7


引用 5 楼 fbmsyu 的回复:
楼主的意思是,光秃秃的只显示一个button。

哈哈 有意思、

#8


创建一个子窗体(如Button或Edit),然后将用API:SetParent将其父窗体设置成桌面即可。

#9


先Create一个label或者edit控件,其父指针可以为空,或者为桌面

m_btn.Create("按钮",WS_CHILD | BS_DEFPUSHBUTTON,CRect(0,0,100,100), NULL,123);
m_btn.ShowWindow(SW_SHOWNORMAL);
m_btn.MoveWindow(0,0,200,50); //移动到你要的屏幕上的位置

#10


上面是在屏幕上显示一个button,label或者edit控件也是类似的

#1


把窗体句柄,用参数的方式传递给 DLL 中的函数,不就可以了?

#2


就显示一个控件?

#3


创建包含VCL组件的DLL
    DLL的一个好处在于用一种开发工具创建的DLL可以用于另一不同的开发工具编写的程序使用。当在调用应用程序中使用了包含了VCL组件(比如窗体)的DLL,则必须提供输出接口路径以用于标准的传统调用来避免C++名称不匹配,并且不需要所调用的应用程序支持VCL库。为了创建能够输出的VCL组件,可使用运行时程序包,有关信息可以参阅第10章。
    比如,假设要创建一个DLL,显示如下简单的对话框(如图3-1所示)。
    这个对话框DLL的代码如下:


 

    这个例子代码显示对话框,并在Yes按钮被按下时在私有数据成员returnValue中存储true值,否则,returnValue值为false。公用的GetReturnValue()函数接收returnValue的当前值。
    为了调用这个对话框,并确定是哪一个按钮被按下,调用的应用程序调用输出函数InvokeYesNoDialog()。这个函数作为C链(以避免C++名称不匹配)和标准的传统C调用的一个输出函数在DLLMAIN.H中声明,在DLLMAIN.CPP中定义。
    在DLL中使用标准的C函数作为接口,不管是否是用C++Builder创建的,任意调用的应用程序都能使用这个DLL。要求支持这个对话框的VCL功能被链接入DLL本身,而所调用的应用程序不需要了解它的任何东西。
    要注意的是,当创建了一个VCL的DLL时,所需的VCL组件被链接入DLL,将导致一定量的越界(overhead),通过将几个组件结合进一个只需要VCL支持组件的一个备份的DLL中可以压缩这种越界,这将使应用程序的大小最小化。

#4


图片见http://www.bccn.net/Article/kfyy/cjj/jc/200512/2662.html

#5


楼主的意思是,光秃秃的只显示一个button。

#6


是不是需要弄个透明窗体呀

#7


引用 5 楼 fbmsyu 的回复:
楼主的意思是,光秃秃的只显示一个button。

哈哈 有意思、

#8


创建一个子窗体(如Button或Edit),然后将用API:SetParent将其父窗体设置成桌面即可。

#9


先Create一个label或者edit控件,其父指针可以为空,或者为桌面

m_btn.Create("按钮",WS_CHILD | BS_DEFPUSHBUTTON,CRect(0,0,100,100), NULL,123);
m_btn.ShowWindow(SW_SHOWNORMAL);
m_btn.MoveWindow(0,0,200,50); //移动到你要的屏幕上的位置

#10


上面是在屏幕上显示一个button,label或者edit控件也是类似的