我总是报错:(,一般你们是怎么做的
解决方案 »
- CBCGPGridCtrl如何自适应列宽啊~高手们帮帮忙
- 哪位朋友可以给一个使用CMemDC绘制位图的示例?
- 关于VC编写的UDP接收控件“接受失败”问题
- vc是否有自带的函数,用来清空数组或者CString类型字符串?
- 高手求教 VC程序如何获取IE网页加载是否已完毕
- 数据库基本问题,100分相送,请进!!
- 希望认识更多的朋友
- 菜鸟求救:(
- 怎样做到象WINZIP一样,在列表控件中双击文件,就可以用相应的应用程序打开该文件?
- vs2008中如何添加自己编写的DLL
- 请热心大侠帮俺编一个通过smtp发信的程序。100分购买!!
- 关于自己写的wsock32.dll,为什么总是内存冲突?[在线等待!急!!!]
我又这么写还是不行:(
这个方法可以,我刚用了。
HINSTANCE hInst;
hInst = GetModuleHandle("你的dll的文件名称");
DialogBoxA(hInst,MAKEINTRESOURCE(IDD_DIALOG1),NULL,CountdownDialogProcedure);
你先加入一个对话框资源然后给他创建一个类,然后作一个函数用于引出
BOOL __declspec(dllexport)ShowDlg()
{ AFX_MANAGE_STATE(AfxGetStaticModuleState());//这句必须有
CMYDlg dlg;
dlg.Domodal()
}
在外面调用ShowDlg()就OK了
和编写再一个程序中完全一样
这个函数可以处理应用程序的消息。
LRESULT CALLBACK CountdownDialogProcedure(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE; case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
return DefWindowProc(hwnd,message,wParam,lParam);
就不行,窗口好像死了一样的没反映,否则的话可以正常工作,但是还有个问题,dialogbox函数到底以谁作为父窗口,我发现好像不是以调用的exe作为父窗口,由于我是拦截鼠标的动作然后弹出对话框的,这样一来好像以鼠标所在的窗口当作了父窗口,我程序强行退出,鼠标所在的窗口的程序也死掉了,但是我没有牵扯倒它呀我的代码是这样的LRESULT __declspec(dllexport)__stdcall CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(HC_ACTION==nCode)
{
if (wParam == WM_RBUTTONUP)
{
LPMOUSEHOOKSTRUCT msinfo;
msinfo=(LPMOUSEHOOKSTRUCT)lParam;
CRect rt(0,0,20,20);
if(PtInRect(&rt,msinfo->pt)){
sndPlaySound(msg+"sound\\num-.wav",SND_ASYNC);
HINSTANCE hInst1;
hInst1 = GetModuleHandle("hodll.dll");
DialogBoxA(hInst1,MAKEINTRESOURCE(IDD_DIALOG2),NULL,CountdownDialogProcedure);
}
}
}
return CallNextHookEx(hms, nCode, wParam, lParam);
}
只要dlg能够弹出了,他自己就能处理各种消息了。反正exe和dll程序都不能自己启动,不想太快探出可以在入口函数中先创建一个对话框,并让对话框监视消息,受到消息后才弹出也是一样的。
呵呵,我也学习其他的方法ing
我现在程序可以达到指定的效果,但是不是很理想,就像我上面所说,仿佛父窗口是鼠标所在的窗口,真是奇怪,这是为什么,我只是捕捉鼠标的动作啊,并没吧鼠标所在窗口当父窗口句柄啊,够怪,反正我觉得消息处理方面有点问题,哪位有比较好的dll弹出对话框的例子可以让我参考一下吗,万分感谢,一定另外加分
你应该手动填写你的消息啊!
在Win32里面也是可以嵌入mfc的代码的。
你只要响应消息循环就可以了。
如果让dlg一启动,直接就运行代码,可以在WM_INITITALIZE中实现。
我这么说把,我用
DialogBoxA(hInst1,MAKEINTRESOURCE(IDD_DIALOG2),NULL,CountdownDialogProcedure);
来弹出窗口,IDD_DIALOG2是我画的一个窗口的界面
CountdownDialogProcedure是我创建的窗口的消息处理函数
关键就是处理这个函数的代码,用api写过窗口的朋友应该知道
这个函数相等于WndProc并且最后一句代码应该是
return DefWindowProc (hwnd, message, wParam, lParam)
但是我不行,这样就会窗口没反映反而不处理任何消息
如果我直接return 一个数,ok窗口可以响应消息了,现在可以拖动,可以关闭,但是,关闭后窗口又会自动打开,要点了20几下关闭才能关闭窗口,我估计是消息的问题,照例说调用windows默认的defwindowproc应该没问题,但是我为什么不行呢就是,奇怪啊,我没胡涂只是被这个问题弄的烦死了,希望各位指点
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()); CTestDlg Dlg_test;
if(IDOK == Dlg_test.DoModal())
{
return 1;
}
return 0;
}