关于C语言窗口隐藏的问题
本帖最后由 --_--|| 于 2024-7-4 23:13 编辑本人想做一个便携工具,目标是无参数运行时进入配置界面,有参数时进入运行参数命令。
想做到在配置界面时窗口正常显示,而带参运行时窗口隐藏
本来用#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")宏定义可以完美隐藏,但不知道怎么再把窗口调出来
而用ShowWindow()可以做到自由隐藏和显示,但开始会出现cmd窗口闪一下才隐藏
今天特地来问问各位鱼兄,有没有好办法可以实现这个效果,感谢!!!{:10_254:}
/***********************
This Is An Example
************************/
#include <iostream>
#include <Windows.h>
//#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")//宏定义隐藏窗口
using namespace std;
void HideWindow();//隐藏窗口
void ShowWindow();//显示窗口
int config();//配置界面
int main(int argc,char *argv[])
{
HideWindow();
if (argc==1)//无参数运行,进入配置界面
{
ShowWindow();
config();
}
system(argv);//带参运行,运行参数
return 0;
}
void HideWindow()
{
HWND hwnd = GetForegroundWindow();
ShowWindow(hwnd,SW_HIDE);
}
void ShowWindow()
{
HWND hwnd = GetForegroundWindow();
ShowWindow(hwnd,SW_NORMAL);
}
int config()
{
printf("This is Config\n");
return 0;
}
#include <windows.h>
#include <stdlib.h>
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(message) {
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, TEXT("大家好,这是我的第一个窗口程序!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
static int config(void) {
AllocConsole();
system(__argv);
system("pause");
FreeConsole();
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
if(__argc != 1) return config();
static const TCHAR szAppName[] = TEXT("MyWindows");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
if(!RegisterClass(&wndclass)) {
MessageBox(NULL, TEXT("这个程序需要在 Windows NT 才能执行!"), szAppName, MB_ICONERROR);
return 0;
}
hwnd = CreateWindow(szAppName, TEXT("鱼C工作室"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
嗯,好的,谢谢大佬{:10_297:}
页:
[1]