卓航论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 178|回复: 3
打印 上一主题 下一主题

Win32开发入门(14):用对话框作为主窗口

[复制链接]
[至尊红钻5级]发帖数量≥8000篇 [未点亮至尊黄钻]威望不足10点 [未点亮至尊蓝钻]在线时间不足10小时 [未点亮至尊绿钻]贡献度不足10点 [至尊紫钻4级]金币≥20000个 [未点亮至尊粉钻]精华贴数不足10贴 [未点亮至尊黑钻]活跃不足8个
 等级: 
 级别: 论坛元老
 UID:  7   [未点亮普号显示]钻石不足3个
 阁 分: 36567
 阁 望: 0
 阁 献: 0
 活 跃: 0
 发 贴: 12405 (0)
 阁 币: 24162  
性 别: I'm 火星人!
阅读权限: 90
在线时长: 0 小时
注册时间: 2016-10-16
最后登录: 2016-10-18
go
楼主
发表于 2016-10-17 16:22:57 |只看该作者 |倒序浏览
本帖发表于 2016-10-17 16:22:57...阅读 179 人...加油,亲爱的楼主:[db:作者]
前面我们在编写Win32应用程序的思路都是:
1、设计窗口类。2、注册窗口类。3、创建窗口 。……
然而,当我们接触控件以后, 会发现一个问题,我们在窗口上放置控件实在不好弄,而 资源中的对话框具有图形编辑器,操作起来相对方便。
于是,就有了一个想法:把对话框用作 主窗口,那我们在布局控件时就轻松了。
其实这想法在网上已有牛人做了,不过,人家是用 Win32汇编干的,当然,要把它变为C++就更简单了。
首先,介绍第一个法子,直接以桌面作为 父窗口来创建对话框。
1、创建一个对话框资源,界面就发挥你的设计天赋了。
2、创建 一个图标资源,既作为应用程序的图标(VS编译时会选择第一个添加到资源中的图标作为EXE的图标) ,也作为对话框的图标。
3、在代码中创建并显示对话框。
#include      
#include "resource.h"     
// 开启可视化效果     
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")     
         
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);     
         
HINSTANCE hgInst;     
int WINAPI WinMain(HINSTANCE hThisApp, HINSTANCE hPrevApp, LPSTR lpCmd, int nShow)     
{     
    hgInst = hThisApp;     
    HWND hdlg = CreateDialog(hThisApp, MAKEINTRESOURCE(IDD_MY),GetDesktopWindow(),
(DLGPROC)DlgProc);     
    if(!hdlg)     
    {     
        return 0;     
    }     
    ShowWindow(hdlg,SW_SHOW);     
    MSG msg;     
    while(GetMessage(&msg,NULL,0,0))     
    {     
        TranslateMessage(&msg);     
        DispatchMessage(&msg);     
    }     
    return 0;     
}     
         
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)     
{     
    switch(msg)     
    {     
    case WM_INITDIALOG:     
        // 设置对话框的图标     
        SendMessage(hDlg, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(hgInst,
MAKEINTRESOURCE(IDI_APP)));     
        return 0;     
    case WM_SYSCOMMAND:     
        if(wParam == SC_CLOSE)     
        {     
            PostQuitMessage(0);//退出     
        }     
        return 0;     
    }     
    return (INT_PTR)FALSE;     
}
               
这样,我们可以运行一下。

第二种方法,我们还是遵照设计窗口类、注册窗口类、创建窗口等步骤,只是把对话框作为 窗口的子级,对话框采用Form View视图。
在插入资源的对话框中,点击Dialog左边的图标,展 开列表,在列表中选择IDD_FORMVIEW,然后点“新建”。

然后你看到一个没有边框和标题栏的对话框。

               
接下来我们可以放些控件上去。

最后,在响应WM_CREATE消息时,创建并显示对话框,父级是我们的主窗口。
case
WM_CREATE:     
    {     
        // 创建对话框     
        HWND hdlg = CreateDialog(hgAppInst, MAKEINTRESOURCE(IDD_MYFORM), hwnd, (DLGPROC)
DlgProc);     
        // 显示对话框     
        ShowWindow(hdlg, SW_SHOWNA);     
    }     
    return 0;
最后运行结果如下:

               
完整的代码清单:
#include      
#include "resource.h"     
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")     
         
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);     
INT_PTR CALLBACK DlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam);     
         
