VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 559|回复: 4

window编程创建窗口失败

[复制链接]
24_avatar_middle
最佳答案
0 
在线会员 发表于 2019-2-26 19:34:29 | 显示全部楼层 |阅读模式
8驿站币
本帖最后由 ww1724 于 2019-2-26 20:26 编辑

错误是creatwindow无法读取内存,但是getlasterror得到0说明没错误,代码如下求助各位大佬
#include<windows.h>

LRESULT CALLBACK windowproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE Hinstance ,LPSTR lpCmdLine , int cmdshow ) {
        const WCHAR *class_name = L"simple class name";
        unsigned s;
        WNDCLASS wndclass = {NULL};
        wndclass.lpfnWndProc = windowproc;
        wndclass.hInstance = hinstance;
        wndclass.lpszClassName = class_name;
        RegisterClass(&wndclass);

               
        HWND windowhwnd = CreateWindowEx(1, class_name, L"first windows window", WS_TILEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hinstance, NULL);
        {
                s = GetLastError();
                MessageBox(NULL, L"创建窗口失败", L"错误提示", MB_OK);
        }
        ShowWindow(windowhwnd, cmdshow);
        return 0;
}


LRESULT CALLBACK windowproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
        return LRESULT();

}

变量

变量

最佳答案

查看完整内容

楼主这个代码范了几个致命的错误啊: 1、HWND windowhwnd = CreateWindowEx(...); 之后,并没有加 if 判断啊,直接就用一个大括号里面马上就 GetLastError 和 MessageBox 了,所以不管 CreateWindowEx 返回的 windowhwnd 是否成功,都会走 MessageBox; 2、窗口函数中直接 return LRESULT(); 了,应该 return DefWindowProc(hwnd, uMsg, wParam, lParam); 才对! 3、消息循环哪去了?没有消息循环,窗口即使被创建出来了也 ...




上一篇:PE内容 向代码空白区加代码时出现00000005错误
下一篇:【伸手】求一个Windbg的安装包(网上下了好几个垃圾软件)
81_avatar_middle
最佳答案
3 
online_supermod 发表于 2019-2-26 19:34:30 | 显示全部楼层
楼主这个代码范了几个致命的错误啊:
1、HWND windowhwnd = CreateWindowEx(...); 之后,并没有加 if 判断啊,直接就用一个大括号里面马上就 GetLastError 和 MessageBox 了,所以不管 CreateWindowEx 返回的 windowhwnd 是否成功,都会走 MessageBox;

2、窗口函数中直接 return LRESULT(); 了,应该 return DefWindowProc(hwnd, uMsg, wParam, lParam); 才对!

3、消息循环哪去了?没有消息循环,窗口即使被创建出来了也马上会消失:
  1. MSG msg = { 0 };
  2. while (GetMessage(&msg, NULL, 0, 0))
  3. {
  4.         TranslateMessage(&msg);
  5.         DispatchMessage(&msg);
  6. }
复制代码
87_avatar_middle
最佳答案
11 
在线会员 发表于 2019-2-26 21:34:43 | 显示全部楼层
CreateWindowEx
The CreateWindowEx function creates an overlapped, pop-up, or child window with an extended window style; otherwise, this function is identical to the CreateWindow function. For more information about creating a window and for full descriptions of the other parameters of CreateWindowEx, see CreateWindow.

HWND CreateWindowEx(
  DWORD dwExStyle,      // extended window style
  LPCTSTR lpClassName,  // registered class name
  LPCTSTR lpWindowName, // window name
  DWORD dwStyle,        // window style
  int x,                // horizontal position of window
  int y,                // vertical position of window
  int nWidth,           // window width
  int nHeight,          // window height
  HWND hWndParent,      // handle to parent or owner window
  HMENU hMenu,          // menu handle or child identifier
  HINSTANCE hInstance,  // handle to application instance
  LPVOID lpParam        // window-creation data
);
81_avatar_middle
最佳答案
3 
online_supermod 发表于 2019-2-26 22:07:26 | 显示全部楼层
改完后的代码如下:
  1. #include <windows.h>

  2. LRESULT CALLBACK windowproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  3. {
  4.         return DefWindowProc(hwnd, uMsg, wParam, lParam);
  5. }

  6. int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE Hinstance, LPSTR lpCmdLine, int cmdshow)
  7. {
  8.         const WCHAR *class_name = L"simple class name";
  9.         WNDCLASS wndclass = { NULL };
  10.         wndclass.lpfnWndProc = windowproc;
  11.         wndclass.hInstance = hinstance;
  12.         wndclass.lpszClassName = class_name;
  13.         RegisterClass(&wndclass);

  14.         HWND windowhwnd = CreateWindowEx(1, class_name, L"first windows window", WS_TILEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hinstance, NULL);

  15.         ShowWindow(windowhwnd, cmdshow);

  16.         // 主消息循环:
  17.         MSG msg = { 0 };
  18.         while (GetMessage(&msg, NULL, 0, 0))
  19.         {
  20.                 TranslateMessage(&msg);
  21.                 DispatchMessage(&msg);
  22.         }

  23.         return 0;
  24. }
复制代码
24_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-2-27 10:44:21 | 显示全部楼层
Debug 发表于 2019-2-26 22:06
楼主这个代码范了几个致命的错误啊:
1、HWND windowhwnd = CreateWindowEx(...); 之后,并没有加 if 判断 ...

谢谢了大佬,按照你说的果然搞定了
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-28 19:17

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表