【问题标题】:Couldn't Debug the Complete Code to Create the Window无法调试创建窗口的完整代码
【发布时间】:2013-06-08 09:30:12
【问题描述】:

正如Creating a Window (Windows)所说的:

“恭喜,您已经创建了一个窗口!现在,窗口确实 不包含任何内容或与用户互动。”

但我无法调试提到的用于创建窗口的完整代码。这是 main.cpp 来源:

#include <windows.h>

// Register the window class.
const wchar_t CLASS_NAME[]  = L"Sample Window Class";

WNDCLASS wc = { };

wc.lpfnWndProc   = WindowProc;
wc.hInstance     = hInstance;
wc.lpszClassName = CLASS_NAME;

RegisterClass(&wc);

// Create the window.

HWND hwnd = CreateWindowEx(
    0,                              // Optional window styles.
    CLASS_NAME,                     // Window class
    L"Learn to Program Windows",    // Window text
    WS_OVERLAPPEDWINDOW,            // Window style

    // Size and position
    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

    NULL,       // Parent window    
    NULL,       // Menu
    hInstance,  // Instance handle
    NULL        // Additional application data
    );

if (hwnd == NULL)
{
    return 0;
}

ShowWindow(hwnd, nCmdShow);

我正在使用 Visual Studio Express 2012 for Windows Desktop。从 New Project 开始,选择 Visual C++Empty Project。我什至尝试了#include &lt;iostream&gt; 没有和using namespace std; 希望一点点.. 不幸的是,它并没有解决问题。

调试会出现很多错误。可疑代码之一是 "wc"

wc.lpfnWndProc   = WindowProc;
wc.hInstance     = hInstance;
wc.lpszClassName = CLASS_NAME;

RegisterClass(&wc);

对不起,(我想,这很简单,)因为我才刚刚开始..

【问题讨论】:

  • 你有WinMain函数吗?
  • 你的代码应该放在函数中,可能是main。你应该定义WindowProc。而且您不应该尝试任何魔术,例如“我什至尝试了#include &lt;iostream&gt; 没有和使用命名空间std;”,而是阅读一些书。
  • 您显示的代码无法编译。现在谈论调试还为时过早。几乎所有这些代码(不包括#include)都必须在某个函数内,例如WinMain.
  • 其实你可以找到工作代码here,它甚至来自你的第一个链接。
  • @Dirk 是的,代码必须在某个函数内..

标签: c++ windows visual-studio-2010 visual-studio debugging


【解决方案1】:

选择 Visual C++,空项目

只是不要选择那个。而是选择 Win32 项目。你会得到预编译的代码,它实现了一个最小的原生 Windows 项目,并且一切都设置正确。扩展它并让它做一些有用的事情。

一旦您了解了有关此类编程的更多信息并阅读了三遍 Petzold 的“Programming Windows”,您将能够从头开始编写程序。然后才选择大师设置并从“空项目”项目模板开始。尝试反过来做这件事不可避免地会非常令人失望,您无法在一个会话中学习所有需要正确做的事情

【讨论】:

  • 感谢您的回答。我只选择 Visual C++,Empty Project 来帮助自己理解我正在学习的内容。 (当然我知道如何包含header,我只是想一个一个地研究它。) 而一旦我学习并准备好开发一个程序,我会选择Win32 Project。
  • 我会重复我在答案中所说的,你做错了。一旦你了解了这一切是如何组合在一起的,你就不再需要那个 Win32 项目模板了。一次解决一个问题。首先学习如何编写正确的代码,模板的存在是为了避免必须学习如何在第一次就正确设置 200 个编译器和链接器。
  • 同意.. 当谈到 Web 开发时,您的观点是,一旦您学会了如何设计网站,就不需要即时 Web 模板。但我只想测试Learn to Program for Windows in C++上的所有教程。
  • 学习、创建两种项目并比较生成的文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 2022-12-31
  • 2011-08-20
相关资源
最近更新 更多