, NULL, 0, 0) )
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}
/*---------- 主窗口函数 WndProc()-------------*/
long FAR PASCAL MainWndProc(HWND hWnd, WORD message,
WORD wParam, LONG lParam)
{
static HANDLE hLibrary;
char szBuf[80];
switch(message)
{
case WM_CREATE:
/*读应用
程序的初始化文件prac.ini,检查是否有扩展功能的动态链接库,若没有则返回;若有则装入该动态链接函接数库,并取得接口函数的地址,对接口函数进行初始化*/
GetPrivateProfileString("MyApp" , "AddMyapp" , "" ,
szBuf,sizeof(szBuf) , "prac.ini");
if (szBuf[0] != ''\0'')
if ((hLibrary = LoadLibrary(szBuf)) >= 32)
{
LpExtProc=(FARPROC)GetProcAddress(hLibrary,
MAKEINTRESOURCE(2));
LpExtProc(hWnd , EXTPROC_LOAD);
}
else
MessageBox(hWnd,"Load library failed!","Error",MB_OK);
break;
case WM_COMMAND:
/*函数MsgFilter( )用来过滤菜单消息*/
MsgFilter(hWnd , wParam);
switch (wParam)
{
case IDM_COMMAND1: //处理应用
程序 case IDM_COMMAND2: //定义的菜单功
case IDM_COMMAND3: //能,此处省略。
}
return 0;
case WM_DESTROY:
if(hLibrary != NULL)
FreeLibrary(hLibrary);
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
/*下面过滤函数,把菜单消息的来源分成两类,即应用程序本身的菜单消息和来自功能扩展部分的菜单消息。应用程序把值在MIN_FMT至MAX_FMT之间的菜单消息留给待扩展程序使用。如果有来自扩展程序的消息,就通过接口函数LpExtProc()把该消息传送给扩展程序,由扩展
程序负责处理该消息*/
void MsgFilter(HWND hWnd , WPARAM wParam)
{
if((wParam >= MIN_FMT)&&(wParam <= MAX_FMT))
LpExtProc(hWnd , wParam);
return;
}
/*---------------- End of PRAC.C-----------------*/
/*----------- PRAC.H ----------*/
#define MIN_FMT 100
#define MAX_FMT 199
#define EXTPROC_LOAD 200
#define IDM_COMMAND1 201
#define IDM_CO