设置默认的资源模块,创建窗口失败,

QiangIANG 2017-02-06 02:20:39
在开发过程中为了实现多语言支持,做了一个英文的资源包,
在应用程序的初始化中进行了如下操作

但在后面使用GridCtrl 的创建时 ,创建失败
跟踪,在CWnd::CreateEx函数中如下函数

返回NUll,错误代码Warning: Window creation failed: GetLastError returns 0x0000057F



如果将第一张图片中加载动态连接库行注释掉,窗口创建成功,,,

不解,,急求 解决方案 !!
...全文
602 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
QiangIANG 2017-04-01
  • 打赏
  • 举报
回复
这个问题已经解决,但是是通过在CGridCtrl的创建前首先选择回程序默认的资源,待创建完成后再选回需要的语言包资源,这样做目前个人认为仅仅可以解决问题,但不是理想的方法,如果还有更好的方法,希望,能够分享下。
zgl7903 2017-02-07
  • 打赏
  • 举报
回复
m_gridCtrl.Create 之前再调用一下注册函数试试看
QiangIANG 2017-02-07
  • 打赏
  • 举报
回复
引用 3 楼 zgl7903 的回复:
AfxSetResourceHandle 和 AfxRegisterClass 处设置断点 调试运行 看看执行顺序, 必须是先AfxSetResourceHandle 后 AfxRegisterClass
顺序是对的,还有可能是什么原因导致CWnd::Create失败呢,
zgl7903 2017-02-06
  • 打赏
  • 举报
回复
AfxSetResourceHandle 和 AfxRegisterClass 处设置断点 调试运行 看看执行顺序, 必须是先AfxSetResourceHandle 后 AfxRegisterClass
QiangIANG 2017-02-06
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
使用了 CGridCtrl ? 试试修改下构造函数中的注册函数 RegisterWindowClass(AfxGetResourceHandle());
构造函数中调用了这个函数
// Register the window class if it has not already been registered.
BOOL CGridCtrl::RegisterWindowClass()
{
    WNDCLASS wndcls;
    //HINSTANCE hInst = AfxGetInstanceHandle();
    HINSTANCE hInst = AfxGetResourceHandle();

    if (!(::GetClassInfo(hInst, GRIDCTRL_CLASSNAME, &wndcls)))
    {
        // otherwise we need to register a new class
        wndcls.style            = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
        wndcls.lpfnWndProc      = ::DefWindowProc;
        wndcls.cbClsExtra       = wndcls.cbWndExtra = 0;
        wndcls.hInstance        = hInst;
        wndcls.hIcon            = NULL;
#ifndef _WIN32_WCE_NO_CURSOR
        wndcls.hCursor          = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
#else
        wndcls.hCursor          = 0;
#endif
        wndcls.hbrBackground    = (HBRUSH) (COLOR_3DFACE + 1);
        wndcls.lpszMenuName     = NULL;
        wndcls.lpszClassName    = GRIDCTRL_CLASSNAME;

        if (!AfxRegisterClass(&wndcls))
        {
            AfxThrowResourceException();
            return FALSE;
        }
    }

    return TRUE;
}
应该没有什么不妥吧 102行还返回非零值呢,105行就创建失败
zgl7903 2017-02-06
  • 打赏
  • 举报
回复
使用了 CGridCtrl ? 试试修改下构造函数中的注册函数 RegisterWindowClass(AfxGetResourceHandle());

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