普通窗口和对话框窗口的区别:
普通窗口:自定义函数调用缺省函数
WndProc(...) {
...
    DefWindowProc(...);
}
对话框窗口:缺省函数调用自定义函数。
缺省函数(...) {
...
    自定义函数(...);
...
}

对话框原理:
对话框的分类:
模式对话框:当对话框显示时,会禁止本进程其他窗口的和用户交互。
无模式对话框:在对话框显示后,不影响本进程其他窗口的操作。
对话框基本使用:
1.对话框窗口处理函数。
2.注册窗口类(不使用)。
3.创建对话框。
4.对话框关闭。

对话框窗口处理函数:(并非真正的对话框处理函数)
INT CALLBACK DialogProc(
    HWND hwndDlg, //窗口句柄
    UINT uMsg,  //消息ID
    WPARAM wParam, //消息参数
    LPARAM lParam  //消息参数
);
返回TRUE:缺省处理函数不需要处理。
返回FALSE: 交给缺省处理函数处理。

模式对话框:INT DialogBox(
    HINSTANCE hInstance, //应用程序实例句柄
    LPCTSTR lpTemplate, //对话框资源ID
    HWND hWndParent, //对话框父窗口
    DLGPROC lpDialogFunc //自定义函数
);
DialogBox是一个阻塞函数,只有当对话框关闭后,才会返回,继续执行后面代码。
返回值是通过EndDialog设置。
对话框的关闭:
BOOL EndDialog(
    HWND hDlg, //关闭的对话框的窗口句柄
    INT_PTR nResult //关闭的返回值
);
关闭模式对话框,只能用这个函数。nResult是DialogBox返回值
对话框创建之后显示之前,不发WM_CREATE消息,发WM_INITDIALOG消息。

无模式对话框:
创建:
HWND CreateDialog(
    HINSTANCE hInstance, // 应用程序实例句柄
    LPCTSTR lpTemplate,//模板资源ID
    HWND hWndParent, //父窗口
    DLGPROC lpDialogFunc //自定义函数。
);
CreateDialog是一个非阻塞函数,创建成功后返回窗口句柄,需要用ShowWindow显示对话框。
对话框的关闭要用DestroyWindow。

