本文是截图:Windows编程基础 第九章 对话框 静态框 按钮 文本编辑框
原文pdf下载地址是:http://yunpan.cn/cdeWRNyfhzLqP 访问密码 f967
//本程序用来演示无模式对话框的创建
#include "windows13.h"
#include "stdafx.h"
#include "resource.h"
#include "stdio.h"
#include "windows.h"
HINSTANCE g_hInst=NULL;
BOOL CALLBACK DialogProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_SYSCOMMAND:
switch(wParam)
{
case SC_CLOSE:
EndDialog(hWnd,1);
break;
}
break;
case WM_CREATE:
MessageBox(NULL,TEXT("WM_CREATE"),TEXT("消息:"),MB_OKCANCEL);
break;
case WM_INITDIALOG:
MessageBox(NULL,TEXT("WM_INITDIALOG"),TEXT("消息:"),MB_OKCANCEL);
break;
}
return 0;
}
VOID setting(HWND hWnd)
{
HWND hWndDialog=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_DIALOG1),hWnd,DialogProc);
ShowWindow(hWndDialog,SW_SHOW);
}
VOID OnCommand(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
int nCmd=LOWORD(wParam);//取得菜单项ID
switch(nCmd)
{
case IDM_EXIT:
PostQuitMessage(0);
break;
case ID_DIALOGBOX:
setting(hWnd);
break;
}
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND://用来处理菜单消息
OnCommand(hWnd,uMsg,wParam,lParam);
break;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
BOOL RegisterWnd(TCHAR * pszClassName )
{
WNDCLASSEX wce={0};
wce.cbClsExtra=0;
wce.cbSize=sizeof(wce);
wce.cbWndExtra=0;
wce.hbrBackground=HBRUSH(COLOR_WINDOW+1);//GetStockBrush(WHITE_BRUSH);
wce.hCursor=NULL;
wce.hIcon=NULL;
wce.hIconSm=NULL;
wce.hInstance=g_hInst;
wce.lpfnWndProc=WndProc;
wce.lpszClassName=pszClassName;
wce.lpszMenuName=NULL;
wce.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
ATOM result=RegisterClassEx(&wce);
if (result==0)
{
MessageBox(NULL,TEXT("窗口类注册失败!"),TEXT("窗口类注册失败!"),MB_OK);
return FALSE;
}
return TRUE;
}
VOID DisplayWindow(HWND hWnd)
{
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
}
VOID Message(HWND hWnd)
{
HACCEL hAccel=LoadAccelerators(g_hInst,MAKEINTRESOURCE(IDC_WINDOWS13));
MSG msg={0};
while(GetMessage(&msg,NULL,0,0))
{
TranslateAccelerator(hWnd,hAccel,&msg);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
HWND CreateMyWindow(TCHAR * pszClassName)
{
//加载字符串资源
TCHAR szText[100]=TEXT("");
LoadString(g_hInst,IDS_STRINGMain,szText,100);
//加载菜单资源
HMENU hMenu=LoadMenu(g_hInst,MAKEINTRESOURCE(IDC_WINDOWS13));
HWND hWndNew=CreateWindowEx(0,pszClassName,szText,WS_OVERLAPPEDWINDOW|WS_THICKFRAME,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,hMenu,g_hInst,NULL);
return hWndNew;
}
INT WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd )
{
RegisterWnd(TEXT("MyWnd"));
HWND hWnd=CreateMyWindow(TEXT("MyWnd"));
DisplayWindow(hWnd);
Message(hWnd);
return TRUE;
}
//本程序用来演示静态框
#include "windows13.h"
#include "stdafx.h"
#include "resource.h"
#include "stdio.h"
#include "windows.h"
HINSTANCE g_hInst=NULL;
VOID OnCreate(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
CreateWindowEx(0,TEXT("STATIC"),TEXT("HELLO STATIC"),SS_NOTIFY|SS_SUNKEN|WS_CHILD|WS_VISIBLE,100,100,100,100,hWnd,(HMENU)1001,g_hInst,NULL);
CreateWindowEx(0,TEXT("STATIC"),TEXT("#135"),SS_NOTIFY|WS_CHILD|WS_VISIBLE|SS_ICON,200,200,100,100,hWnd,(HMENU)1002,g_hInst,NULL);
}
VOID OnCommand(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
int nStaicID=LOWORD(wParam);//控件ID
int nStaticMessage=HIWORD(wParam);//控件消息
switch(nStaicID)
{
case IDM_EXIT:
PostQuitMessage(0);
break;
case 1001://先判断控件ID,然后在判断控件消息。
switch(nStaticMessage)
{
case STN_CLICKED:
MessageBox(NULL,TEXT("STATIC控件被单击"),TEXT("控件消息"),MB_OK);
}
break;
case 1002:
switch(nStaticMessage)
{
case STN_DBLCLK:
MessageBox(NULL,TEXT("STATIC控件被双击"),TEXT("控件消息"),MB_OK);
}
break;
case ID_STATICCHANGE:
HICON hIcon=LoadIcon(g_hInst,MAKEINTRESOURCE(IDI_ICON3));
HWND hWndCtrl=GetDlgItem(hWnd,1002);
SendMessage(hWndCtrl,STM_SETICON,(WPARAM)(hIcon),0);
break;
}
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND://用来处理菜单消息
OnCommand(hWnd,uMsg,wParam,lParam);
break;
case WM_CREATE:
OnCreate(hWnd,uMsg,wParam,lParam);
break;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
BOOL RegisterWnd(TCHAR * pszClassName )
{
WNDCLASSEX wce={0};
wce.cbClsExtra=0;
wce.cbSize=sizeof(wce);
wce.cbWndExtra=0;
wce.hbrBackground=HBRUSH(COLOR_WINDOW+1);//GetStockBrush(WHITE_BRUSH);
wce.hCursor=NULL;
wce.hIcon=NULL;
wce.hIconSm=NULL;
wce.hInstance=g_hInst;
wce.lpfnWndProc=WndProc;
wce.lpszClassName=pszClassName;
wce.lpszMenuName=NULL;
wce.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
ATOM result=RegisterClassEx(&wce);
if (result==0)
{
MessageBox(NULL,TEXT("窗口类注册失败!"),TEXT("窗口类注册失败!"),MB_OK);
return FALSE;
}
return TRUE;
}
VOID DisplayWindow(HWND hWnd)
{
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
}
VOID Message(HWND hWnd)
{
HACCEL hAccel=LoadAccelerators(g_hInst,MAKEINTRESOURCE(IDC_WINDOWS13));
MSG msg={0};
while(GetMessage(&msg,NULL,0,0))
{
TranslateAccelerator(hWnd,hAccel,&msg);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
HWND CreateMyWindow(TCHAR * pszClassName)
{
//加载字符串资源
TCHAR szText[100]=TEXT("");
LoadString(g_hInst,IDS_STRINGMain,szText,100);
//加载菜单资源
HMENU hMenu=LoadMenu(g_hInst,MAKEINTRESOURCE(IDC_WINDOWS13));
HWND hWndNew=CreateWindowEx(0,pszClassName,szText,WS_OVERLAPPEDWINDOW|WS_THICKFRAME,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,hMenu,g_hInst,NULL);
return hWndNew;
}
INT WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd )
{
RegisterWnd(TEXT("MyWnd"));
HWND hWnd=CreateMyWindow(TEXT("MyWnd"));
DisplayWindow(hWnd);
Message(hWnd);
return TRUE;
}
//本程序用来演示按钮
#include "windows13.h"
#include "stdafx.h"
#include "resource.h"
#include "stdio.h"
#include "windows.h"
HINSTANCE g_hInst=NULL;
VOID OnCreate(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
CreateWindowEx(0,TEXT("BUTTON"),TEXT("PushButton"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,0,100,100,hWnd,(HMENU)1001,g_hInst,NULL);//下压按钮
CreateWindowEx(0,TEXT("BUTTON"),TEXT("3StateButton"),WS_CHILD|WS_VISIBLE|BS_AUTO3STATE|BS_PUSHLIKE,100,100,100,100,hWnd,(HMENU)1002,g_hInst,NULL);//三态按钮
CreateWindowEx(0,TEXT("BUTTON"),TEXT("分组一"),WS_CHILD|WS_VISIBLE|BS_GROUPBOX,200,200,300,300,hWnd,(HMENU)3001,g_hInst,NULL);//只是起到一个边框的效果
CreateWindowEx(0,TEXT("BUTTON"),TEXT("选项一"),WS_CHILD|WS_VISIBLE|BS_CHECKBOX,210,230,50,50,hWnd,(HMENU)3002,g_hInst,NULL);//选项一,选项二,都可以进行选择
CreateWindowEx(0,TEXT("BUTTON"),TEXT("选项二"),WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX,210,290,50,50,hWnd,(HMENU)3003,g_hInst,NULL);
CreateWindowEx(0,TEXT("BUTTON"),TEXT("A"),WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON|WS_GROUP,310,290,50,50,hWnd,(HMENU)4001,g_hInst,NULL);//按钮A,B一组必须二选一
CreateWindowEx(0,TEXT("BUTTON"),TEXT("B"),WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,310,340,50,50,hWnd,(HMENU)4002,g_hInst,NULL);
CreateWindowEx(0,TEXT("BUTTON"),TEXT("C"),WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON|WS_GROUP,310,390,50,50,hWnd,(HMENU)4003,g_hInst,NULL);//按钮C,D一组必须二选一
CreateWindowEx(0,TEXT("BUTTON"),TEXT("A"),WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,310,440,50,50,hWnd,(HMENU)4004,g_hInst,NULL);
}
VOID OnCommand(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
INT nNotifyCode=HIWORD(wParam);//消息
INT nCtrlId=LOWORD(wParam);//按钮ID
switch(nCtrlId)
{
case 1001:
switch(nNotifyCode)
{
case BN_CLICKED:
MessageBox(NULL,TEXT("下压式按钮单击"),TEXT("消息"),MB_OK);
break;
}
break;
case 3002:
HWND hWndCtrl=GetDlgItem(hWnd,3002);
LRESULT nChecked=0;
switch(nNotifyCode)
{
case BN_CLICKED:
nChecked=SendMessage(hWndCtrl,BM_GETCHECK,0,0);
if (nChecked&BST_CHECKED)
{
SendMessage(hWndCtrl,BM_SETCHECK,BST_UNCHECKED,0);
}
else
{
SendMessage(hWndCtrl,BM_SETCHECK,BST_CHECKED,0);
}
break;
}
break;
}
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND://用来处理菜单消息
OnCommand(hWnd,uMsg,wParam,lParam);
break;
case WM_CREATE:
OnCreate(hWnd,uMsg,wParam,lParam);
break;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
BOOL RegisterWnd(TCHAR * pszClassName )
{
WNDCLASSEX wce={0};
wce.cbClsExtra=0;
wce.cbSize=sizeof(wce);
wce.cbWndExtra=0;
wce.hbrBackground=HBRUSH(COLOR_WINDOW+1);//GetStockBrush(WHITE_BRUSH);
wce.hCursor=NULL;
wce.hIcon=NULL;
wce.hIconSm=NULL;
wce.hInstance=g_hInst;
wce.lpfnWndProc=WndProc;
wce.lpszClassName=pszClassName;
wce.lpszMenuName=NULL;
wce.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
ATOM result=RegisterClassEx(&wce);
if (result==0)
{
MessageBox(NULL,TEXT("窗口类注册失败!"),TEXT("窗口类注册失败!"),MB_OK);
return FALSE;
}
return TRUE;
}
VOID DisplayWindow(HWND hWnd)
{
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
}
VOID Message(HWND hWnd)
{
HACCEL hAccel=LoadAccelerators(g_hInst,MAKEINTRESOURCE(IDC_WINDOWS13));
MSG msg={0};
while(GetMessage(&msg,NULL,0,0))
{
TranslateAccelerator(hWnd,hAccel,&msg);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
HWND CreateMyWindow(TCHAR * pszClassName)
{
//加载字符串资源
TCHAR szText[100]=TEXT("");
LoadString(g_hInst,IDS_STRINGMain,szText,100);
//加载菜单资源
HMENU hMenu=LoadMenu(g_hInst,MAKEINTRESOURCE(IDC_WINDOWS13));
HWND hWndNew=CreateWindowEx(0,pszClassName,szText,WS_OVERLAPPEDWINDOW|WS_THICKFRAME,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,hMenu,g_hInst,NULL);
return hWndNew;
}
INT WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd )
{
RegisterWnd(TEXT("MyWnd"));
HWND hWnd=CreateMyWindow(TEXT("MyWnd"));
DisplayWindow(hWnd);
Message(hWnd);
return TRUE;
}
//本程序用来文本编辑框
#include "windows13.h"
#include "stdafx.h"
#include "resource.h"
#include "stdio.h"
#include "windows.h"
HINSTANCE g_hInst=NULL;
HWND g_hEdit=NULL;
VOID OnSave();
VOID OnOpen();//打开文件
VOID OnCreate(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
g_hEdit=CreateWindowEx(0,TEXT("EDIT"),TEXT("HELLO EDIT!"),
WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|ES_AUTOHSCROLL|ES_AUTOVSCROLL|ES_MULTILINE,
0,0,100,200,hWnd,(HMENU)1001,g_hInst,NULL);
}
VOID OnCommand(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
int nNotifyCode=HIWORD(wParam);
int nCtrlIDandMenuEvent=LOWORD(wParam);
switch(nCtrlIDandMenuEvent)
{
case ID_SAVE1:
OnSave();
break;
case ID_OPEN:
OnOpen();
break;
case ID_COPY:
SendMessage(g_hEdit,WM_COPY,0,0);
//要查看这个消息的效果需要先把,Edit框中的东西选中,然后才能点击复制按钮,如果不选中任何东西,那么你就没有东西可以复制
break;
case ID_PASTE:
SendMessage(g_hEdit,WM_PASTE,0,0);
break;
case ID_SELECT:
SendMessage(g_hEdit,EM_SETSEL,0,-1);
break;
}
}
VOID OnSize(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
RECT RectClient={0};
GetClientRect(hWnd,&RectClient);
MoveWindow(g_hEdit,RectClient.left,RectClient.top,RectClient.right,RectClient.bottom,TRUE);
}
VOID OnSave()//保存文本框中的内容
{
LRESULT nTextLen=SendMessage(g_hEdit,WM_GETTEXTLENGTH,0,0);
TCHAR * szBuffer=(TCHAR *)malloc((nTextLen+1)*sizeof(TCHAR));//内存分配的数量不够就会出现问题。堆出现错误
memset(szBuffer,0,(nTextLen+1));//缓存清空
SendMessage(g_hEdit,WM_GETTEXT,nTextLen+1,(LPARAM)szBuffer);
FILE * file=_tfopen(TEXT("C:\\text.txt"),TEXT("w+"));
//if (fwrite(str, sizeof(wchar_t), strSize, fileHandle) != strSize)
int nCount=fwrite(szBuffer,sizeof(TCHAR),nTextLen,file);
TCHAR szText[50]=TEXT("");
_stprintf(szText,TEXT("成功写入文件的字符个数:%d"),nCount);
MessageBox(NULL,szText,TEXT("保存字符个数:"),MB_OK);
fclose(file);
free(szBuffer);
}
VOID OnOpen()//打开文件
{/*
//打开一个文件
FILE * pfile=_tfopen(TEXT("C:\\text1.txt"),TEXT("r"));
//计算文件中内容的长度
fseek(pfile,0,SEEK_END);
long nLen=ftell(pfile);
fseek(pfile,0,SEEK_SET);
//分配缓冲区
TCHAR * szBuffer=(TCHAR*)malloc((nLen+1)*sizeof(TCHAR));
int num1=sizeof(TCHAR);
int num=_tcslen(szBuffer);
memset(szBuffer,0,(nLen+1));//注意memset(szBuffer,0,nLen+1)和memset(szBuffer,0,num);两个语句的区别:nLen+1和num两个数值的区别。
//将文件内容写入缓存
fread(szBuffer,nLen,1,pfile);
//将缓存内容写入EDIT框
fclose(pfile);
//SendMessage(g_hEdit,WM_SETTEXT,0,(LPARAM)szBuffer);
SetWindowText(g_hEdit,szBuffer);
free(szBuffer);
*/
//上面的这段代码,读取文件的时候,读出都是乱码,原因有待解决,先放在这里!
HANDLE hFile=CreateFile(TEXT("C:\\text1.txt"),GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
DWORD nHigh=0;
DWORD nLow=GetFileSize(hFile,&nHigh);
TCHAR * pszBuffer=(TCHAR *)malloc(nLow+1);
memset(pszBuffer,0,nLow+1);
SetFilePointer(hFile,1,NULL,FILE_BEGIN);
DWORD nRead=0;
ReadFile(hFile,pszBuffer,nLow+1,&nRead,NULL);
SetWindowText(g_hEdit,(TCHAR *)pszBuffer);
free(pszBuffer);
CloseHandle(hFile);
//上面的这段代码,读取文件的时候,读出都是乱码,原因有待解决,先放在这里!
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND://用来处理菜单消息
OnCommand(hWnd,uMsg,wParam,lParam);//
break;
case WM_CREATE:
OnCreate(hWnd,uMsg,wParam,lParam);
break;
case WM_SIZE://只要窗口大小发生改变那么就会发出这个消息
OnSize(hWnd,uMsg,wParam,lParam);
break;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
BOOL RegisterWnd(TCHAR * pszClassName )
{
WNDCLASSEX wce={0};
wce.cbClsExtra=0;
wce.cbSize=sizeof(wce);
wce.cbWndExtra=0;
wce.hbrBackground=HBRUSH(COLOR_WINDOW+1);//GetStockBrush(WHITE_BRUSH);
wce.hCursor=NULL;
wce.hIcon=NULL;
wce.hIconSm=NULL;
wce.hInstance=g_hInst;
wce.lpfnWndProc=WndProc;
wce.lpszClassName=pszClassName;
wce.lpszMenuName=NULL;
wce.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
ATOM result=RegisterClassEx(&wce);
if (result==0)
{
MessageBox(NULL,TEXT("窗口类注册失败!"),TEXT("窗口类注册失败!"),MB_OK);
return FALSE;
}
return TRUE;
}
VOID DisplayWindow(HWND hWnd)
{
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
}
VOID Message(HWND hWnd)
{
HACCEL hAccel=LoadAccelerators(g_hInst,MAKEINTRESOURCE(IDC_WINDOWS13));
MSG msg={0};
while(GetMessage(&msg,NULL,0,0))
{
TranslateAccelerator(hWnd,hAccel,&msg);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
HWND CreateMyWindow(TCHAR * pszClassName)
{
//加载字符串资源
TCHAR szText[100]=TEXT("");
LoadString(g_hInst,IDS_STRINGMain,szText,100);
//加载菜单资源
HMENU hMenu=LoadMenu(g_hInst,MAKEINTRESOURCE(IDC_WINDOWS13));
HWND hWndNew=CreateWindowEx(0,pszClassName,szText,WS_OVERLAPPEDWINDOW|WS_THICKFRAME,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,hMenu,g_hInst,NULL);
return hWndNew;
}
INT WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd )
{
RegisterWnd(TEXT("MyWnd"));
HWND hWnd=CreateMyWindow(TEXT("MyWnd"));
DisplayWindow(hWnd);
Message(hWnd);
OnSave();
return TRUE;
}