回 帖 发 新 帖 刷新版面

主题:[转帖]请问如何用API写一个没有主窗口的纯的对话框的程序???

[em10]我翻遍了我买的好几本讲WIN32API的书,发现里面在讲述对话框的举例中全部都是带了主窗口的程序,而不是纯的只有对话框的程序!
     所以我非常想知道如何用API的方式写一个完全基于对话框的程序?谢谢好心人!!!

回复列表 (共14个回复)

沙发

#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 ;
}

板凳

如果用Win32asm方式我知道可以用DialogBoxParam()函数制作单纯的对话框程序。
1:首先用资源编辑器(VC有自带)建立一个对话框资源。
2:在获取程序句柄后调用DialogBoxParam()函数,函数指定一个消息处理过程。
3:在消息处理函数中处理相关事件。

但是SDK方式不能这样,因为WinMain()是整个程序的入口点,如果没有它系统就不知你的程序从那里开始执行,这跟C语言的main()函数是一样的,而win32asm则可以显式定义程序的入门点。

3 楼

Win32 SDK 同样可以。请楼上的不要乱说。

int WINAPI WinMain(...)
{
DialogBoxParam(...);
return 0;
}

这和asm的实现是一样的

4 楼

我的意思是能脱离WinMain()这个函数吗?你的代码不还是有WinMain()?

5 楼

API编程WinMain是必需的(这个函数并不说明你的程序有主窗口),当然你也可以用MFC

6 楼

楼上的明显就是不知道windows下的编程的。
如果在windows下,所有的程序都必须有一个winmain,就算是用asm编写也是。

7 楼

#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 楼

4,5,6楼,你们要不要赌一下,我不用 WinMain 照样给你们写个出来?

9 楼

我想看看。

10 楼

我很欣赏你的勇气
请你下载以下工程文件仔细研究一下

http://www.websamba.com/vrace/nowinmain.cab

使用 Visual Studio .NET 2005 建立的工程

我来回复

您尚未登录,请登录后再回复。点此登录或注册