我对windows界面编程一直不甚了解,自从学C语言时我就想如何写一个窗体出来,不过我走了很多弯路,MFC和纯SDK方式的都嫌繁琐,MFC自动生成的代码,SDK繁琐的WndProc,都很让我头疼,所以一直以来我都用C++写黑洞洞console程序。而看了windows核心编程中jeffrey的示例代码,很是喜欢这种风格,既保持了SDK编程的灵活,又很好控制。其实说起来也不是很出奇,界面用的资源编辑器,消息处理用了消息分流器。
仿照他的第一个例子,我写了个简单的小程序。
#include < windowsx.h >
#include < tchar.h >
#include “ resource.h “
#include “ CmnHdr.h “
bool Dlg_OnInitDialog(HWND hwnd,HWND hwndFocus,LP ARAM lParam)
{
return true ;
}
void Dlg_OnCommand(HWND hwnd, int id,HWND hwndCtrl,UINT codeNotify)
{
switch (id)
{
case IDCANCEL:
EndDialog(hw nd, 0 );
break ;
case IDOK:
MessageBox(N ULL, “ hello world! “ , “ win3201 “ ,MB_OK);
break ;
}
}
INT_PTR WINAPI Dlg_Proc(HWND hwnd,UINT u Msg,WPARAM wParam,LPARAM lParam)
{
switch (uMsg)
{
chHANDLE_DLG MSG(hwnd,WM_INITDIALOG,Dlg_OnInitDialog);
chHANDLE_DLG MSG(hwnd,WM_COMMAND,Dlg_OnCommand);
}
return false ;
}
int WINAPI WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPST R lpCmdLine, IN int nShowCmd )
{
DialogBoxParam(hInstance,MAKEINTRESO URCE(IDD_DIALOG1),NULL,Dlg_Proc,_ttoi(lpCmdLine));
return 0 ;
}
#include < tchar.h >
#include “ resource.h “
#include “ CmnHdr.h “
bool Dlg_OnInitDialog(HWND hwnd,HWND hwndFocus,LP ARAM lParam)
{
return true ;
}
void Dlg_OnCommand(HWND hwnd, int id,HWND hwndCtrl,UINT codeNotify)
{
switch (id)
{
case IDCANCEL:
EndDialog(hw nd, 0 );
break ;
case IDOK:
MessageBox(N ULL, “ hello world! “ , “ win3201 “ ,MB_OK);
break ;
}
}
INT_PTR WINAPI Dlg_Proc(HWND hwnd,UINT u Msg,WPARAM wParam,LPARAM lParam)
{
switch (uMsg)
{
chHANDLE_DLG MSG(hwnd,WM_INITDIALOG,Dlg_OnInitDialog);
chHANDLE_DLG MSG(hwnd,WM_COMMAND,Dlg_OnCommand);
}
return false ;
}
int WINAPI WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPST R lpCmdLine, IN int nShowCmd )
{
DialogBoxParam(hInstance,MAKEINTRESO URCE(IDD_DIALOG1),NULL,Dlg_Proc,_ttoi(lpCmdLine));
return 0 ;
}
资源文件仅仅是个最简单的窗口,两个按钮:确定,取消。
CmnHdr.h是windows核心编程一书中例子都用到的头文件,里面定义了一些很好用的宏。下次再详细说说这个文件。
源代码下载:
http://www.filelodge.com/files/hdd7/152006/win01.rar
>> 本文固定链接: http://www.vcgood.com/archives/1050