有请guotianyu2000,你那个以main开始的windows程序有事请教

ForestDB 2012-12-21 10:30:42
首先声明,这个程序我完全能理解在干什么,只是有不少细节还理解的不深,需要指教。

我所谓的有出处,是指是你自己想出来的么?
能解释下console子系统和Windows API的联系,还有main和WinMain?
还有可能运行时不显示那个console窗口?(当然现在显示是很正常的,因为首先它是个console应用,然后新开了线程创建窗口)
有无可能用WinMain开始,但是又带个console窗口?

我想我最疑惑的是:我一直没有用C++开发过窗口,即像这里的“纯”C++,当然我知道这个纯其实很好笑,我也经常笑这种纯论;只是我没有找到像这个程序的一个入口,纯粹由传统的main做入口,我想是我对Windows不太熟悉导致的吧,当然也跟Windows“隐藏”了不少东西有关,总是那么朦朦胧胧。

唠叨了很多,还望指教,咱就聊聊。


# include <windows.h>
# include <iostream>

using namespace std;

HWND g_hWnd = NULL;
HINSTANCE g_hInst;
volatile bool bCanExit = false;

# pragma comment(linker, "/subsystem:\"console\" /entry:\"main\"")

LRESULT WndProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
switch (wMsg)
{
case WM_CLOSE:
bCanExit = true;
PostQuitMessage(0);
return 0;

default:
return ::DefWindowProc(hWnd, wMsg, wParam, lParam);
}
}

void CreateWnd()
{
WNDCLASS wc = {0};

wc.style = 0;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = g_hInst;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetSysColorBrush(COLOR_GRAYTEXT);
wc.lpszMenuName = NULL;
wc.lpszClassName = TEXT("SimpleWindow");

RegisterClass(&wc);

g_hWnd = CreateWindowEx(0, TEXT("SimpleWindow"), TEXT("SimpleWindow"),
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL,
g_hInst, 0);
}

DWORD MyThread(PVOID pArg)
{
CreateWnd();
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

int main()
{
g_hInst = GetModuleHandle(NULL);
HANDLE hThrd = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MyThread,
NULL, 0, NULL);
CloseHandle(hThrd);

while (!bCanExit)
{
Sleep(10);
}

cout << "windows has closed" << endl;

getchar();
return 0;
}

...全文
357 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2013-11-22
  • 打赏
  • 举报
回复
居然一年就过去了。
图灵狗 2012-12-21
  • 打赏
  • 举报
回复
你可以创建一个WIN32应用程序,在连接器设置中把子系统改成控制台,再把_tWinMain的定义改成int _tmain(int argc, _TCHAR* argv[]),在此基础上修改代码试试看,当然如果处理多字节的话,没有t之类的东东。
边走边瞧 2012-12-21
  • 打赏
  • 举报
回复
引用 楼主 ForestDB 的回复:
能解释下console子系统和Windows API的联系,还有main和WinMain? 还有可能运行时不显示那个console窗口?(当然现在显示是很正常的,因为首先它是个console应用,然后新开了线程创建窗口) 有无可能用WinMain开始,但是又带个console窗口?
尝试解释一下,说错请纠正哈: 1、console和win32是两个不同的子系统,风格不太一样,运行机制也不一样。console是win32下模拟以前的dos窗口而已。win32是基于消息机制运行的。 2、你帖出来的代码,是没办法去掉console窗口的。 3、从winmain开始,又带console的话,那么你的程序就是纯win32程序了。最简单的办法是用ShellExecute("cmd"),也可以用AllocConsole函数。操作console窗口也是可以的,你搜一下吧。
东大坡居士 2012-12-21
  • 打赏
  • 举报
回复
i remember developing with VC, Application entrance is WinMain. of course, if you have included VC lib in your system environment, it is also fine to use VC lib but take main as entrance.
guotianyu2000 2012-12-21
  • 打赏
  • 举报
回复
真的有点受宠若惊,昨天的回答并没有针对个人的,我的意思是在Win32 Console Application条件下也可以使用Windows API创建窗体程序,所以不要太针对出处。 下面仅是我的理解,有可能是错误的,仅供讨论! 1、Win32 Console Application和Win32 Application都是Windows 32位平台程序。Win32 Application是标准windows程序,基于消息机制的,完全拥有windows的特性!Win32 console application 类似于DOS程序(因为传统DOS是16位),但也可以访问windows系统API! 关键在于,一个的入口点WinMain,而另一个是main()。编译时,编译器总是寻找相应的函数来链接。具体如何判断其实我也并没有深入研究过,所以这一点我也不是很清楚。 2、但是,我在网上曾看到又问分析过这个问题,他说:1)EXE文件本身有区别:在文件头里(PE头)有一个标记表明该文件是Application还是Console。2)OS在创建对应的进程时,如果是Console,除了载入文件映像并开启进程外(这一点和Application相同),同时创建一个Console对象(就是那个黑黑的窗口)与之关联,而且这种关联是可以编程脱开的。从这个观点来看,在Win 32Application中即以WinMain为入口函数时,是不会产生控制台窗口即所谓的Console窗口。 3、Windows API和前两者应该是不具比较特征的吧,Windows API是Windows平台下的接口函数,而前两者是平台上的不同应用类型。但是二者都可以使用这种接口。
ForestDB 2012-12-21
  • 打赏
  • 举报
