win32sdk的父窗口,delphi dll里的子窗口 上面的按钮,一点就卡死 如题, win32 sdk编译的EXE,载入delphi写的dll,dll创建子窗口,子窗口上的按钮,一点击,整个程序就卡死,但是在子窗口上怎么点都不会. 其他控件也试过,都一样,还没有执行事件代码,就卡死了. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我又试了下,我把CreateParented 换成 Create创建窗口,就没事了,为什么会这样呢. 不好意思各位,我弄错了,没有用CreateParented的时候,根本没有ChildWindow属性,使用SetWindowLong来设置style增加ChildWindow属性后,还是一样的情况,卡死. function CC_Plugininit(CCVersion:PAnsiChar;CChWnd:HWND;hInst:Cardinal;var CplhWnd:HWND;var CplhIcon:HICON;shortname:PAnsiChar):UINT;stdcall;begin hWndMain := CChWnd; Form1 := TForm1.CreateParented(CChWnd); //Form1 := TForm1.Create(nil); CplhWnd := Form1.Handle; CplhIcon := LoadIcon(HInstance,'MYICON'); lstrcpy(shortname,'我是Delphi'); CC_InitFunction(hInst); CC_Addtolist('我是Delphi',RGB(255,0,0)); Result := 1;end;这个函数被导出,提供给SDK编译的EXE调用.HWND CplhWnd = NULL; HICON CplhIcon = NULL; char szTabCaption[32] = {0}; pPluginInfo.CC_Plugininit("2.6",hWndMain,hInst,CplhWnd,CplhIcon,szTabCaption); if (CplhWnd != NULL && IsWindow(CplhWnd)) { pPluginInfo.hPluginWnd = CplhWnd; TCITEM tie; int nIcon = -1; if (CplhIcon != NULL) { nIcon = ImageList_AddIcon(hImageList,CplhIcon); } tie.mask = TCIF_TEXT|TCIF_IMAGE|TCIF_PARAM; tie.iImage = nIcon; tie.pszText = (LPSTR)szTabCaption; tie.lParam = nPos; TabCtrl_InsertItem(hWndTabCtrl,nPos,&tie); //SetWindowLong(CplhWnd,GWL_STYLE,WS_CHILDWINDOW|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN); SetParent(CplhWnd,hWndTabCtrl); RECT rc; GetClientRect(hWndTabCtrl,&rc); rc.right -= 4; rc.left += 1; rc.top += 22; rc.bottom -= 24; MoveWindow(CplhWnd,rc.left,rc.top,rc.right,rc.bottom,TRUE); //SetWindowPos(CplhWnd,HWND_TOP,rc.left,rc.top,0,0,SWP_NOSIZE); ShowWindow(CplhWnd,SW_SHOW); }这个是在EXE里LoadLibrary dll后,GetProcAddress得到函数地址,然后调用,在参数中返回DLL创建的窗口句柄,执行SetWindowLong设置窗口风格,然后使用SetParent设置窗口的父级. 问题出在delphi创建的这个窗口,如果风格设置为ws_childwindow就出现无法响应事件并且程序假死的问题,如果是ws_popup就不会,但是这样的风格不是我希望的.dll里窗口的属性是默认的.除了将BorderStyle设置为bsNone外没有修改其他的 createParented会依据传进来的参数,设置窗口类的wndParent。与childwindow不是一回事。childwindow类似button这种效果。不知道你要的是MDI效果还是ChildWindow的效果? 但是不管用CreateParented还是Create,只要设置成WS_ChildWindow的风格就出现这个问题. try:在创建dll中的form时,去除WS_OVERLAPPEDWINDOW风格,同时设置WS_ChildWindow风格 我用spy++看了,是没有WS_OVERLAPPEDWINDOW风格的,如果加上这个风格,就会出现边框和标题栏. DELPHI创建的子窗口上,鼠标移动,点击左右键都没问题,在按钮上单击双击右键都可以,就是一点左键就卡死.并没有映射任何的事件. 晕啊,我刚刚又试了一下,在子窗口上增加OnClick消息,在窗口上点击,事件的代码可以正常执行,没有什么问题. 试试将子窗口风格设置为ToolWindow 组件的区别 memo宽度是定值,怎么计算Memo的高度? IdTcpServer数据读取问题 在程序里实现从SQL SERVER往文本格式导出数据 排序问题,答对有分哦,绝不食言! 谁能给我提供一个 实现数学四则混和运算的程序吗?(急) 哪里有短信网关? 关于提取文件路径和文件名 关于combobox很简单的问题 本人的RXLib2.75包,在Delphi6中Install,總是報告VclUtils.pas中有錯,誰有 将PDF文件打包在资源文件,如何不用另存,直接用外部PDF阅读器打开? delphi如何调用系统默认的PDF阅读软件?
begin
hWndMain := CChWnd;
Form1 := TForm1.CreateParented(CChWnd);
//Form1 := TForm1.Create(nil);
CplhWnd := Form1.Handle;
CplhIcon := LoadIcon(HInstance,'MYICON');
lstrcpy(shortname,'我是Delphi');
CC_InitFunction(hInst);
CC_Addtolist('我是Delphi',RGB(255,0,0));
Result := 1;
end;
这个函数被导出,提供给SDK编译的EXE调用.HWND CplhWnd = NULL;
HICON CplhIcon = NULL;
char szTabCaption[32] = {0};
pPluginInfo.CC_Plugininit("2.6",hWndMain,hInst,CplhWnd,CplhIcon,szTabCaption);
if (CplhWnd != NULL && IsWindow(CplhWnd))
{
pPluginInfo.hPluginWnd = CplhWnd;
TCITEM tie;
int nIcon = -1;
if (CplhIcon != NULL)
{
nIcon = ImageList_AddIcon(hImageList,CplhIcon);
}
tie.mask = TCIF_TEXT|TCIF_IMAGE|TCIF_PARAM;
tie.iImage = nIcon;
tie.pszText = (LPSTR)szTabCaption;
tie.lParam = nPos;
TabCtrl_InsertItem(hWndTabCtrl,nPos,&tie);
//SetWindowLong(CplhWnd,GWL_STYLE,WS_CHILDWINDOW|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN);
SetParent(CplhWnd,hWndTabCtrl);
RECT rc;
GetClientRect(hWndTabCtrl,&rc);
rc.right -= 4;
rc.left += 1;
rc.top += 22;
rc.bottom -= 24;
MoveWindow(CplhWnd,rc.left,rc.top,rc.right,rc.bottom,TRUE);
//SetWindowPos(CplhWnd,HWND_TOP,rc.left,rc.top,0,0,SWP_NOSIZE);
ShowWindow(CplhWnd,SW_SHOW);
}这个是在EXE里LoadLibrary dll后,GetProcAddress得到函数地址,然后调用,在参数中返回DLL创建的窗口句柄,执行SetWindowLong设置窗口风格,然后使用SetParent设置窗口的父级. 问题出在delphi创建的这个窗口,如果风格设置为ws_childwindow就出现无法响应事件并且程序假死的问题,如果是ws_popup就不会,但是这样的风格不是我希望的.dll里窗口的属性是默认的.除了将BorderStyle设置为bsNone外没有修改其他的
childwindow类似button这种效果。
不知道你要的是MDI效果还是ChildWindow的效果?