标签: createwindowex

WinAPI:创建一个具有指定客户区大小的窗口

我想知道如何使用具有特定客户区大小的 Win32 API创建窗口.

当尝试使用以下代码创建窗口时,整个窗口为640x480,窗口的chrome占用了一些客户区域:

HWND       hWnd;
WNDCLASSEX WndClsEx;
ZeroMemory(&WndClsEx, sizeof(WNDCLASSEX));

WndClsEx.cbSize        = sizeof(WNDCLASSEX);
WndClsEx.style         = CS_HREDRAW | CS_VREDRAW;
WndClsEx.lpfnWndProc   = DefWindowProc;
WndClsEx.cbClsExtra    = 0;
WndClsEx.cbWndExtra    = 0;
WndClsEx.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
WndClsEx.hCursor       = LoadCursor(NULL, IDC_ARROW);
WndClsEx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClsEx.lpszMenuName  = NULL;
WndClsEx.lpszClassName = TEXT("Title");
WndClsEx.hInstance     = hInstance;
WndClsEx.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

RegisterClassEx(&WndClsEx);

hWnd = CreateWindowEx(  NULL,
            TEXT("Title"),
            TEXT("Title"),
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            640,
            480,
            NULL,
            NULL,
            hInstance,
            NULL);
Run Code Online (Sandbox Code Playgroud)

假设简单的数学不能解决问题,我该如何考虑铬尺寸?

注意:我在创建窗口后使用SDL,但我猜它与窗口大小绑定并且与其大小没有区别.

c++ winapi window createwindowex

33
推荐指数
1
解决办法
2万
查看次数

使用CreateWindowEx创建一个没有图标的窗口

使用C#,我很容易就能得到我想要的效果:

标题栏中没有图标的标准窗口

然而,我无法做用下的Win32 API的,我不知道如何创建具有窗口同样的事情没有图标(在所有),但仍然有一个标题,最小化按钮,以及关闭按钮.

我正确地注册了我的课程,但我无法弄清楚要为窗口样式/扩展窗口样式添加什么.

static const TCHAR lpctszTitle[] = TEXT("Stuff"), lpctszClass[] =
  TEXT("StuffClass");

HWND hWnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOPMOST, lpctszClass,
  lpctszTitle, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX,
  CW_USEDEFAULT, 0, 250, 55, NULL, NULL, hThisInstance, NULL);
Run Code Online (Sandbox Code Playgroud)

上面的代码产生了:

标准窗口标题栏中带有图标

它仍然在标题栏中有一个图标,而不是我想要的.

c windows winapi createwindow createwindowex

5
推荐指数
1
解决办法
4794
查看次数

为子Windows指定窗口过程

我想知道是否可以为创建的子窗口指定WndProc CreateWindowEx.

我已经创建了一个Window类,主窗口,窗口过程和一个消息循环.该代码有效,我决定将其保留,以便明确我的问题.

到目前为止,这是我的Window Proc:

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        // Creation of the Win32 Window
        case WM_CREATE:
            // Add an Edit Field
            CreateWindowEx(
                WS_EX_CLIENTEDGE,
                "EDIT",
                "",
                WS_CHILD | WS_VISIBLE,
                5, 5, 200, 24,
                hwnd,
                (HMENU)100,
                g_Instance, // Comming from WinMain
                NULL
            );
            return DefWindowProc(hwnd, uMsg, lParam, wParam);
        case WM_KEYDOWN:
            // Track key presses on the edit field
            std::cout << "The key with the code " << wParam << " …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi wndproc createwindowex

5
推荐指数
1
解决办法
2833
查看次数

如何让CreateWindowEx()在特定的监视器上创建窗口?

我已经确定我可以使用GetSystemMetrics(SM_CMONITORS)来查询连接的监视器的数量,但是他们可以通过什么方式来控制CreateWindowEx()用于窗口的监视器?

winapi createwindowex monitors

4
推荐指数
2
解决办法
3384
查看次数

CreateWindowEx返回NULL

以下是我的代码的一部分.每次运行程序时,CreateWindowExSPanel都会返回NULL,触发错误.任何人都可以看到这段代码有什么问题吗?

