RT,我現在用C++builder開發了一個中型程式,需要在A窗體中呼叫這個B窗體。呼叫后B窗體打開,當最小化的時候,人為的在A窗體上點擊再次呼叫B窗體,怎么樣讓B窗體不重復打開,原來最小化的B窗體前置顯示呢?
uj5u.com熱心網友回復:
FormB->WindowState = wsNormal;uj5u.com熱心網友回復:
// "怎么樣讓B窗體不重復打開"
static BYTE b = 0;
void __fastcall TForm1::btn1Click(TObject *Sender)
{
TAboutBox* AboutBox = new TAboutBox(Application);
if (b == 0)
AboutBox->Show();
b++;
}
uj5u.com熱心網友回復:
不好意思,大家都沒有明白我的意思,我的表達有問題,我的意思差不多是第一次雙擊inspector.exe,那么這個窗體打開了,第二次再次雙擊inspector.exe的時候,該程式不會重復執行,第一次打開的會在最前端執行,從后臺調出。uj5u.com熱心網友回復:
打開Form之前判斷一下啊if(Application->FindComponent("FormB") != NULL)
{
new 一個show出來
}
else
{
直接show
}
uj5u.com熱心網友回復:
用互斥,程式啟動時嘗試打開互斥:如果打不開,就創建一個互斥并繼續運行,創建一個記憶體映射,將主表單的句柄寫到共享記憶體中。
如果能打開,說明已經有一個實體存在了,打開記憶體映射,從共享記憶體中讀出上一個實體的主表單句柄,將其Bring到前臺,然后本行程退出。
uj5u.com熱心網友回復:
HANDLE hMutex;
const char* txt = "哇哈哈";
//---------------------------------------------------------------------------
USEFORM("shell.cpp", FormMain);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
hMutex= CreateMutex(NULL,FALSE,txt);
// 檢查錯誤代碼
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(m_hMutex);
exit(EXIT_SUCCESS);
}
Application->Initialize();
Application->Title = "哇哈哈";
Application->CreateForm(__classid(TFormMain), &FormMain);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
uj5u.com熱心網友回復:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
try
{
HWND hWnd;
hWnd = FindWindowEx(NULL, NULL, NULL, "軟體名");
if(hWnd != NULL) //找到舊進程
{
ShowWindow(hWnd, SW_SHOW); //顯示舊進程
//ShowWindow( hWnd, SW_RESTORE ); // BringWindowToTop( hWnd ); //
SetForegroundWindow(hWnd); //前置舊進程
return 0; //退出當前進程
uj5u.com熱心網友回復:
這個是打開exe正解
uj5u.com熱心網友回復:
妖哥說的對,只是沒有給出提示性的代碼WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HANDLE hMutex = CreateMutex(NULL,False,"FormA"); //創建互斥量
if (hMutex==NULL || ::GetLastError()==ERROR_ALREADY_EXISTS)
{
ShowMessage("Exits");
HANDLE hWindow = FindWindow(NULL,"FormA"); //獲得已經運行實體的句柄
SendMessageA(hWindow,WM_SYSCOMMAND,SC_RESTORE,0); //恢復最小化的前實體
SetForegroundWindow(hWindow); //使前實體處于激活狀態
Application->Terminate(); //結束本實體
}
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/156777.html
標籤:基礎類
下一篇:動態顯示檔案內容
