SDK,菜鸟关于CreateDialog的Dialog中动态创建按钮的疑问

desatan 2009-06-11 11:32:31

#include <windows.h>
#include "resource.h"

LRESULT CALLBACK DiagFunc(HWND,UINT,WPARAM,LPARAM);

int __stdcall WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nShowCmd)
{
HWND hwnd,hb;
MSG msg;
hwnd=CreateDialog(hInst,(LPCTSTR)IDD_DIALOG,NULL,(DLGPROC)DiagFunc);
hb=CreateWindowEx(
NULL,
"Button",
"Button",
WS_CHILD|WS_VISIBLE,
10,10,65,22,
hwnd,
(HMENU)1001,
hInst,
NULL);

ShowWindow(hwnd,SW_NORMAL);
UpdateWindow(hwnd);

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK DiagFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message){

case WM_CREATE:

MessageBox(hwnd,"Hello","Hello",MB_OK);

break;
case WM_INITDIALOG:
//SetWindowPos(hwnd,HWND_TOP,100,100,500,600,SWP_SHOWWINDOW);

break;
case WM_DESTROY:
MessageBox(hwnd,"Hello","Hello",MB_OK);
PostQuitMessage(0);
break;
case WM_CLOSE:
DestroyWindow(hwnd);
return TRUE;
}
return FALSE;
}

动态创建发生在WinMain中CreateDialog之后,可成功创建一个按钮

=======================================================================================================

#include <windows.h>
#include "resource.h"

LRESULT CALLBACK DiagFunc(HWND,UINT,WPARAM,LPARAM);

int __stdcall WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nShowCmd)
{
HWND hwnd;
MSG msg;
hwnd=CreateDialog(hInst,(LPCTSTR)IDD_DIALOG,NULL,(DLGPROC)DiagFunc);


ShowWindow(hwnd,SW_NORMAL);
UpdateWindow(hwnd);

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK DiagFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message){

case WM_CREATE:

MessageBox(hwnd,"Hello","Hello",MB_OK);
CreateWindowEx(
NULL,
"Button",
"Button",
WS_CHILD|WS_VISIBLE,
10,10,65,22,
hwnd,
(HMENU)1001,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
break;
case WM_INITDIALOG:
//SetWindowPos(hwnd,HWND_TOP,100,100,500,600,SWP_SHOWWINDOW);

break;
case WM_DESTROY:

PostQuitMessage(0);
break;
case WM_CLOSE:
DestroyWindow(hwnd);
return TRUE;
}
return FALSE;
}

在WM_CREATE中不能创建按钮(不能显示按钮), MessageBox(hwnd,"Hello","Hello",MB_OK); 也不会被执行。是否CreateDialog不会产生WM_CREATE消息?如果我想在Dialog创建(即产生WM_CREATE或类似消息)时动态创建按钮该怎么办?

...全文
156 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
desatan 2009-06-12
  • 打赏
  • 举报
回复
找到解释了 http://topic.csdn.net/u/20070822/16/b7a240c4-c72f-4d46-aa8f-ee9f1b3ec56c.html

谢谢Mackz
desatan 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Mackz 的回复:]
对于对话框在WM_INITDIALOG中初始化你的数据,创建你的按钮。
[/Quote]
报错。弹出一个调试错误的对话框。
dialog.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。
AppName: dialog.exe AppVer: 0.0.0.0 ModName: dialog.exe
ModVer: 0.0.0.0 Offset: 0000114c

Loaded symbols for 'F:\proj\dialog\Debug\dialog.exe'
Loaded 'C:\WINDOWS\system32\ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\imm32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\secur32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\lpk.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\usp10.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\guard32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ole32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\version.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\fltlib.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\UXTHEME.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSCTF.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSCTFIME.IME', no matching symbolic information found.
Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\comctl32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\shlwapi.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\apphelp.dll', no matching symbolic information found.
The thread 0xF2C has exited with code 0 (0x0).
The thread 0xEE0 has exited with code -1073741819 (0xC0000005).
The program 'F:\proj\dialog\Debug\dialog.exe' has exited with code -1073741819 (0xC0000005).
菜牛 2009-06-12
  • 打赏
  • 举报
回复
对于对话框在WM_INITDIALOG中初始化你的数据,创建你的按钮。

16,551

社区成员

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

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

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