SPanelProc并且MainWndProc已经宣布,并且是原型LRESULT CALLBACK SPanelProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);.

我正在编程的环境是Visual C++ 2010.

为什么CreateWindowEx总是回来NULL

#include <Windows.h>
#include <WindowsX.h>

LRESULT CALLBACK SPanelProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        case WM_MOUSEMOVE:

        break;
    }

    return 0;
}

void Init ()
{
    HWND child;
    HINSTANCE hInstance = (HINSTANCE)(GetWindowLongPtr (parent, GWLP_HINSTANCE));
    WNDCLASSEX wc;
    const char PanelClassName[] = "SPanel"; //ClassName of the panel. Do not …
Run Code Online (Sandbox Code Playgroud)

c++ winapi visual-studio-2010 createwindowex visual-c++-2010

2
推荐指数
1
解决办法
5825
查看次数

在WinMain之外使用CreateWindowEX函数时,如何获得它的HINSTANCE?

当我单击主窗口上的按钮时,我试图创建一个弹出窗口,而我正在使用CreateWindowEX函数。但是,CreateWindowEx函数将HINSTANCE类型变量作为倒数第二个参数。假设单击按钮时我是从WndProcedure内部创建此新窗口的,所以WinMain函数中的HINSTANCE变量对我来说将不可用,因为它不是全局变量。

从WndProcedure回调函数获得以下代码:

            case IDC_BUTTON PRESSED:
            {

                const char g_szClassName2[] = "POPWIND";
                const char WndName2[] = "POPUP WINDOW";

                HWND invisWindowHandle = CreateWindowEx(0,
                      g_szClassName2,
                      WndName2,
                      WS_OVERLAPPEDWINDOW,
                      200,
                      200,
                      800,
                      500,
                      NULL,
                      NULL,
                      hInstance,//THIS IS THE VARIABLE I AM HAVING TROUBLE GETTING
                      NULL);

                ShowWindow(invisWindowHandle, 3);// SW_SHOWNORMAL);
                UpdateWindow(invisWindowHandle);
             }
Run Code Online (Sandbox Code Playgroud)

我该如何获取所需的hInstance变量,以便CreateWindowEx函数从WndProcedure回调函数内部运行?

注意:我考虑过将hInstance变量设置为全局变量,但是我不确定我的应用程序创建的每个窗口是否都必须使用相同的hInstance。

c++ window createwindowex

1
推荐指数
1
解决办法
1268
查看次数

CreateWindowEx 显示中文乱码而不是原始文本

我有个问题。我想记录我的工具开发,所以我想让窗口名称带有日期和时间数据,而不是在屏幕截图顶部使用 mspaint 来显示日期。但是我只有中文字符而不是字符串。

胡言乱语

这是我想将字符串分配给 CreateWindowEx() 的代码:

char *wndName = "Asphyx V0.01 (Build Date: " __DATE__ " " __TIME__ ")\0";

hWnd = CreateWindowEx(NULL,
                      L"WindowClass",
                      (LPCWSTR)wndName,
                      WS_OVERLAPPEDWINDOW,
                      300,
                      300,
                      wr.right - wr.left,
                      wr.bottom - wr.top,
                      NULL,
                      NULL,
                      hInstance,
                      NULL);
Run Code Online (Sandbox Code Playgroud)

编辑:伙计们,我很欣赏你的回答,但他们都给了我这个

Error 29 error C2308: concatenating mismatched strings  
Run Code Online (Sandbox Code Playgroud)

唯一有点工作的东西是一个尚未删除的答案,但它给了我这个:

在此处输入图片说明

他使用了这个代码:

char title[256];
sprintf(title, "Asphyx V0.01 (Build Date:  %s - %s)", __DATE__, __TIME__);

hWnd = CreateWindowEx(NULL,
                      L"WindowClass",
                      title,
                      WS_OVERLAPPEDWINDOW,
                      300,
                      300,
                      wr.right - wr.left,
                      wr.bottom - wr.top,
                      NULL,
                      NULL,
                      hInstance,
                      NULL);
Run Code Online (Sandbox Code Playgroud)

c++ winapi direct3d createwindowex

1
推荐指数
1
解决办法
925
查看次数