//Test.cpp
#include<windows.h>
#include"Test.h"
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
static char lpszClassName[]="Test";
static char lpszTitle[]="Hello World!";
HWND hWndMain;
HINSTANCE hMainHInst;
OPENFILENAME ofn;
CHOOSECOLOR chc;
CHOOSEFONT chf;
/*
*init WNDCLASS and regedit it
*/
BOOL InitWindowsClass(HINSTANCE hInstance)
{
WNDCLASS wndclass;
wndclass.style=0;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=lpszClassName;
if(! RegisterClass(&wndclass))
{
MessageBeep(0);
return FALSE;
}
return TRUE;
}
/*
*init windows and show it
*/
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)
{
HWND hwnd;
HMENU hMenu;
hMenu = LoadMenu(hInstance,"MENU");
InitWindowsClass(hInstance);
hwnd=CreateWindow(lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,
hMenu,
hInstance,
NULL);
if(!hwnd)
{
return FALSE;
}
hWndMain = hwnd;
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
return TRUE;
}
/*
* the interface of the programm
*/
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInst,
LPSTR lpszCmdLine,
int nCmdShow)
{
MSG Msg;
HACCEL hAccel;
hMainHInst = hInstance;
if(!InitWindowsClass(hInstance))
{
return FALSE;
}
if(!InitWindows(hInstance,nCmdShow))
{
return FALSE;
}
hAccel = LoadAccelerators(hInstance,"Menu");
while(GetMessage(&Msg,NULL,0,0))
{
if(!TranslateAccelerator(hWndMain,hAccel,&Msg))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
return (int)Msg.wParam;
}
/*
*deal proc of the pragramm
*/
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM
IParam)
{
static char lpstrFileName[] = "";
static COLORREF clref[16] = {0x00ff0000};
switch(message)
{
case WM_CREATE:
//OPENFILENAME结构成员
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.hInstance = hMainHInst;
ofn.lpstrFilter = "Text File(*.TXT)\0*.txt\0All File(*.*)\0*.*\0";
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 1;
ofn.lpstrFile = NULL;
ofn.nMaxFile = 0;
ofn.lpstrFileTitle=NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = NULL;
ofn.Flags = 0;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lpstrDefExt = NULL;
ofn.lCustData = 0;
ofn.lpfnHook = NULL;
ofn.lpTemplateName = NULL;
//选择颜色通用对话框
chc.lStructSize = sizeof(CHOOSECOLOR);
chc.hwndOwner = hwnd;
chc.rgbResult = 0;
chc.lpCustColors = clref;
chc.Flags = 0;
chc.lCustData = 0;
chc.lpfnHook = NULL;
chc.lpTemplateName = NULL;
//选择字体通用对话框
chf.lStructSize = sizeof(CHOOSEFONT);
chf.hwndOwner = hwnd;
chf.Flags = CF_BOTH|CF_TTONLY|CF_EFFECTS;
break;
case WM_COMMAND: //deal the menu command
switch(LOWORD(wParam))
{
case IDM_OPEN:
ofn.Flags = OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST;
ofn.lpstrTitle = "打开";
GetOpenFileName(&ofn);
break;
case IDM_SAVEAS:
ofn.Flags = OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT;
ofn.lpstrTitle="另存为...";
GetOpenFileName(&ofn);
break;
case IDM_FONT:
ChooseFont(&chf);
break;
case IDM_COLOR:
ChooseColor(&chc);
break;
case IDM_ABOUT:
MessageBox(hwnd,"通用对话框程序示例","关于",MB_OK);
break;
case IDM_EXIT:
SendMessage(hwnd,WM_DESTROY,0,0);
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
default:
return DefWindowProc(hwnd,message,wParam,IParam);
}
return(0);
}
//Test.h
#define IDM_OPEN 11
#define IDM_SAVEAS 12
#define IDM_EXIT 15
#define IDM_FONT 16
#define IDM_COLOR 17
#define IDM_ABOUT 19
//Test.rc
#include "Test.h"
MENU MENU DISCARDABLE
BEGIN
POPUP "文件(&F)"
BEGIN
MENUITEM "打开(&O)\tCtrl+O", IDM_OPEN
MENUITEM "另存为(&S)\tCtrl+S", IDM_SAVEAS
MENUITEM SEPARATOR
MENUITEM "退出\tCtrl+X", IDM_EXIT
END
POPUP "编辑(&E)"
BEGIN
MENUITEM "字体(&F)", IDM_FONT
MENUITEM "颜色(&C)", IDM_COLOR
END
POPUP "帮助(&H)"
BEGIN
MENUITEM "关于(&A)", IDM_ABOUT
END
END
MENU ACCELERATORS MOVEABLE PURE
BEGIN
"^O", IDM_OPEN, ASCII
"^S", IDM_SAVEAS, ASCII
"^X", IDM_EXIT, ASCII
END
转载:http://blog.csdn.net/lyz84331/archive/2008/01/02/2008564.aspx