C+中的控制台+;应用 我想在C++应用程序中实现控制台。比如ftp。或(IIRC)sql,一旦连接到服务器
有人知道一个实现这一点的库吗?最好是自动完成之类的?我的搜索结果只有“如何构建一个C++控制台应用程序”,我知道如何做。C+中的控制台+;应用 我想在C++应用程序中实现控制台。比如ftp。或(IIRC)sql,一旦连接到服务器,c++,C++,有人知道一个实现这一点的库吗?最好是自动完成之类的?我的搜索结果只有“如何构建一个C++控制台应用程序”,我知道如何做。实现了你想要的特性。如果文件名自动完成不是您需要的排序,请使用例程。如果您还想自动完成,您可以 查看(轻量级readline替代品)的示例 基本上,您必须在循环中解析Userinput行 非常基本的CommadLineInterface示例: 在while循环中显示提示和读取输入 在\n 将标记中的行至少拆分为空格(然后;)将第一个字符串作为Commandcmd,其余作为arg
实现了你想要的特性。如果文件名自动完成不是您需要的排序,请使用例程。
如果您还想自动完成,您可以 查看(轻量级readline替代品)的示例 基本上,您必须在循环中解析Userinput行 非常基本的CommadLineInterface示例:\n
空格
(然后;
)将第一个字符串作为Commandcmd
,其余作为args
李>
dispatch(cmd,args)代码>
对于Windows:使用
alloconsole()
将文本控制台连接到GUI应用程序和freopen(“CON”,“w”,stdout)
重定向,并printf()
输出文本
示例代码:
#include <stdio.h>
#include <stdlib.h>
// Function prototypes.
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam );
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow );
// In a C++ Windows app, the starting point is WinMain().
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow )
{
// these next few lines create and attach a console
// to this process. note that each process is only allowed one console.
AllocConsole() ;
freopen( "CON", "w", stdout ) ;
printf("HELLO!!! I AM THE CONSOLE!\n" ) ;
WNDCLASSEX wc = { 0 };
wc.cbSize = sizeof( WNDCLASSEX ) ;
wc.cbClsExtra = 0; // ignore for now
wc.cbWndExtra = 0; // ignore for now
wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
wc.hInstance = hInstance;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = TEXT(" ");
wc.lpszMenuName = 0;
wc.style = CS_HREDRAW | CS_VREDRAW; // Redraw the window
RegisterClassEx( &wc );
HWND hwnd = CreateWindowEx( 0, TEXT(" "), TEXT("window's title!"), WS_OVERLAPPEDWINDOW, 10, 10, 200, 200, NULL, NULL, hInstance, NULL );
ShowWindow(hwnd, iCmdShow );
UpdateWindow(hwnd);
MSG msg;
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return msg.wParam; // return from WinMain
}
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam )
{
switch( message )
{
case WM_CREATE:
// upon creation, let the speaker beep at 50Hz, for 10ms.
Beep( 50, 10 );
printf("HELLO!!! I AM THE CONSOLE!\n" ) ;
return 0;
break;
case WM_PAINT:
{
// we would place our Windows painting code here.
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint( hwnd, &ps );
// draw a circle and a 2 squares
Ellipse( hdc, 20, 20, 160, 160 );
Rectangle( hdc, 50, 50, 90, 90 );
Rectangle( hdc, 100, 50, 140, 90 );
printf("HELLO!!! I AM THE CONSOLE!\n" ) ;
EndPaint( hwnd, &ps );
}
return 0;
break;
case WM_LBUTTONDOWN:
printf("STOP POKING MEEE!!!\n") ;
break;
case WM_DESTROY:
PostQuitMessage( 0 ) ;
return 0;
break;
}
return DefWindowProc( hwnd, message, wparam, lparam );
}
#包括
#包括
//功能原型。
LRESULT回调WndProc(HWND HWND,UINT消息,WPARAM WPARAM,LPARAM LPARAM);
int WINAPI WinMain(HINSTANCE HINSTANCE、HINSTANCE hPrevInstance、LPSTR szCmdLine、int iCmdShow);
//在C++ Windows应用程序中,起点是WINMINE()。
int WINAPI WinMain(HINSTANCE HINSTANCE、HINSTANCE hPrevInstance、LPSTR szCmdLine、int iCmdShow)
{
//接下来的几行创建并连接控制台
//请注意,每个进程只允许有一个控制台。
allocsole();
弗雷奥普(“CON”、“w”、stdout);
printf(“你好!!!我是控制台!\n”);
WNDCLASSEX wc={0};
wc.cbSize=sizeof(WNDCLASSEX);
wc.cbClsExtra=0;//暂时忽略
wc.cbWndExtra=0;//暂时忽略
wc.hbrBackground=(HBRUSH)GetStockObject(白色画笔);
wc.hCursor=LoadCursor(空,IDC_箭头);
wc.hIcon=LoadIcon(空,IDI_应用程序);
wc.hInstance=hInstance;
wc.lpfnWndProc=WndProc;
wc.lpszClassName=文本(“”);
wc.lpszMenuName=0;
wc.style=CS_HREDRAW | CS_VREDRAW;//重新绘制窗口
注册类别(&wc);
HWND HWND=CreateWindowEx(0,文本(“”),文本(“窗口的标题!”),WS_重叠窗口,10,10,200,200,NULL,NULL,NULL);
显示窗口(hwnd、iCmdShow);
更新窗口(hwnd);
味精;
while(GetMessage(&msg,NULL,0,0))
{
翻译信息(&msg);
发送消息(&msg);
}
return msg.wParam;//从WinMain返回
}
LRESULT回调WndProc(HWND HWND,UINT消息,WPARAM WPARAM,LPARAM LPARAM)
{
开关(信息)
{
案例WM_创建:
//创建后,让扬声器以50Hz的频率嘟嘟响10毫秒。
嘟嘟声(50,10);
printf(“你好!!!我是控制台!\n”);
返回0;
打破
案例WM_油漆:
{
//我们将把我们的Windows绘画代码放在这里。
HDC-HDC;
PAINTSTRUCT-ps;
hdc=开始喷漆(hwnd和ps);
//画一个圆和两个正方形
椭圆(hdc,20,20,160,160);
矩形(hdc,50,50,90,90);
矩形(hdc,100,50,140,90);
printf(“你好!!!我是控制台!\n”);
端漆(hwnd和ps);
}
返回0;
打破
案例WM_LBUTTONDOWN:
printf(“停止戳米!!!\n”);
打破
案例WM_销毁:
PostQuitMessage(0);
返回0;
打破
}
返回DefWindowProc(hwnd、message、wparam、lparam);
}
当你可以创建一个提供相同功能的C++控制台应用程序时,为什么要重新发明轮子?这叫做终端仿真器。我不知道你为什么需要它,但…它可能在某些方面有所帮助。@JLaw:我不想重新发明法律,这就是我为什么要问的原因。我希望有一个库,我可以提供我可能的命令,并将为我杜其余(函数调用,自动完成),所以我不必重新发明它。