主题:[转帖]请问如何用API写一个没有主窗口的纯的对话框的程序???
TG42
[专家分:0] 发布于 2005-10-23 19:20:00
[em10]我翻遍了我买的好几本讲WIN32API的书,发现里面在讲述对话框的举例中全部都是带了主窗口的程序,而不是纯的只有对话框的程序!
所以我非常想知道如何用API的方式写一个完全基于对话框的程序?谢谢好心人!!!
回复列表 (共14个回复)
沙发
onasp [专家分:5600] 发布于 2005-10-23 21:12:00
#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0) ;
return 0 ;
}
板凳
jhkdiy [专家分:1620] 发布于 2005-10-30 17:23:00
如果用Win32asm方式我知道可以用DialogBoxParam()函数制作单纯的对话框程序。
1:首先用资源编辑器(VC有自带)建立一个对话框资源。
2:在获取程序句柄后调用DialogBoxParam()函数,函数指定一个消息处理过程。
3:在消息处理函数中处理相关事件。
但是SDK方式不能这样,因为WinMain()是整个程序的入口点,如果没有它系统就不知你的程序从那里开始执行,这跟C语言的main()函数是一样的,而win32asm则可以显式定义程序的入门点。
3 楼
vrace [专家分:3590] 发布于 2005-11-05 15:01:00
Win32 SDK 同样可以。请楼上的不要乱说。
int WINAPI WinMain(...)
{
DialogBoxParam(...);
return 0;
}
这和asm的实现是一样的
4 楼
jhkdiy [专家分:1620] 发布于 2005-11-05 19:19:00
我的意思是能脱离WinMain()这个函数吗?你的代码不还是有WinMain()?
5 楼
zerowq [专家分:40] 发布于 2005-11-09 13:07:00
API编程WinMain是必需的(这个函数并不说明你的程序有主窗口),当然你也可以用MFC
6 楼
xbx [专家分:40] 发布于 2005-11-09 19:43:00
楼上的明显就是不知道windows下的编程的。
如果在windows下,所有的程序都必须有一个winmain,就算是用asm编写也是。
7 楼
jinhu [专家分:230] 发布于 2005-11-19 20:59:00
#include "test.h"
HINSTANCE hInstance;
void start(void){
hInstance = GetModuleHandle(0);
DialogBoxParam(hInstance,(char*)IDD_DIALOG_1,0,&DlgProc,0);
ExitProcess(0);
}
long __stdcall DlgProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){
switch(msg){
case WM_INITDIALOG:
// 青戾龛螯 耱囗溧痱眢?桕铐牦 磬 "疋铪 耦狁蜮屙眢?
SendMessage(hwnd,WM_SETICON,ICON_BIG,
(LPARAM)LoadIcon(hInstance,(char*)MAINICON));
SendMessage(hwnd,WM_SETICON,ICON_SMALL,
(LPARAM)LoadImage(hInstance,(char*)MAINICON,IMAGE_ICON,16,16,0));
break;
case WM_CLOSE:
DlgProc(hwnd,WM_COMMAND,IDB_EXIT,0);
break;
case WM_COMMAND:
switch(wParam){
case IDB_PLAY:
// 茵??-?
if(!uFMOD_PlaySong(MAKEINTRESOURCE(ID_XM),hInstance,XM_RESOURCE))
MessageBox(hwnd,"硒栳赅, 犭桧 :(",0,MB_ICONSTOP);
break;
case IDB_STOP:
// 橡尻疣屐 忸耧痤桤忮溴龛?
uFMOD_StopSong();
break;
case IDB_EXIT:
// 青忮瘌噱?磬 镳桦铈屙桢
uFMOD_StopSong();
EndDialog(hwnd,0);
}
break;
default: return 0;
}
return 1;
}
8 楼
vrace [专家分:3590] 发布于 2005-11-26 15:29:00
4,5,6楼,你们要不要赌一下,我不用 WinMain 照样给你们写个出来?
9 楼
jhkdiy [专家分:1620] 发布于 2005-11-27 22:11:00
我想看看。
10 楼
vrace [专家分:3590] 发布于 2005-12-02 20:19:00
我很欣赏你的勇气
请你下载以下工程文件仔细研究一下
http://www.websamba.com/vrace/nowinmain.cab
使用 Visual Studio .NET 2005 建立的工程
我来回复