回复
人 工 置 顶。
内容概要:本文围绕基于Python和Transformer模型的多变量风电功率预测展开研究,重点针对短期风电功率预测任务。研究采用深度学习中的Transformer架构,引入风速、温度、湿度等多种气象及运行变量作为输入特征,构建高精度预测模型。为进一步提升预测的稳健性与可靠性,研究结合近端梯度算法求解LASSO分位数回归,优化模型在不确定性环境下的输出表现,增强预测结果的置信区间估计能力。该技术是机器学习与新能源领域深度融合的典型应用,旨在提高风电并网的稳定性与电网调度的科学性。; 适合人群:具备Python编程基础,熟悉主流深度学习框架(如PyTorch或TensorFlow)的研究生、科研人员,以及从事新能源发电预测、电力系统调度、智能电网优化等相关工作的技术人员。; 使用场景及目标:①应用于风电场实际运行中的短期功率预测系统,辅助电网进行精准负荷调配与调度决策;②作为科研项目的技术蓝本,用于复现、改进或扩展基于Transformer的时间序列预测模型;③探索LASSO分位数回归与深度学习模型的融合机制,提升预测结果的概率性输出与风险评估能力。; 阅读建议:此资源适用于已掌握机器学习与深度学习基础知识的读者,建议结合所提供的代码实现进行动手实践,重点关注多变量数据的预处理流程、Transformer模型的结构设计与注意力机制实现、超参数调优策略,并尝试在不同风电数据集上验证模型的泛化性能与鲁棒性。
内容概要:本文档《STK入门手册》系统介绍了AGI公司开发的Satellite Tool Kit(STK)软件的基本用法与核心功能,涵盖用户界面操作、地图窗口设置、各类对象(如卫星、航天器、设施、传感器等)的创建与属性定义,以及高级分析模块如高精度轨道预测(HPOP)、长周期轨道内容概要:预测(LOP)、地形本文档为与高分辨率地图《STK入门手册》,介绍了Sat的应用。手册还详细说明了Scellite Tool Kit(STK)软件的基本用enarios的时间设置、单位法与核心功能,配置、数据库管理重点涵盖用户界面操作、地图窗口设置、场景及动画演示等功能,帮助用户进行全面(Scenario)管理的卫星系统仿真、卫星及各类与分析。;对象(如航天器、设施、传感器 适合人群:适用于等)的创建与刚接触STK的新属性配置。手册手用户以及具备详细说明了STK一定经验的卫星系统分析的专业技术特性,包括人员,尤其适合从事高精度轨道预测(HPOP)、长航天、遥感、周期轨道分析(LO通信等领域工程技术人员P)、地形与高分辨率地图模块和研究人员。;、姿态模拟与指向 使用场景及目标:①用于、数据可视化等功能卫星轨道设计、,并提供了对象管理覆盖分析、通、动画设置、单位路计算、传感器配置、数据库调建模等航天用等实用操作任务仿真;指导。附录还包含术语表、文件②支持复杂空间格式说明及高级技术注释。; 适合人群:从事环境下的高精度动力学建模与可视化卫星系统分析、航天分析,提升系统设计与决策效率工程、轨道设计;③辅助等相关领域的科研人员和技术教学培训与工程项目工程师,尤其适合初学者和有一定实践,实现从基础操作到高级经验的STK用户功能的全面掌握。。; 使用; 阅读建议:建议场景及目标:①用于学习和掌握结合STK软件STK软件的基础实际操作同步学习,重点关注操作与高级分析功能;②支持各章节中的属性卫星轨道仿真、覆盖设置与操作流程分析、通路,注意手册中标计算、传感器建注的Notes、模等航天任务的规划与评估;③Hints和Warnings以避免常见错误,辅助教学培训与推荐配合官方教程工程项目中的空间态势与数据库资源深化可视化与数据分析。理解。; 阅读建议:建议结合软件实际操作同步阅读,重点关注各章节中的属性设置、投影类型选择及高级模块说明,注意手册中标注的Notes、Hints和Warnings以避免常见错误。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