#include <windows.h>
#include "resource.h"
HINSTANCE g_hInstance;INT CALLBACK DlgProc(HWND hwndlg, UINT msgId, WPARAM wParam, LPARAM lParam) {switch (msgId) {case WM_SYSCOMMAND:if (wParam == SC_CLOSE) {//销毁模式对话框EndDialog(hwndlg, 100);}break;case WM_INITDIALOG:MessageBox(hwndlg, "WM_INITDIALOG", "Infor", MB_OK);break;}return false;//将消息交给真正的对话框处理函数的后续代码帮我们处理。
}
void OnCommand(HWND hWnd, WPARAM wParam) {switch (LOWORD(wParam)) {case ID_MODEL: {int nRet = DialogBox(g_hInstance, (char*)IDD_DIALOG1, hWnd, DlgProc);if (nRet == 100) MessageBox(hWnd, "successful", "Infor", MB_OK);break;}}
}
//窗口处理函数(自定义,处理消息)
LRESULT CALLBACK WndProc(HWND hWnd, UINT msgId, WPARAM wParam, LPARAM lParam) {switch (msgId) {case WM_COMMAND:OnCommand(hWnd, wParam);break;case WM_DESTROY:PostQuitMessage(0);break;}return DefWindowProc(hWnd, msgId, wParam, lParam);
}//入口函数
int  CALLBACK WinMain(HINSTANCE hIns, HINSTANCE hPreIns, LPSTR lpCmdLine, int nCmdShow) {g_hInstance = hIns;//注册窗口类WNDCLASS wc = { 0 };wc.cbClsExtra = 0;wc.cbWndExtra = 0;wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);wc.hCursor = NULL;wc.hIcon = NULL;wc.hInstance = hIns;wc.lpfnWndProc = WndProc;TCHAR name[] = TEXT("Main");wc.lpszClassName = name;wc.lpszMenuName = (char*)IDR_MENU1;wc.style = CS_HREDRAW | CS_VREDRAW;RegisterClass(&wc);//将以上所有赋值全部写入操作系统。//在内存中创建窗口HWND hWnd = CreateWindow(name, TEXT("title"), WS_OVERLAPPEDWINDOW, 100, 100, 500, 500, NULL, NULL, hIns, NULL);//显示窗口ShowWindow(hWnd, SW_SHOW);UpdateWindow(hWnd);//消息循环MSG nMsg = { 0 };while (GetMessage(&nMsg, NULL, 0, 0)) {TranslateMessage(&nMsg);DispatchMessage(&nMsg);//将消息交给窗口处理函数来处理}return 0;
}

win 32 学习笔记(十) 对话框相关推荐

  1. win 32学习笔记(三) 消息队列

    抓取消息: GetMessage:从系统获取消息,将消息从系统中移除,阻塞函数.当系统无消息时,会等候下一条消息. PeekMessage:以查看的方式从系统获取消息,可以不将消息从系统移除,非阻塞函 ...

  2. Python语言入门这一篇就够了-学习笔记(十二万字)

    Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...

  3. Polyworks脚本开发学习笔记(十)-互动式开发及出错控制

    Polyworks脚本开发学习笔记(十)-互动式开发及出错控制 第八章组合的各种命令,完成了一个对所选的测点名称进行命名的任务.但是,由于任务中没有交互环节,只能机械地将 曲面点 - 包边点改为Flu ...

  4. OpenCV学习笔记(十二)——图像分割与提取

    在图像处理的过程中,经常需要从图像中将前景对象作为目标图像分割或者提取出来.例如,在视频监控中,观测到的是固定背景下的视频内容,而我们对背景本身并无兴趣,感兴趣的是背景中出现的车辆.行人或者其他对象. ...

  5. IOS之学习笔记十五(协议和委托的使用)

    1.协议和委托的使用 1).协议可以看下我的这篇博客 IOS之学习笔记十四(协议的定义和实现) https://blog.csdn.net/u011068702/article/details/809 ...

  6. 吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进

    吴恩达<机器学习>学习笔记十四--应用机器学习的建议实现一个机器学习模型的改进 一.任务介绍 二.代码实现 1.准备数据 2.代价函数 3.梯度计算 4.带有正则化的代价函数和梯度计算 5 ...

  7. 吴恩达《机器学习》学习笔记十二——机器学习系统

    吴恩达<机器学习>学习笔记十二--机器学习系统 一.设计机器学习系统的思想 1.快速实现+绘制学习曲线--寻找重点优化的方向 2.误差分析 3.数值估计 二.偏斜类问题(类别不均衡) 三. ...

  8. 吴恩达《机器学习》学习笔记十——神经网络相关(2)

    吴恩达<机器学习>学习笔记十--神经网络相关(2) 一. 代价函数 二. 反向传播算法 三. 理解反向传播算法 四. 梯度检测 五. 随机初始化 1.全部初始化为0的问题 2.随机初始化的 ...

  9. Mr.J-- jQuery学习笔记(十九)--自定义动画实现图标特效

    之前有写过自定义动画Mr.J-- jQuery学习笔记(十八)--自定义动画 这次实现一个小demo 图标特效 页面渲染 <!DOCTYPE html> <html lang=&qu ...

最新文章

  1. 【Java入门提高篇】Day6 Java内部类——成员内部类
  2. 2019百度之星初赛-1
  3. 谈一谈:抽象工厂+反射+配置文件 实现数据访问程序
  4. linux php后门,Linux_一个初级的linux后门制作方法,众所周知,Linux的文件权限如: - phpStudy...
  5. 接入amazon avs_每日新闻综述:亚马逊将互联网接入推向全球的宏伟计划
  6. USACO2.4のP1519-穿越栅栏(Overfencing)【bfs】
  7. DeVOpS 实战:Kubernetes 微服务监控体系
  8. 电影控、如何从视频文件名获取信息
  9. sql server php删除,使用 SQL Server 添加删除修改查询储存过程
  10. T1155 金明的预算方案 codevs
  11. python3使用ddt框架进行外部传参
  12. 用Excel做一个案例分析
  13. 使用yarn创建react项目报node_modules\core-js-pure: Command failed错误
  14. 在线生成android ios icon,一键生成Android/Android-HD/IOS 多尺寸ICON
  15. NIOS II 烧写epcs总结
  16. 深度探索C++对象模型(一):关于对象
  17. php fatal error: cannot redeclare,Fatal error: Cannot redeclare 常见问题_PHP教程
  18. SH7218T拆解手记(4)修改外屏大时钟
  19. Core Animation学习笔记—第二节Setting up Layer Objects
  20. strcmp函数实现(c语言)

热门文章

  1. SIR,CQI,RSSI(转自搜狗百科)LTE上报的CQI、PMI、RI分别有什么用(转载自C114论坛)...
  2. Intel NUC8i5BEH安装Windows10+Hackintosh双系统
  3. 电脑其实很好玩,玩好了其实很无耻(转自校内)
  4. WHM面板修改PHP版本教程
  5. vue使用高德地图aMap实现轨迹动画查询显示
  6. matlab sinh是什么,sinh(sinh怎么读)
  7. JUC系列ReentrantLock
  8. HCIA笔记-----第二天
  9. 外网如何访问内网/局域网网站【内网穿透】
  10. 波兰表达式(Polish Notation)简要介绍