关于用CreateDialog创建的对话框中的EDIT子控件的有关问题

关于用CreateDialog创建的对话框中的EDIT子控件的问题
我用API(CreateDialog)创建了一个无模式对话框,之后在该对话框的OnInitDlg函数中用CreateWindowEx创建了一个EDIT子控件,显示对话框后,如下问题出来了:
1.   EDIT控件能接受到键盘的消息,但是只有一部分系统键盘消息能有作用,比如输入A-Z都没反应,使用CTRL+V则能有效果,方向键和INSERT,HOME,DELETE,END都能起作用,其他的都不行。
2.   我用spy++跟踪过该EDIT控件,它是能收到WM_KEYDOWN和WM_KEYUP消息的,就是没有反应。
3.   如过我用DialogBox将对话框显示成模式的,则一切正常!!!

本人刚涉及UI方面的工作,困难重重啊,恳请各位路过的高手,有时间帮忙解决一下,最好能告知具体的原因,分不够好说,可以另外开贴加。

------解决方案--------------------
A-Z都没反应,应该是接受不到WM_CHAR消息,
不知道你怎么做出来的,
HWND CreateDialog( HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
建议你把lpTemplate所指向的对话框模板里加个编辑框再试试。
------解决方案--------------------
写了个例子,测试了一下,发现出现你这种情况的可能就是在DispatchMessage前面没有先TranslateMessage,而TranslateMessage就是检查WM_KEYDOWN消息是否是一个char消息,如果是一个char消息,就会向消息队例里放一个WM_CHAR.
程序如下,可以分别试试无模式和模式的。
#include "stdafx.h "
#include "resource.h "

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;
BOOL InitInstance(HINSTANCE, int);

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}

MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
// {
TranslateMessage(&msg);
DispatchMessage(&msg);
// }
}

return msg.wParam;
}


LRESULT CALLBACK dlgproc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_INITDIALOG:
return TRUE;

case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hwnd, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable
hWnd =
// DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX),NULL, (DLGPROC ) dlgproc);
CreateDialog(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX),NULL, (DLGPROC ) dlgproc);
if (!hWnd)
{
return FALSE;
}

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}

------解决方案--------------------
LS
同意LS说的