#include <windows.h>
#pragma comment(lib, "comctl32.lib")
#include <commctrl.h>
#include "resource.h"
//#include <Winuser.h>
//#pragma comment(lib, "User32.lib")
//一个最简单的SDK程序
//步骤
//1.先实现WinMain函数
//2.实现一个处理消息的函数WinProc
//2.注册窗口类
//3.CreateWindowEx创建一个窗口
//4.ShowWindow显示窗口,UpdateWindow(hWnd);更新窗口
//5.GetMessage TranslateMessage DispatchMessage 三个函数处理消息
//再创建一个函数。
HINSTANCE ghinstance;
#define ID_NEWMENU 10234
HWND hWndToolBar;
LRESULT CALLBACK WinProc(HWND hwnd, //响应消息的窗口句柄
UINT msg, //消息标识,如WM_CLOSE
WPARAM wparam,
LPARAM lparam);
//typedef LRESULT /*CALLBACK*/ (*ProcPointer)(HWND, UINT, WPARAM, LPARAM);
typedef LRESULT (CALLBACK* ProcPointer)(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK NewWinProc(HWND hwnd, //响应消息的窗口句柄
UINT msg, //消息标识,如WM_CLOSE
WPARAM wparam,
LPARAM lparam)
{
switch (msg) //msg中保存的就是正要处理的消息
{
case WM_LBUTTONDOWN:
{
//MessageBox(hwnd, "Text", "Cap new Procedure", MB_ICONERROR);
break;
}
}
return WinProc(hwnd, msg, wparam, lparam);}
LRESULT CALLBACK WinProc(HWND hwnd, //响应消息的窗口句柄
UINT msg, //消息标识,如WM_CLOSE
WPARAM wparam,
LPARAM lparam)
{
static HICON hicon;
switch (msg) //msg中保存的就是正要处理的消息
{
case WM_LBUTTONDOWN:
{
LOGBRUSH ls;
ls.lbColor = RGB(255, 0, 0);
ls.lbHatch = HS_CROSS;
ls.lbStyle = BS_SOLID;
DWORD PenStyle[8] = {1,2,3,4,5,6,7,8};
HPEN pen2 = ExtCreatePen(PS_USERSTYLE | PS_GEOMETRIC, 3, &ls, 8, PenStyle);
SelectObject ( GetDC(hwnd), pen2 );
LineTo(GetDC(hwnd), 1000, 1000);
//BitBlt(GetDC(hwnd), 0, 0, 1000, 1000, memDC, 0, 0, SRCCOPY); break; }
case WM_GETICON:
{
//MessageBox(hwnd, "text", "cap", MB_OK);
return (LRESULT)hicon;
//break;
} case WM_DESTROY: //这是我们自行处理的第一个消息
{
PostQuitMessage(0); //发出一个WM_QUIT消息
break; //然后直接返回。
}
case WM_CREATE:
{
HMENU hMenu = CreateMenu();
AppendMenu(hMenu, MF_STRING, ID_NEWMENU, "退出");
InsertMenu(hMenu, 0, MF_STRING | MF_BYPOSITION, ID_NEWMENU, "HELLO2");
if(!SetMenu(hwnd, hMenu))
{
MessageBox(hwnd, "加载菜单失败", "提示", MB_OK);
}
TBBUTTON btn;
btn.iBitmap = STD_COPY;
btn.idCommand = 25630;
btn.fsState = TBSTATE_ENABLED;
btn.fsStyle = TBSTYLE_BUTTON;
btn.dwData = 0;
btn.iString = 0;
hWndToolBar = CreateToolbarEx(hwnd,
WS_CHILD | WS_VISIBLE
| CCS_ADJUSTABLE | TBSTYLE_TOOLTIPS,
25000,
0,
ghinstance,
01,
&btn,
1,
50,
50,
50,
50,
sizeof(TBBUTTON));
//添加按钮
//SendMessage(hWndToolBar, TB_ADDBUTTONS, 1, (LONG)&btn);
}
case WM_COMMAND:
{
switch((UINT)wparam)
{
case IDM_OPEN:
{
MessageBox(hwnd, "click open", "提示", MB_OK);
}
}
break;
}
default:
{
break;
}
}
return DefWindowProc(hwnd, msg, wparam, lparam);
}int WINAPI WinMain(HINSTANCE hinstance, //本程序的可柄
HINSTANCE hprevinstance, //本程序前一个实例的句柄,现在已无用
LPSTR lpcmdline, //程序启动时传递进来的命令行参数,可不用
int ncmdshow) //程序启动时传递进来的命令行参数,可不用
{
static UINT bBrushBits[8][8] = {0x80, 0x81, 0x82, 0x83, 0x84, 0x8a, 0x8b, 0x83,
0x20, 0x31, 0x22, 0x43, 0x14, 0x4a, 0x4b, 0x83,
0x30, 0x41, 0x52, 0x43, 0x24, 0x5a, 0x4b, 0x53,
0x40, 0xa1, 0x72, 0x43, 0x34, 0x6a, 0x5b, 0x83,
0x50, 0x81, 0x22, 0x43, 0x44, 0xaa, 0x7b, 0x93,
0x60, 0xc1, 0x82, 0x43, 0x54, 0xaa, 0xab, 0x83,
0x70, 0x41, 0x82, 0x43, 0x64, 0x8a, 0x7b, 0x83,
0x80, 0x41, 0x32, 0x43, 0x84, 0x8a, 0x4b, 0x83}; // bitmap bits ghinstance = hinstance;
MSG msg;
WNDCLASSEX wndclass; //窗口类结构体变量
//以下是对wndclass各成员赋值
wndclass.cbSize = sizeof(WNDCLASSEX); //用来保存本结构体的所占字节数
wndclass.cbClsExtra=0; //略,我们可不必使用它,只要赋值为0就可
wndclass.cbWndExtra =0; //略,同上
wndclass.lpfnWndProc = WinProc; //回调函数指针,用以指向前面那个回调函数。
wndclass.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC | CS_DBLCLKS; //窗口类型风格。比如,可设置“若移动窗口宽度时,则刷新整个窗口。
wndclass.hInstance = hinstance; //窗口所属的应用程序实例句柄,WinMain的第一个参数
wndclass.hCursor =LoadCursor(NULL, IDC_ARROW); //鼠标句柄,用以指定鼠标移入窗口时的样式
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION); //大图标
wndclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION) ; //小图标,窗口最小化后在任务栏显示的图标
wndclass.lpszMenuName = NULL; //用来指向菜单资源名称字符串的指针,可让你的窗口有一个菜单
wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszClassName ="My SDK"; //用来指向窗口类名字符串的指针作为这个窗口类的标识
//下面是利用wndcalss结构体的信息注册一个窗口类
if (!RegisterClassEx(&wndclass))
return 0;
// 将会在这里输入主函数的代码
HWND hWnd;
hWnd=CreateWindowEx(NULL, //这是用来指定扩展样式标志,绝大多数情况,我们只要指定为NULL,所以我不想多说
wndclass.lpszClassName, //必须与wndclass.lpszClassName一样
"这是我的第一个窗口", //窗口标题显示的字串
WS_OVERLAPPEDWINDOW , //这是用来指定窗口外观类型的
0, //这是指定相对于桌面的窗口左上角位置(x坐标)。
0, //这是指定相对于桌面的窗口左上角位置(y坐标)。
400, //指定窗口的宽度
400, //指定窗口的高度
NULL, //父窗口句柄
NULL, //可以为窗口指定一个菜单的,这个菜单将代替wndclass.lpszMenuName设置的菜单
hinstance, //要与wndclass.hInstance值相同,本应用程序的句柄代入这里。
NULL ); //高级特征,现在我们只要设置为NULL就行。
if (!hWnd) //这里应该判断是否创建成功
{
return 0;
}
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0)) //获取一个消息,成功后会放在msg中。
{
TranslateMessage(&msg); //消息进行必要的处理转换。
DispatchMessage(&msg); //调用WinProc,将msg的各项信息传递给WinProc
}
return 0;
}
#pragma comment(lib, "comctl32.lib")
#include <commctrl.h>
#include "resource.h"
//#include <Winuser.h>
//#pragma comment(lib, "User32.lib")
//一个最简单的SDK程序
//步骤
//1.先实现WinMain函数
//2.实现一个处理消息的函数WinProc
//2.注册窗口类
//3.CreateWindowEx创建一个窗口
//4.ShowWindow显示窗口,UpdateWindow(hWnd);更新窗口
//5.GetMessage TranslateMessage DispatchMessage 三个函数处理消息
//再创建一个函数。
HINSTANCE ghinstance;
#define ID_NEWMENU 10234
HWND hWndToolBar;
LRESULT CALLBACK WinProc(HWND hwnd, //响应消息的窗口句柄
UINT msg, //消息标识,如WM_CLOSE
WPARAM wparam,
LPARAM lparam);
//typedef LRESULT /*CALLBACK*/ (*ProcPointer)(HWND, UINT, WPARAM, LPARAM);
typedef LRESULT (CALLBACK* ProcPointer)(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK NewWinProc(HWND hwnd, //响应消息的窗口句柄
UINT msg, //消息标识,如WM_CLOSE
WPARAM wparam,
LPARAM lparam)
{
switch (msg) //msg中保存的就是正要处理的消息
{
case WM_LBUTTONDOWN:
{
//MessageBox(hwnd, "Text", "Cap new Procedure", MB_ICONERROR);
break;
}
}
return WinProc(hwnd, msg, wparam, lparam);}
LRESULT CALLBACK WinProc(HWND hwnd, //响应消息的窗口句柄
UINT msg, //消息标识,如WM_CLOSE
WPARAM wparam,
LPARAM lparam)
{
static HICON hicon;
switch (msg) //msg中保存的就是正要处理的消息
{
case WM_LBUTTONDOWN:
{
LOGBRUSH ls;
ls.lbColor = RGB(255, 0, 0);
ls.lbHatch = HS_CROSS;
ls.lbStyle = BS_SOLID;
DWORD PenStyle[8] = {1,2,3,4,5,6,7,8};
HPEN pen2 = ExtCreatePen(PS_USERSTYLE | PS_GEOMETRIC, 3, &ls, 8, PenStyle);
SelectObject ( GetDC(hwnd), pen2 );
LineTo(GetDC(hwnd), 1000, 1000);
//BitBlt(GetDC(hwnd), 0, 0, 1000, 1000, memDC, 0, 0, SRCCOPY); break; }
case WM_GETICON:
{
//MessageBox(hwnd, "text", "cap", MB_OK);
return (LRESULT)hicon;
//break;
} case WM_DESTROY: //这是我们自行处理的第一个消息
{
PostQuitMessage(0); //发出一个WM_QUIT消息
break; //然后直接返回。
}
case WM_CREATE:
{
HMENU hMenu = CreateMenu();
AppendMenu(hMenu, MF_STRING, ID_NEWMENU, "退出");
InsertMenu(hMenu, 0, MF_STRING | MF_BYPOSITION, ID_NEWMENU, "HELLO2");
if(!SetMenu(hwnd, hMenu))
{
MessageBox(hwnd, "加载菜单失败", "提示", MB_OK);
}
TBBUTTON btn;
btn.iBitmap = STD_COPY;
btn.idCommand = 25630;
btn.fsState = TBSTATE_ENABLED;
btn.fsStyle = TBSTYLE_BUTTON;
btn.dwData = 0;
btn.iString = 0;
hWndToolBar = CreateToolbarEx(hwnd,
WS_CHILD | WS_VISIBLE
| CCS_ADJUSTABLE | TBSTYLE_TOOLTIPS,
25000,
0,
ghinstance,
01,
&btn,
1,
50,
50,
50,
50,
sizeof(TBBUTTON));
//添加按钮
//SendMessage(hWndToolBar, TB_ADDBUTTONS, 1, (LONG)&btn);
}
case WM_COMMAND:
{
switch((UINT)wparam)
{
case IDM_OPEN:
{
MessageBox(hwnd, "click open", "提示", MB_OK);
}
}
break;
}
default:
{
break;
}
}
return DefWindowProc(hwnd, msg, wparam, lparam);
}int WINAPI WinMain(HINSTANCE hinstance, //本程序的可柄
HINSTANCE hprevinstance, //本程序前一个实例的句柄,现在已无用
LPSTR lpcmdline, //程序启动时传递进来的命令行参数,可不用
int ncmdshow) //程序启动时传递进来的命令行参数,可不用
{
static UINT bBrushBits[8][8] = {0x80, 0x81, 0x82, 0x83, 0x84, 0x8a, 0x8b, 0x83,
0x20, 0x31, 0x22, 0x43, 0x14, 0x4a, 0x4b, 0x83,
0x30, 0x41, 0x52, 0x43, 0x24, 0x5a, 0x4b, 0x53,
0x40, 0xa1, 0x72, 0x43, 0x34, 0x6a, 0x5b, 0x83,
0x50, 0x81, 0x22, 0x43, 0x44, 0xaa, 0x7b, 0x93,
0x60, 0xc1, 0x82, 0x43, 0x54, 0xaa, 0xab, 0x83,
0x70, 0x41, 0x82, 0x43, 0x64, 0x8a, 0x7b, 0x83,
0x80, 0x41, 0x32, 0x43, 0x84, 0x8a, 0x4b, 0x83}; // bitmap bits ghinstance = hinstance;
MSG msg;
WNDCLASSEX wndclass; //窗口类结构体变量
//以下是对wndclass各成员赋值
wndclass.cbSize = sizeof(WNDCLASSEX); //用来保存本结构体的所占字节数
wndclass.cbClsExtra=0; //略,我们可不必使用它,只要赋值为0就可
wndclass.cbWndExtra =0; //略,同上
wndclass.lpfnWndProc = WinProc; //回调函数指针,用以指向前面那个回调函数。
wndclass.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC | CS_DBLCLKS; //窗口类型风格。比如,可设置“若移动窗口宽度时,则刷新整个窗口。
wndclass.hInstance = hinstance; //窗口所属的应用程序实例句柄,WinMain的第一个参数
wndclass.hCursor =LoadCursor(NULL, IDC_ARROW); //鼠标句柄,用以指定鼠标移入窗口时的样式
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION); //大图标
wndclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION) ; //小图标,窗口最小化后在任务栏显示的图标
wndclass.lpszMenuName = NULL; //用来指向菜单资源名称字符串的指针,可让你的窗口有一个菜单
wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszClassName ="My SDK"; //用来指向窗口类名字符串的指针作为这个窗口类的标识
//下面是利用wndcalss结构体的信息注册一个窗口类
if (!RegisterClassEx(&wndclass))
return 0;
// 将会在这里输入主函数的代码
HWND hWnd;
hWnd=CreateWindowEx(NULL, //这是用来指定扩展样式标志,绝大多数情况,我们只要指定为NULL,所以我不想多说
wndclass.lpszClassName, //必须与wndclass.lpszClassName一样
"这是我的第一个窗口", //窗口标题显示的字串
WS_OVERLAPPEDWINDOW , //这是用来指定窗口外观类型的
0, //这是指定相对于桌面的窗口左上角位置(x坐标)。
0, //这是指定相对于桌面的窗口左上角位置(y坐标)。
400, //指定窗口的宽度
400, //指定窗口的高度
NULL, //父窗口句柄
NULL, //可以为窗口指定一个菜单的,这个菜单将代替wndclass.lpszMenuName设置的菜单
hinstance, //要与wndclass.hInstance值相同,本应用程序的句柄代入这里。
NULL ); //高级特征,现在我们只要设置为NULL就行。
if (!hWnd) //这里应该判断是否创建成功
{
return 0;
}
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0)) //获取一个消息,成功后会放在msg中。
{
TranslateMessage(&msg); //消息进行必要的处理转换。
DispatchMessage(&msg); //调用WinProc,将msg的各项信息传递给WinProc
}
return 0;
}
还有这个工具栏不能随着窗口的大小改变而改