加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

构建Win32 GUI代码

发布时间:2020-12-14 01:51:33 所属栏目:Windows 来源:网络整理
导读:我希望在更大的Win32项目中使用大量的窗口和控件来改进我的代码和文件结构.目前,我倾向于有一个标题和一个源文件用于窗口或对话框的整个实现.这适用于小型项目,但现在它已经到了这些实现开始达到1000-2000行的程度,这对于浏览来说很繁琐. 我的典型源文件如下
我希望在更大的Win32项目中使用大量的窗口和控件来改进我的代码和文件结构.目前,我倾向于有一个标题和一个源文件用于窗口或对话框的整个实现.这适用于小型项目,但现在它已经到了这些实现开始达到1000-2000行的程度,这对于浏览来说很繁琐.

我的典型源文件如下所示:

static LRESULT CALLBACK on_create(const HWND hwnd,WPARAM wp,LPARAM lp) {
    setup_menu(hwnd);
    setup_list(hwnd);
    setup_context_menu(hwnd);

    /* clip */

    return 0;
}

static LRESULT CALLBACK on_notify(HWND hwnd,UINT msg,LPARAM lp) {
    const NMHDR* header = (const NMHDR*)lp;

    /* At this point I feel that the control's event handlers doesn't
     * necessarily belong in the same source file. Perhaps I could move
     * each control's creation code and event handlers into a separate
     * source file? Good practice or cause of confusion? */

    switch (header->idFrom) {
    case IDC_WINDOW_LIST:
        switch (header->code) {
        case NM_RCLICK:
            return on_window_list_right_click(hwnd,wp,lp);

        /* clip */
        }
    }
}

static LRESULT CALLBACK wndmain_proc(HWND hwnd,LPARAM lp) {
    switch (msg) {
    case WM_CREATE:
        return on_create(hwnd,lp);

    case WM_CLOSE:
        return on_close(hwnd,lp);

    case WM_NOTIFY:
        return on_notify(hwnd,lp);

    /* It doesn't matter much how the window proc looks as it just forwards
     * events to the appropriate handler. */

    /* clip */

    default:
        return DefWindowProc(hwnd,msg,lp);
    }
}

但是现在窗口有更多的控件,而这些控件又有自己的消息处理程序,然后是菜单点击处理程序,等等……我迷路了,我真的需要建议如何以一种良好而明智的方式把这个搞得一团糟.

我试图找到构建Win32代码的良好开源示例,但由于存在数百个文件,我感到更加困惑,并且在这些看起来与GUI相关的文件中,Win32 GUI代码似乎到目前为止已被封装起来.当我最终找到CreateWindowEx语句时,窗口proc无处可寻.

任何关于如何构建所有代码同时保持理智的建议将不胜感激.

谢谢!

我不希望使用任何库或框架,因为我发现Win32 API对学习很有意义且有价值.

任何有关如何构建自己的GUI代码的见解都可能成为灵感.

解决方法

对于初学者,我将在windowsx.h中查看 message crackers;他们会节省你在窗口程序中编写乏味的案例陈述,并且他们建议在函数名称中使用某种规则.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读