XFC演示-使用C语言通过WinAPI函数编写Windows程序
1,目标效果:
2,代码片段:
winMain.c
/*!
\file winMain.c
\version v1.00
\date 10/19/2014 20:26:19
*/
#define __WINMAIN_C__
/*********************************** START ************************************/
#include "all.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HANDLE hAccel;
MSG msg;
HWND hwnd, hDlg;
DWORD dwStyle;
dwStyle = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | 640;
hwnd = XFC_MainFrame_Create(hInstance, IDR_MAINFRAME, dwStyle, XFC_MESSAGE_MAP(frameMain));
if (!hwnd)
{
return 0;
}
hAccel = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_MAINFRAME));
InitCommonControls();
#if 1
hDlg = XFC_FormView_Create(hInstance, IDD_FORMVIEW, hwnd, XFC_MESSAGE_MAP(formView));
if (!hDlg)
{
return 0;
}
ShowWindow(hDlg, SW_SHOW);
UpdateWindow(hDlg);
#endif
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccel, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
/************************************ END *************************************/
#undef __WINMAIN_C__
frameMain.c
/*!
\file frameMain.c
\version v1.00
\date 10/19/2014 20:26:30
*/
#define __FRAMEMAIN_C__
/*********************************** START ************************************/
#include "all.h"
LRESULT CALLBACK frameMain_On_WM_CREATE(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
//HInstance = ((LPCREATESTRUCT)lParam)->hInstance;
return 0;
}
LRESULT CALLBACK frameMain_On_WM_COMMAND(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (LOWORD(wParam))
{
case ID_APP_EXIT:
SendMessage(hwnd, WM_CLOSE, 0, 0);
return 0;
case ID_APP_ABOUT:
XFC_Dialog_Create(_hInstance, IDD_ABOUTBOX, hwnd, XFC_MESSAGE_MAP(dlgAbout));
return 0;
}
return 0;
}
LRESULT CALLBACK frameMain_On_WM_PAINT(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
return 0;
}
LRESULT CALLBACK frameMain_On_WM_CLOSE(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
DestroyWindow(hwnd);
return 0;
}
LRESULT CALLBACK frameMain_On_WM_DESTROY(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PostQuitMessage(0);
return 0;
}
LRESULT CALLBACK frameMain_On_WM_ERASEBKGND(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
return TRUE;
}
BEGIN_XFC_MESSAGE_MAP(frameMain)
ON_XFC_MESSAGEF(WM_CREATE, frameMain_On_WM_CREATE)
ON_XFC_MESSAGEF(WM_COMMAND, frameMain_On_WM_COMMAND)
ON_XFC_MESSAGEF(WM_PAINT, frameMain_On_WM_PAINT)
ON_XFC_MESSAGEF(WM_CLOSE, frameMain_On_WM_CLOSE)
ON_XFC_MESSAGEF(WM_DESTROY, frameMain_On_WM_DESTROY)
ON_XFC_MESSAGEF(WM_ERASEBKGND, frameMain_On_WM_ERASEBKGND)
END_XFC_MESSAGE_MAP()
/************************************ END *************************************/
#undef __FRAMEMAIN_C__
formView.c
<pre name="code" class="cpp"><pre name="code" class="cpp">/*!
\file formView.c
\version v1.00
\date 10/19/2014 20:26:37
*/
#define __FORMVIEW_C__
/*********************************** START ************************************/
#define __XFC_PRINT__
#include "all.h"
LRESULT CALLBACK formView_On_IDC_LIST1(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int nNotifyCode = HIWORD(wParam);
switch (nNotifyCode)
{
case LBN_SELCHANGE:
{
HWND hwndComboBox = GetDlgItem(hwnd, IDC_LIST1);
int index = XFC_ListBox_GetCurSel(hwndComboBox);
XFC_ListBox_GetText(hwndComboBox, index, _szBuffer);
XFC_Window_SetString(GetDlgItem(hwnd, IDC_EDIT_ListBox), _szBuffer);
XFC_PRINT4("IDC_LIST1::LBN_SELCHANGE:%08X, %d, %d, %08X", hwnd, message, wParam, lParam);
return TRUE;
}
case LBN_DBLCLK:
{
MessageBox(hwnd, TEXT("LBN_DBLCLK"), TEXT("formView_On_IDC_LIST1"), MB_OK);
return TRUE;
}
}
return 0;
}
LRESULT CALLBACK formView_On_IDC_COMBO1(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int nNotifyCode = HIWORD(wParam);
switch (nNotifyCode)
{
case CBN_SELCHANGE:
{
HWND hwndComboBox = GetDlgItem(hwnd, IDC_COMBO1);
int index = XFC_ComboBox_GetCurSel(hwndComboBox);
XFC_ComboBox_GetLBText(hwndComboBox, index, _szBuffer);
XFC_Window_SetString(GetDlgItem(hwnd, IDC_STATIC_ComboBox), _szBuffer);
XFC_PRINT4("IDC_COMBO1::CBN_SELCHANGE:%08X, %d, %d, %08X", hwnd, message, wParam, lParam);
return TRUE;
}
}
return 0;
}
LRESULT CALLBACK formView_On_WM_TIMER(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (wParam)
{
case IDC_PROGRESS1:
{
XFC_Progress_StepIt(GetDlgItem(hwnd, IDC_PROGRESS1));
break;
}
default:
break;
}
return 0;
}
LRESULT CALLBACK formView_On_WM_INITDIALOG(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
XFC_Edit_SetInt(GetDlgItem(hwnd, IDC_EDIT1), 100);
XFC_Edit_SetInt(GetDlgItem(hwnd, IDC_EDIT2), 200);
XFC_Edit_SetInt(GetDlgItem(hwnd, IDC_EDIT3), 0);
XFC_Check_SetInt(GetDlgItem(hwnd, IDC_CHECK1), 1);
XFC_Check_SetInt(GetDlgItem(hwnd, IDC_CHECK2), 1);
XFC_Check_SetInt(GetDlgItem(hwnd, IDC_CHECK3), 1);
XFC_Radio_SetIntByID(hwnd, IDC_RADIO0, 6/*(IDC_RADIO6-IDC_RADIO0)*/, 0);
XFC_Edit_SetString(GetDlgItem(hwnd, IDC_EDIT_ListBox), TEXT("中文字符串 - Englsh String"));
XFC_ListBox_AddString(GetDlgItem(hwnd, IDC_LIST1), TEXT("XFC_ListBox_ResetContent"));
XFC_ListBox_AddString(GetDlgItem(hwnd, IDC_LIST1), TEXT("XFC_ListBox_AddString"));
XFC_ListBox_AddString(GetDlgItem(hwnd, IDC_LIST1), TEXT("XFC_ListBox_GetCurSel"));
XFC_ListBox_AddString(GetDlgItem(hwnd, IDC_LIST1), TEXT("XFC_ListBox_SetCurSel"));
XFC_ListBox_AddString(GetDlgItem(hwnd, IDC_LIST1), TEXT("XFC_ListBox_DeleteString"));
XFC_ListBox_AddString(GetDlgItem(hwnd, IDC_LIST1), TEXT("XFC_ListBox_GetText"));
XFC_ListBox_AddString(GetDlgItem(hwnd, IDC_LIST1), TEXT("XFC_ListBox_GetTextLen"));
XFC_ListBox_AddString(GetDlgItem(hwnd, IDC_LIST1), TEXT("XFC_ListBox_GetCount"));
XFC_ListBox_SetCurSel(GetDlgItem(hwnd, IDC_LIST1), 0);
XFC_Window_SetString(GetDlgItem(hwnd, IDC_STATIC_ComboBox), TEXT("中文字符串 - Englsh String"));
XFC_ComboBox_AddString(GetDlgItem(hwnd, IDC_COMBO1), TEXT("XFC_ComboBox_ResetContent"));
XFC_ComboBox_AddString(GetDlgItem(hwnd, IDC_COMBO1), TEXT("XFC_ComboBox_AddString"));
XFC_ComboBox_AddString(GetDlgItem(hwnd, IDC_COMBO1), TEXT("XFC_ComboBox_GetCurSel"));
XFC_ComboBox_AddString(GetDlgItem(hwnd, IDC_COMBO1), TEXT("XFC_ComboBox_SetCurSel"));
XFC_ComboBox_AddString(GetDlgItem(hwnd, IDC_COMBO1), TEXT("XFC_ComboBox_DeleteString"));
XFC_ComboBox_AddString(GetDlgItem(hwnd, IDC_COMBO1), TEXT("XFC_ComboBox_GetLBText"));
XFC_ComboBox_AddString(GetDlgItem(hwnd, IDC_COMBO1), TEXT("XFC_ComboBox_GetLBTextLen"));
XFC_ComboBox_AddString(GetDlgItem(hwnd, IDC_COMBO1), TEXT("XFC_ComboBox_GetCount"));
XFC_ComboBox_SetCurSel(GetDlgItem(hwnd, IDC_COMBO1), 0);
return 0;
}
LRESULT CALLBACK formView_On_WM_COMMAND(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int nID = LOWORD(wParam);
static TCHAR szFileName[MAX_PATH];
static TCHAR szTitleName[MAX_PATH];
static TCHAR szFilter[] = TEXT("Text Files (*.TXT)\0*.txt\0") \
TEXT("All Files (*.*)\0*.*\0\0") ;
static TCHAR szFolderName[MAX_PATH];
switch (nID)
{
case IDC_BUTTON_Calculate:
{
int i1, i2, i3;
i1 = XFC_Edit_GetInt(GetDlgItem(hwnd, IDC_EDIT1));
XFC_PRINT1("%d", i1);
i2 = XFC_Edit_GetInt(GetDlgItem(hwnd, IDC_EDIT2));
XFC_PRINT1("%d", i2);
i3 = i1 + i2;
XFC_Edit_SetInt(GetDlgItem(hwnd, IDC_EDIT3), i3);
XFC_PRINT1("%d", i3);
return TRUE;
}
case IDC_BUTTON_Start:
{
static BOOL flag = FALSE;
HWND hwndProgress = GetDlgItem(hwnd, IDC_PROGRESS1);
XFC_Progress_SetRange32(hwndProgress, 0, 100);
XFD_Progress_SetStep(hwndProgress, 10);
XFC_Progress_SetPos(hwndProgress, 0);
if (!flag)
{
SetTimer(hwnd, IDC_PROGRESS1, 300, NULL);
flag = TRUE;
XFC_Window_SetString(GetDlgItem(hwnd, IDC_BUTTON_Start), TEXT("停止"));
}
else
{
KillTimer(hwnd, IDC_PROGRESS1);
flag = FALSE;
XFC_Window_SetString(GetDlgItem(hwnd, IDC_BUTTON_Start), TEXT("开始"));
}
return TRUE;
}
case IDC_BUTTON_Count:
{
int i;
TCHAR szTemp[MAX_BUFFERSTRING] = "";
i = XFC_Radio_GetIntByID(hwnd, IDC_RADIO0, (IDC_RADIO6 - IDC_RADIO0));
XFC_Window_GetString(GetDlgItem(hwnd, (IDC_RADIO0 + i)));
lstrcat(szTemp, _szBuffer);
lstrcat(szTemp, TEXT(": "));
for (i = IDC_CHECK1; i <= IDC_CHECK5; i++)
{
if (XFC_Check_GetInt(GetDlgItem(hwnd, i)))
{
lstrcat(szTemp, XFC_Window_GetString(GetDlgItem(hwnd, i)));
lstrcat(szTemp, TEXT(", "));
}
}
XFC_Edit_SetString(GetDlgItem(hwnd, IDC_EDIT_Result), szTemp);
return TRUE;
}
case IDC_BUTTON_Open:
{
XFC_PopFileInitialize(hwnd, NULL, szFilter);
XFC_PopFileOpenDlg(hwnd, szFileName, szTitleName);
XFC_Edit_SetString(GetDlgItem(hwnd, IDC_EDIT_FilePath), szFileName);
return TRUE;
}
case IDC_BUTTON_Save:
{
XFC_PopFileInitialize(hwnd, NULL, szFilter);
XFC_PopFileSaveDlg(hwnd, szFileName, szTitleName);
XFC_Edit_SetString(GetDlgItem(hwnd, IDC_EDIT_FilePath), szFileName);
return TRUE;
}
case IDC_BUTTON_Browse:
{
XFC_PopFolderInitialize(hwnd, NULL, TEXT("请选择一个目录"));
XFC_PopFolderOpenDlg(hwnd, szFolderName, szTitleName);
XFC_Edit_SetString(GetDlgItem(hwnd, IDC_EDIT_FolderPath), szFolderName);
return TRUE;
}
case IDC_BUTTON_Add:
{
int count;
XFC_Edit_GetString(GetDlgItem(hwnd, IDC_EDIT_ListBox));
XFC_ListBox_AddString(GetDlgItem(hwnd, IDC_LIST1), _szBuffer);
count = XFC_ListBox_GetCount(GetDlgItem(hwnd, IDC_LIST1));
XFC_ListBox_SetCurSel(GetDlgItem(hwnd, IDC_LIST1), count - 1);
return TRUE;
}
case IDC_BUTTON_Del:
{
int index;
index = XFC_ListBox_GetCurSel(GetDlgItem(hwnd, IDC_LIST1));
if (index != LB_ERR)
{
XFC_ListBox_DeleteString((GetDlgItem(hwnd, IDC_LIST1)), index);
}
return TRUE;
}
case IDC_BUTTON_Clear:
{
XFC_ListBox_ResetContent((GetDlgItem(hwnd, IDC_LIST1)));
return TRUE;
}
case IDC_COMBO1:
{
return formView_On_IDC_COMBO1(hwnd, message, wParam, lParam);
}
case IDC_LIST1:
{
return formView_On_IDC_LIST1(hwnd, message, wParam, lParam);
}
}
return FALSE;
}
BEGIN_XFC_MESSAGE_MAP(formView)
ON_XFC_MESSAGEF(WM_INITDIALOG, formView_On_WM_INITDIALOG)
ON_XFC_MESSAGEF(WM_COMMAND, formView_On_WM_COMMAND)
ON_XFC_MESSAGEF(WM_TIMER, formView_On_WM_TIMER)
END_XFC_MESSAGE_MAP()
/************************************ END *************************************/
#undef __FORMVIEW_C__
dlgAbout.c
/*!
\file dlgAbout.c
\version v1.00
\date 10/19/2014 20:26:51
*/
#define __DLGABOUT_C__
/*********************************** START ************************************/
#include "all.h"
LRESULT CALLBACK dlgAbout_On_WM_INITDIALOG(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
return 0;
}
LRESULT CALLBACK dlgAbout_On_WM_COMMAND(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (LOWORD(wParam))
{
case IDOK:
EndDialog(hwnd, TRUE);
return TRUE;
case IDCANCEL:
EndDialog(hwnd, FALSE);
return TRUE;
}
return 0;
}
BEGIN_XFC_MESSAGE_MAP(dlgAbout)
ON_XFC_MESSAGEF(WM_INITDIALOG, dlgAbout_On_WM_INITDIALOG)
ON_XFC_MESSAGEF(WM_COMMAND, dlgAbout_On_WM_COMMAND)
END_XFC_MESSAGE_MAP()
/************************************ END *************************************/
#undef __DLGABOUT_C__