我的非模式对话框不能够正常显示了

liulin2025 2012-11-15 09:35:55
// ag.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "ag.h"

#define MAX_LOADSTRING 100

// 全局变量:
HINSTANCE hInst; // 当前实例
TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名
HWND hDialog; //窗口



INT_PTR CALLBACK DialogProc(
_In_ HWND hwndDlg,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);


int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{

// TODO: 在此放置代码。
MSG msg;
HACCEL hAccelTable;

// 初始化全局字符串
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_AG, szWindowClass, MAX_LOADSTRING);


hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_AG));

hDialog=CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc);

ShowWindow(hDialog,SW_SHOW);

UpdateWindow(hDialog);

// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!hInstance || !IsDialogMessage(hDialog,&msg) )
{
if(!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}

return (int) msg.wParam;
}






INT_PTR CALLBACK DialogProc(
_In_ HWND hwndDlg,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
)
{

switch(uMsg)
{
case WM_COMMAND:

if( (LOWORD(lParam)==IDOK) || (LOWORD(lParam)==IDCANCEL) )
{

DestroyWindow(hwndDlg);
return TRUE;
}

break;

default:
return FALSE;
}
return FALSE;
}





任务栏倒是出现了这个对话框,但是并没有像弹出来。

必须去任务栏哪里点击,才显示。说白了,就是程序后,这个对话框处于最小化状态中。

为什么啊。


对话框风格状体,我是采用默认的, 没有修改过的。


...全文
113 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
儿女情长 2012-11-16
  • 打赏
  • 举报
回复
我建了一个工程试了你的代码,只改了一点使编译能通过。 在我这里对话框可以正常弹出,且在最顶层可以直接看到的。只是点击OK和Cancel没有反应。 你这个对话框是没有最小化功能的。你之前运行的时候只是被其他程序窗口盖住了。
schlafenhamster 2012-11-16
  • 打赏
  • 举报
回复
鼠标放‘WM_COMMAND’按 F1
liulin2025 2012-11-16
  • 打赏
  • 举报
回复
引用 6 楼 YI_RIVER_LOVE 的回复:
首先要知道wParam和lParam分别表示什么
第3楼
若风09 2012-11-16
  • 打赏
  • 举报
回复
首先要知道wParam和lParam分别表示什么
liulin2025 2012-11-16
  • 打赏
  • 举报
回复
liulin2025 2012-11-15
  • 打赏
  • 举报
回复
还有人吗啊 亲们
liulin2025 2012-11-15
  • 打赏
  • 举报
回复
引用 2 楼 VisualEleven 的回复:
if( (LOWORD(lParam)==IDOK) || (LOWORD(lParam)==IDCANCEL) ------------ 这里错了吧 LOWORD(wParam);不是LOWORD(lParam);
谢谢了, 罩着你的修改后,就可以弹出对话框来了。 我无法理解为什么修改后,就可以弹出对话框呢? 难道是以为直接return false了嘛? 如果是的话, 那么以下有如何解释呢? 注意,我只处理wm_command 消息,其他消息一概不处理 创建对话框,显示对话框都没有任何来处理的,代码可以看出的。 为什么照着你的修改后,就可以弹出了? 真实奇怪,没有谁来处理啊 我没有调用defwindowproc
Eleven 2012-11-15
  • 打赏
  • 举报
回复
if( (LOWORD(lParam)==IDOK) || (LOWORD(lParam)==IDCANCEL) ------------ 这里错了吧 LOWORD(wParam);不是LOWORD(lParam);
liulin2025 2012-11-15
  • 打赏
  • 举报
回复
并且我点击idok idcancel 都不能够关闭对话框, 感觉是,对话框窗口处理函数没有得到正确的运行,或者没有达到我的预期效果

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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