// 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(wParam)==IDOK) || (LOWORD(wParam)==IDCANCEL) )
{
DestroyWindow(hwndDlg);
return TRUE;
}
break;
default:
return FALSE;
}
return FALSE;
}
为什么可以弹出对话框来?我在对话框处理函数里,没有defwindowproc, 当对话框创建的时候,DialogProc 可以说都是返回fasle的。意味着:DialogProc不处理创建时候的一些列动作。那么为什么对话框可以显示??我第一次写程序的手,很不小心 ,把LOWORD(wparam) 写成了LOWORD(lparam),结果就没有显示对话框。为啥改过来后,就可以显示了。 要注意:我只处理了wm_command. wm_command与创建弹出对话框无关
//
#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(wParam)==IDOK) || (LOWORD(wParam)==IDCANCEL) )
{
DestroyWindow(hwndDlg);
return TRUE;
}
break;
default:
return FALSE;
}
return FALSE;
}
为什么可以弹出对话框来?我在对话框处理函数里,没有defwindowproc, 当对话框创建的时候,DialogProc 可以说都是返回fasle的。意味着:DialogProc不处理创建时候的一些列动作。那么为什么对话框可以显示??我第一次写程序的手,很不小心 ,把LOWORD(wparam) 写成了LOWORD(lparam),结果就没有显示对话框。为啥改过来后,就可以显示了。 要注意:我只处理了wm_command. wm_command与创建弹出对话框无关
解决方案 »
- 哪位在Win8成功安装了VC6,,VC6在win8能完美兼容吗?
- 求助:使用QT加载全局钩子,只能监测到本窗口的活动
- 16进值,怎么保存在,以经有值的数组变量中间插入呢?
- 为什么我的工程调试时的“apply code changes”一直都是灰色的,不能用啊?
- (100分求教)怎么用hook钩子钩住Textout()之类的API函数?
- 怎样相应radio button的点击?
- [请教VC高手]VC里有没有16位的Float型
- Dll 的问题。
- 有关全局变量的几个问题--高分相谢
- 请问怎样通过类型库(.TLB文件)获取组件接口信息
- 为什么我的托盘弹出菜单弹出后就不消失了
- 各位师兄师姐急啊!如何在mschart图表中显示的曲线中 隐藏显示数据的值?
ShowWindow(hDialog,SW_SHOW);
为什么会觉得创建了一个IDDDIALOG然后又showwindow后他不会显示出来?
我在对话框处理函数里,没有defwindowproc, 当对话框创建的时候,DialogProc 可以说都是返回fasle的。
意味着:DialogProc不处理创建时候的一些列动作。那么为什么对话框可以显示??
我第一次写程序的手,很不小心 ,把LOWORD(wparam) 写成了LOWORD(lparam),结果就没有显示对话框。
为啥改过来后,就可以显示了。
要注意:我只处理了wm_command. wm_command与创建弹出对话框无关
那你得先弄明白msg嫩个结构体中wParam与lParam存储的是什么信息了
所以那些初始化dialog,构造dialog的处理,全都是系统默认做好了,你create并show,就一定能出来的啊
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);
// }
// }
//}
while(1)
{
Sleep(200);
}
//return (int) msg.wParam;
}
INT_PTR CALLBACK DialogProc(
_In_ HWND hwndDlg,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
)
{ switch(uMsg)
{
case WM_INITDIALOG: return TRUE; case WM_COMMAND: if( (LOWORD(wParam)==IDOK) || (LOWORD(wParam)==IDCANCEL) )
{ DestroyWindow(hwndDlg);
return TRUE;
} break;
case WM_MOVE: return TRUE; break;
default:
return DefWindowProc(hwndDlg,uMsg,wParam,lParam);
}
return FALSE;
}
已经使用了defwindowproc了,为什么程序运行后,光标达到界面,就有死住的感觉。无法响应的感觉。
没有显示对话框,跟这个“把LOWORD(wparam) 写成了LOWORD(lparam)”没关系的检查一下有没下了断点,
调试运行时,窗口被VS挡住也是经常有的另外
switch(uMsg)
{
case WM_COMMAND: if( (LOWORD(wParam)==IDOK) || (LOWORD(wParam)==IDCANCEL) )
{ DestroyWindow(hwndDlg);
return TRUE;
} break;
// 加上这个
case WM_DESTROY:
PostQuitMessage(0);
return TRUE;
default:
return FALSE;
}
return FALSE;
DialogProc里只需return TRUE(消息已处理过)或FALSE(消息未理过)
不要调用DefWindowProc