- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 C++ 设置一个简单的窗口,但我对 CreateWindowEx
的调用返回了 NULL
。我使用的大部分代码来自 example在 MSDN 网站上。我尝试过的所有方法均无效,如有任何帮助,我们将不胜感激。
代码如下:
//Include the windows header
#include <Windows.h>
//Forward declaration of the WndProc function
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
//Main entry point
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) {
//Window class name
const wchar_t windowName[] = L"Window Class";
//Set up window class
WNDCLASS wnd;
wnd.lpfnWndProc = WndProc;
wnd.hInstance = hInstance;
wnd.lpszClassName = windowName;
//Register window class
RegisterClass(&wnd);
//Create window
//! This returns NULL
HWND hWnd = CreateWindowEx(
0,
windowName,
L"Windows Programming",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
//Simple check to see if window creation failed
if(hWnd == NULL) {
//Pause
system("PAUSE");
return -1;
}
//Show the window
ShowWindow(hWnd, nCmdShow);
//Main message loop
MSG msg;
while(GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
//WndProc function
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch(msg) {
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hDc = BeginPaint(hWnd, &ps);
FillRect(hDc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW + 1));
EndPaint(hWnd, &ps);
return 0;
}
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
最佳答案
请注意,MSDN 中的示例在设置它关心的字段之前将 WNDCLASS 的所有字段归零。
WNDCLASS wnd = { }; // from MSDN example
空括号是 C 和 C++ 的简写形式,用于将整个结构初始化为 0。通常将其写为 { 0 }
,这在技术上略有不同,但具有相同的净效果。
在您的代码中,您放弃了初始化:
WNDCLASS wnd; // your code
因此,您可能会在其他重要字段之一(如 cbClsExtra
或 cbWndExtra
)中获得一些垃圾值,这导致类无法注册。由于该类未注册,您无法创建该类的窗口。
关于C++ CreateWindowEx 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13661912/
我正在用 msvc 和 C++ 做一些测试。我正在尝试使用 ResEdit 创建对话框(可在此处获得 http://www.resedit.net/ ),当创建 .RC 文件时,我正在尝试使用相同的
我有一个父窗口和一些附加到它的子窗口。使用 SpyXX,我可以看到所有的子项都有特定的样式类,比如说 ChildWindowClass。 当我用这个特定类的名称创建窗口时,CreateWindowEx
我有一个问题。我想记录我的工具开发,所以我不想在屏幕截图上绘制日期,而是想让窗口名称带有日期和时间数据。但我得到的不是字符串,而是中文字符。 这是我要将字符串分配给 CreateWindowEx()
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在学习 NeHe gamedev 教程(同时将它们更改为面向对象),但我遇到了 CreateWindowEx 演示 (http://nehe.gamedev.net/tutorial/creati
使用 C#,我很容易获得我想要的效果: 但是,我在使用 C 中的 Win32 API 做同样的事情时遇到了麻烦。我不知道如何创建一个没有图标的窗口(根本没有),但仍然有标题、最小化按钮和关闭按钮。 我
我想制作一个按钮,当您转到“我的电脑”->“帮助”->“关于 Windows”时,它看起来就像“确定”按钮。 我正在创建一个这样的按钮: hButton = CreateWindowEx(WS_EX_
好的,所以首先概述一下我正在尝试做的事情.. 我正在尝试在主父窗口中创建 3 个子窗口,并使用 EnumChildWindow 和 EnumChildProc 来枚举它们,我想创建 3 个与父窗口高度
我试图找出为什么我的应用程序有一个小的、很少像素的边框。 我的理解是 WS_POPUP 应该解决这个问题; DWORD wndExStyle = WS_EX_OVERLAPPEDWINDOW; DWO
CreateWindowEx API 真的会发送 WM_SIZE 消息吗? 当我通过 CreateWindowEx 创建一个窗口作为全屏模式时, CreateWindowEx 发布 WM_SIZE 但
我使用 CreateWindowEx 创建我的窗口,但我只在任务栏中得到一个图标;窗口的标题栏和当我 Alt+Tab 时显示的图标都显示这种类型的虚拟图标: .我将 WNDCLASSEX 中的 hIc
我使用 CreateWindowEx 创建了一个窗口,它使用以下代码作为向导对话框; DWORD dwStyle = WS_DLGFRAME | DS_CENTER | WS_POPUP | WS_C
我知道 ES_NUMBER 的存在是为了将 CreateWindowEx 限制为仅数字输入,是否有类似的机制将其限制为仅字母数字 (a-z,0-9) 输入?或者另一种方法来做类似的事情。我知道我可以事
我想使用 winAPI 创建一个窗口: int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,
我正在尝试创建一个具有特定类类型(“VSDebugger CDataTipWnd”)的窗口,但是,当我运行 CreateWindowEx 时它失败了,并且 GetLastError 告诉我找不到该类。
我正在尝试使用 C++ 设置一个简单的窗口,但我对 CreateWindowEx 的调用返回了 NULL。我使用的大部分代码来自 example在 MSDN 网站上。我尝试过的所有方法均无效,如有任何
以下是我的部分代码。每次运行程序,SPanel的CreateWindowEx返回NULL,触发错误。谁能看出这段代码有什么问题? SPanelProc 和 MainWndProc 已经声明,并且是原型
我正在尝试使用 CreateWindowEx 生成仅消息窗口: _hWnd = CreateWindowEx( 0, NULL, NULL, 0, 0, 0, 0, 0, HWND_MESSAGE,
以下代码在Window 7上运行,但是在Windows XP上运行时,它失败并显示Windows返回的错误消息:“系统找不到指定的文件”。 #include #include #include
我想创建一个新类,然后显示一个包含指定类的窗口。我为此编写了以下代码: namespace WindowsFormsApplication1 { public partial clas
我是一名优秀的程序员,十分优秀!