关于非模态对话框
//帮看下错在哪,运行时整个对话框界面呈现未响应状态
#include <windows.h>
#include <iostream>
#include "resource.h"
using namespace std;
INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);
void ShowError();
void main()
{
HWND hwnd;
//要设置Visible属性TRUE
hwnd = ::CreateDialog(::GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);
if (hwnd == NULL)
{
ShowError();
}
system("pause");
}
void Dlg_OnCommand(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
cout << "WM_COMMAND" << endl;
}
INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
switch (uMsg)
{
//对话框整个创建及显示过程都没有产生该消息
case WM_CREATE: cout << "WM_CREATE" << endl; break;
//对话框初始化时发送一个该消息
case WM_INITDIALOG: cout << "WM_INITDIALOG" << endl; break;
//关闭按钮发送一个,任务栏"关闭窗口"时发送一个,任务管理器结束窗口发送两个该消息
case WM_CLOSE:
cout << "WM_CLOSE" << endl;
EndDialog(hwndDlg, 0xff);//用于结构模态对话框,并设置DialogBox()返回值
break;
//此消息在对话框摧毁时发送,例如调用EndDialog()后发送
case WM_DESTROY: cout << "WM_DESTROY" << endl; break;
//控件消息,包括右上角的最大,最小,关闭三个按钮,当按关闭按钮调用EndDialog()有时就没再发送WM_COMMAND
case WM_COMMAND: Dlg_OnCommand(hwndDlg, uMsg, wParam, lParam); break;
//其它WM_KEYDOWN/UP, WM_LBUTTONDOWN/UP....
default: break;
}
return FALSE; //这里肯定要返回 FALSE
}
void ShowError()
{
LPTSTR lpMsgBuf;
::FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
::GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf,
0,
NULL);
::MessageBox(NULL, lpMsgBuf, NULL, MB_OK | MB_ICONSTOP);
::LocalFree(lpMsgBuf);//释放操作系统开辟的缓冲区地址
}
#include <windows.h>
#include <iostream>
#include "resource.h"
using namespace std;
INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);
void ShowError();
void main()
{
HWND hwnd;
//要设置Visible属性TRUE
hwnd = ::CreateDialog(::GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);
if (hwnd == NULL)
{
ShowError();
}
system("pause");
}
void Dlg_OnCommand(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
cout << "WM_COMMAND" << endl;
}
INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
switch (uMsg)
{
//对话框整个创建及显示过程都没有产生该消息
case WM_CREATE: cout << "WM_CREATE" << endl; break;
//对话框初始化时发送一个该消息
case WM_INITDIALOG: cout << "WM_INITDIALOG" << endl; break;
//关闭按钮发送一个,任务栏"关闭窗口"时发送一个,任务管理器结束窗口发送两个该消息
case WM_CLOSE:
cout << "WM_CLOSE" << endl;
EndDialog(hwndDlg, 0xff);//用于结构模态对话框,并设置DialogBox()返回值
break;
//此消息在对话框摧毁时发送,例如调用EndDialog()后发送
case WM_DESTROY: cout << "WM_DESTROY" << endl; break;
//控件消息,包括右上角的最大,最小,关闭三个按钮,当按关闭按钮调用EndDialog()有时就没再发送WM_COMMAND
case WM_COMMAND: Dlg_OnCommand(hwndDlg, uMsg, wParam, lParam); break;
//其它WM_KEYDOWN/UP, WM_LBUTTONDOWN/UP....
default: break;
}
return FALSE; //这里肯定要返回 FALSE
}
void ShowError()
{
LPTSTR lpMsgBuf;
::FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
::GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf,
0,
NULL);
::MessageBox(NULL, lpMsgBuf, NULL, MB_OK | MB_ICONSTOP);
::LocalFree(lpMsgBuf);//释放操作系统开辟的缓冲区地址
}
...全文
相关推荐
VC MFC非模态对话框的实现方法
众所周知的,MFC中非模态对话框在显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换。本文就来给大家讲解一下非模态对话框的实现方法: 一、非模态对话框的对话框资源和对话框类 实际上,模态对话框和非模态对话框在创建对话框资源和生成对话框类上是没有区别的,因此,在创建模态对话框时所创建的IDD_TIP_DIALOG对话框资源和CTipDlg类都不需要修改。 二、创建及显示非模态对话框的步骤 需要修改的是,对话框类实例的创建和显示,也就是之前在CAdditionDlg::OnBnClickedAddButton()函数体中添加的对话框显示代码。下面是具体步骤: 1. 在Additio
MFC单文档弹出非模态对话框绘图
利用MFC实现单文档菜单响应,生成并显示非模态对话框,并对其进行实时地销毁,对话框还实现了绘图的功能(画直线),一例多用,自己花了一上午搞出来的
MFC 非模态对话框教程
对非模式对话框常常感到困惑的新手程序员,如果您记住几个漂亮的小动作,然后编程非模式对话框,将非常简单。
vc++制作非模态对话框
VC非模式对话框
MFC学习之模态对话框和非模态对话框
基于MFC向导实现的模态对话框和非模态对话框的代码,程序是基于vs2013写的,可以完美运行,适合新手学习,大佬请忽略!


