读书人

奇怪的有关问题折腾好久了。没有Mes

发布时间: 2012-08-15 16:57:17 作者: rapoo

奇怪的问题,折腾好久了。没有Messagebox就不显示按钮?

C/C++ code
// dllmain.cpp : 定义 DLL 应用程序的入口点。#include "windows.h"#include "stdafx.h"#define _T TEXTHWND hwnd;HINSTANCE hIns;HWND hwndButton = NULL;HANDLE hThread;HWND hwndDLG;DWORD WINAPI FunProc(LPVOID lparamater){    hwnd = FindWindow(NULL,_T("Warcraft III"));    hIns   =   (HINSTANCE)GetWindowLong(hwnd,   GWL_HINSTANCE);    hwndButton= CreateWindow(_T("Button"), _T("btn"), WS_VISIBLE|WS_CHILD, 5, 5, 80, 20,hwnd, NULL, GetModuleHandle(0), NULL);    if(hwndButton == NULL)    {        MessageBox(hwnd,_T("shibai"),_T("shibai"),MB_OK);    }    ShowWindow(hwndButton,SW_RESTORE);    return 0;}BOOL APIENTRY DllMain( HMODULE hModule,    DWORD  ul_reason_for_call,    LPVOID lpReserved    ){    switch (ul_reason_for_call)    {    case DLL_PROCESS_ATTACH:        {                hThread = CreateThread(NULL,0,FunProc,NULL,0,NULL);        }    case DLL_THREAD_ATTACH:    case DLL_THREAD_DETACH:    case DLL_PROCESS_DETACH:        WaitForSingleObject(hThread,0);    }    return TRUE;}


以上是Dllmain的代码

问题出现
C/C++ code
DWORD WINAPI FunProc(LPVOID lparamater){    hwnd = FindWindow(NULL,_T("Warcraft III"));    hIns   =   (HINSTANCE)GetWindowLong(hwnd,   GWL_HINSTANCE);    hwndButton= CreateWindow(_T("Button"), _T("btn"), WS_VISIBLE|WS_CHILD, 5, 5, 80, 20,hwnd, NULL, GetModuleHandle(0), NULL);    if(hwndButton == NULL)    {        MessageBox(hwnd,_T("shibai"),_T("shibai"),MB_OK);    }    ShowWindow(hwndButton,SW_RESTORE);    //不增加MessageBox(hwnd,_T("shibai"),_T("shibai"),MB_OK);    return 0;}


毫无效果

但是加入了MessageBox
C/C++ code
hwnd = FindWindow(NULL,_T("Warcraft III"));    hIns   =   (HINSTANCE)GetWindowLong(hwnd,   GWL_HINSTANCE);    hwndButton= CreateWindow(_T("Button"), _T("btn"), WS_VISIBLE|WS_CHILD, 5, 5, 80, 20,hwnd, NULL, GetModuleHandle(0), NULL);    if(hwndButton == NULL)    {        MessageBox(hwnd,_T("shibai"),_T("shibai"),MB_OK);    }    ShowWindow(hwndButton,SW_RESTORE);    MessageBox(hwnd,_T("shibai"),_T("shibai"),MB_OK);//增加了    return 0;

却有效果了!

这是怎么回事。。
应该如何修改?

[解决办法]
我估计是线程结束了造成的,你在线程里加一个消息循环试试看。

读书人网 >VC/MFC

热点推荐