HINSTANCE hgAppInst;     
int WINAPI WinMain(HINSTANCE hThisApp, HINSTANCE hPrevApp, LPSTR lpCmd, int nShow)     
{     
    // 设计窗口类     
    WNDCLASS wc = { };     
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;     
    wc.lpfnWndProc = (WNDPROC)WindowProc;     
    wc.lpszClassName = L"supper_man";     
    wc.hInstance = hThisApp;     
    wc.style = CS_HREDRAW | CS_VREDRAW;     
    RegisterClass(&wc);     
    hgAppInst = hThisApp;     
    // 创建窗口     
    HWND hwnd = CreateWindow(L"supper_man", L"超级应用",      
        WS_OVERLAPPEDWINDOW, 40, 25, 380, 300, NULL, NULL, hThisApp, NULL);     
    if(!hwnd)     
        return 0;     
    ShowWindow(hwnd, nShow);     
    UpdateWindow(hwnd);     
    // 消息循环     
    MSG msg;     
    while(GetMessage(&msg,NULL,0,0))     
    {     
        TranslateMessage(&msg);     
        DispatchMessage(&msg);     
    }     
    return 0;     
}     
         
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)     
{     
    switch (msg)     
    {     
    case WM_CREATE:     
        {     
            // 创建对话框     
            HWND hdlg = CreateDialog(hgAppInst, MAKEINTRESOURCE(IDD_MYFORM), hwnd,
(DLGPROC)DlgProc);     
            // 显示对话框     
            ShowWindow(hdlg, SW_SHOWNA);     
        }     
        return 0;     
    case WM_DESTROY:     
        PostQuitMessage(0);     
        return 0;     
    default:     
        return DefWindowProc(hwnd,msg,wParam,lParam);     
    }     
    return 0;     
}     
         
// 处理对话框消息     
INT_PTR CALLBACK DlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)     
{     
    /* .............. */
    return (INT_PTR)FALSE;     
}
分享到: QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏0 支持支持0 反对反对0

使用道具 举报

[至尊红钻3级]发帖数量≥1000篇 [至尊黄钻3级]威望≥500点 [至尊蓝钻1级]在线时间≥10小时 [至尊绿钻9级]贡献度≥80000点 [至尊紫钻9级]金币≥8000000个 [未点亮至尊粉钻]精华贴数不足10贴 [未点亮至尊黑钻]活跃不足8个
 等级: 
 级别: 管理员
 UID:  1   [未点亮普号显示]钻石不足3个
 阁 分: 2147483647
 阁 望: 993
 阁 献: 2147483647
 活 跃: 0
 发 贴: 1532 (0)
 阁 币: 9430326  
性 别: I'm 火星人!
阅读权限: 200
在线时长: 46 小时
注册时间: 2016-10-14
最后登录: 2023-10-3
沙发
发表于 2016-10-18 00:02:00 |只看该作者
本回复帖发表于 2016-10-18 00:02:00,感谢爱情孤儿对本帖的认真回复,你的回复是对楼主莫大的鼓舞
帮你顶下哈!!

使用道具 举报

[至尊红钻2级]发帖数量≥100篇 [未点亮至尊黄钻]威望不足10点 [未点亮至尊蓝钻]在线时间不足10小时 [未点亮至尊绿钻]贡献度不足10点 [未点亮至尊紫钻]金币不足100个 [未点亮至尊粉钻]精华贴数不足10贴 [未点亮至尊黑钻]活跃不足8个
 等级: 
 级别: 注册会员
 UID:  20   [未点亮普号显示]钻石不足3个
 阁 分: 171
 阁 望: 2
 阁 献: 6
 活 跃: 0
 发 贴: 160 (0)
 阁 币: 1  
性 别: I'm 火星人!
阅读权限: 20
在线时长: 3 小时
注册时间: 2011-1-6
最后登录: 2016-10-20
板凳
发表于 2016-10-19 13:21:27 |只看该作者
本回复帖发表于 2016-10-19 13:21:27,感谢aoxiao168对本帖的认真回复,你的回复是对楼主莫大的鼓舞
我抢、我抢、我抢沙发~

使用道具 举报

[至尊红钻2级]发帖数量≥100篇 [未点亮至尊黄钻]威望不足10点 [未点亮至尊蓝钻]在线时间不足10小时 [未点亮至尊绿钻]贡献度不足10点 [未点亮至尊紫钻]金币不足100个 [未点亮至尊粉钻]精华贴数不足10贴 [未点亮至尊黑钻]活跃不足8个
 等级: 
 级别: 中级会员
 UID:  51   [未点亮普号显示]钻石不足3个
 阁 分: 205
 阁 望: 5
 阁 献: 3
 活 跃: 0
 发 贴: 182 (0)
 阁 币: 10  
性 别: I'm 火星人!
阅读权限: 30
在线时长: 5 小时
注册时间: 2011-1-6
最后登录: 2016-10-21
地板
发表于 2016-10-21 08:46:08 |只看该作者
本回复帖发表于 2016-10-21 08:46:08,感谢wangxuejing1109对本帖的认真回复,你的回复是对楼主莫大的鼓舞
帮帮顶顶!!

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1、请认真发帖,禁止回复纯表情,纯数字等无意义的内容!帖子内容不要太简单!
2、提倡文明上网,净化网络环境!抵制低俗不良违法有害信息。
3、每个贴内连续回复请勿多余3贴,每个版面回复请勿多余10贴!
4、如果你对主帖作者的帖子不屑一顾的话,请勿回帖。谢谢合作!

手机版| 百度搜索:vkee.pw

2012-2015 卓航旗下 GMT+8, 2024-6-2 09:32 , Processed in 1.961380 second(s), 31 queries . Powered by Discuz! X3.2  

禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.如遇版权问题,请及时联系站长(QQ:5213513)

今天是: | 本站已经安全运行: //这个地方可以改颜色

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