0

我尝试编写简单的 show_window 函数,但是使用宽字符的函数,在 D 中没有任何示例,只有我能找到使用窄字符串的窗口创建并现在尝试重写它(我知道英语不好)。因此,即使正确注册 unicode winapi 绑定,我也失败了。

import core.runtime;
import core.sys.windows.windows;
import std.c.windows.windows;
pragma(lib, "gdi32.lib");
pragma(lib, "user32.lib");

struct WNDCLASSW { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCWSTR lpszMenuName; LPCWSTR lpszClassName; }

extern(Windows) HWND CreateWindowW(LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam );

extern(Windows)
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow) {
  HWND hWnd = CreateWindowW("wndClassName", 
   "window caption", WS_SYSMENU | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, null, hInstance, null);
  return 0;
}

这会产生:

Error 42: Symbol Undefined _CreateWindowW@44
4

1 回答 1

2

现代版本的 Windows 不实现 CreateWindow()。它是一个古老的 winapi 函数,可追溯到 1980 年代,已被 CreateWindowEx() 取代。在 WinUser.h SDK 头文件中,CreateWindowW 是一个实际调用 CreateWindowExW()的宏,为额外的 dwExStyle 参数传递 0。

您必须改用 CreateWindowExW()。

于 2013-01-29T14:18:07.153 回答