在创建程序的时候遇到了VS2017创建Windows程序过程及错误 error LNK2019: 无法解析的外部符号 _main,该符号在函数 “int __cdecl invoke_main(void)” (?invok问题
参考:VS2017创建Windows程序过程及错误 error LNK2019: 无法解析的外部符号 _main,该符号在函数 “int __cdecl invoke_main(void)” (?invok
最后解决了问题
声明笔刷
HPEN hPen[7];
HBRUSH hBru[7];
HBITMAP hbmp;
HBITMAP b;
//画笔数组
int sPen[7] = { PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_DASHDOTDOT,PS_NULL,PS_INSIDEFRAME };
/画刷数组
int sBru[6] = { HS_VERTICAL,HS_HORIZONTAL,HS_CROSS,HS_DIAGCROSS,HS_FDIAGONAL,HS_BDIAGONAL };
初始化画笔笔刷
在InitInstance函数中将画笔画刷初始化
for (i = 0; i <= 6; i++)
{
if (i == 0) {
hPen[i] = CreatePen(sPen[i], 1, RGB(0, 100, 0));
hBru[i] = CreateHatchBrush(sBru[i], RGB(107, 142, 35));
}
if (i == 1) {
hPen[i] = CreatePen(sPen[i], 1, RGB(205, 92, 92));
hBru[i] = CreateHatchBrush(sBru[i], RGB(188, 143, 143));
}
if (i == 2) {
hPen[i] = CreatePen(sPen[i], 1, RGB(139, 101, 8));
hBru[i] = CreateHatchBrush(sBru[i], RGB(255, 193, 193));
}
if (i == 3) {
hPen[i] = CreatePen(sPen[i], 1, RGB(139, 119, 101));
hBru[i] = CreateHatchBrush(sBru[i], RGB(255, 218, 185));
}
if (i == 4) {
hPen[i] = CreatePen(sPen[i], 1, RGB(162, 181, 205));
hBru[i] = CreateHatchBrush(sBru[i], RGB(202, 225, 255));
}
if (i == 5) {
hPen[i] = CreatePen(sPen[i], 1, RGB(205, 92, 92));
hBru[i] = CreateHatchBrush(sBru[i], RGB(173, 216, 230));
}
if (i == 6) {
hPen[i] = CreatePen(sPen[i], 1, RGB(255, 193, 193));
hBru[i] = CreateSolidBrush(RGB(173, 216, 230));
}
}
在MyDraw函数中进行画刷笔刷的使用
void MyDraw(HDC hdc)//hdc-设备上下文
{
int i, x1, x2, y;
for (i = 0; i <= 6; i++)
{
y = (i + 1) * 30;
SelectObject(hdc, hPen[i]);//该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象
MoveToEx(hdc, 30, y, NULL); //移动画笔至线条起点
LineTo(hdc, 520, y); //绘制线条至指定坐标
}
int y1 = 250;
int y2 = 350;
x1 = 30;
x2 = 80;
for (i = 0; i <= 6; i++)
{
SelectObject(hdc, hBru[i]);
SelectObject(hdc, hPen[i]);
Rectangle(hdc, x1, y1, x2, y2); //绘制矩形区域
x1 += 70;
x2 += 70;
}
}
运行结果
附上全文:
#include <windows.h> //包含文件
//定义
#define WINDOW_WIDTH 900
#define WINDOW_HEIGHT 350
#define WINDOW_TITLE L"WinMain"
//变量定义
HWND g_hWnd;
HINSTANCE g_hInst;
HDC g_hDc;
HPEN hPen[7];
HBRUSH hBru[7];
HBITMAP hbmp;
HBITMAP b;
//画笔数组
int sPen[7] = { PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_DASHDOTDOT,PS_NULL,PS_INSIDEFRAME };
//画刷数组
int sBru[6] = { HS_VERTICAL,HS_HORIZONTAL,HS_CROSS,HS_DIAGCROSS,HS_FDIAGONAL,HS_BDIAGONAL };
//函数声明
int MyWindowsClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口过程函数 重要函数
void MyDraw(HDC hdc);
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)//主函数
//HINSTANCE 具体应用程序 句柄
//第二个参数 上一个程序句柄
//第三个 应用程序命令行的字符串的指针
// 第四个参数 显示方式)
{
MSG msg = { 0 };//消息类结构体,记为空
MyWindowsClass(hInstance);
if (!InitInstance(hInstance, nCmdShow))
{
return FALSE;
}
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
int MyWindowsClass(HINSTANCE hInstance) {
//窗口
//1.设计窗口->编写一个数据结构
WNDCLASSEX wcex;//数据类型-结构体
//具体内容
wcex.cbSize = sizeof(WNDCLASSEX);//包含字节数
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;//WndProc函数名
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;//一开始系统建立标识
wcex.hIcon = NULL;//图标
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);//鼠标 载入系统指定光标资源 两个参数(程序,鼠标类型)
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wcex.lpszMenuName = NULL;//菜单
wcex.lpszClassName = L"gamebase";
wcex.hIconSm = NULL;
//设计完成
//2.将设计好的窗口登记
return RegisterClassEx(&wcex);
}
//初始化窗口
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) {
int i;
g_hInst = hInstance;
//3.产生窗口
g_hWnd = CreateWindow(L"gamebase",//返回值:HWND classname,
WINDOW_TITLE,//指针
WS_OVERLAPPEDWINDOW,//产生一个层叠的窗口
CW_USEDEFAULT,
CW_USEDEFAULT,
WINDOW_WIDTH,
WINDOW_HEIGHT,
NULL,//父窗口
NULL,//菜单句柄
hInstance,//应用程序
NULL);//
if (!g_hWnd) {
return false;
}
//显示窗口
MoveWindow(g_hWnd, 100, 100, 715, 418, true);
ShowWindow(g_hWnd, nCmdShow);
UpdateWindow(g_hWnd);
for (i = 0; i <= 6; i++)
{
if (i == 0) {
hPen[i] = CreatePen(sPen[i], 1, RGB(0, 100, 0));
hBru[i] = CreateHatchBrush(sBru[i], RGB(107, 142, 35));
}
if (i == 1) {
hPen[i] = CreatePen(sPen[i], 1, RGB(205, 92, 92));
hBru[i] = CreateHatchBrush(sBru[i], RGB(188, 143, 143));
}
if (i == 2) {
hPen[i] = CreatePen(sPen[i], 1, RGB(139, 101, 8));
hBru[i] = CreateHatchBrush(sBru[i], RGB(255, 193, 193));
}
if (i == 3) {
hPen[i] = CreatePen(sPen[i], 1, RGB(139, 119, 101));
hBru[i] = CreateHatchBrush(sBru[i], RGB(255, 218, 185));
}
if (i == 4) {
hPen[i] = CreatePen(sPen[i], 1, RGB(162, 181, 205));
hBru[i] = CreateHatchBrush(sBru[i], RGB(202, 225, 255));
}
if (i == 5) {
hPen[i] = CreatePen(sPen[i], 1, RGB(205, 92, 92));
hBru[i] = CreateHatchBrush(sBru[i], RGB(173, 216, 230));
}
if (i == 6) {
hPen[i] = CreatePen(sPen[i], 1, RGB(255, 193, 193));
hBru[i] = CreateSolidBrush(RGB(173, 216, 230));
}
}
g_hDc = GetDC(g_hWnd);
MyDraw(g_hDc);
ReleaseDC(g_hWnd, g_hDc);
return TRUE;
}
//窗口过程函数
LRESULT CALLBACK WndProc(HWND hWnd, //窗口句柄 由哪个窗口发送
UINT message, //消息类型
WPARAM wParam,//按下按键的虚拟键码
LPARAM lParam)//存储按键的相关状态信息
{
PAINTSTRUCT ps;
//int i;
switch (message)
{
case WM_PAINT:
g_hDc = BeginPaint(hWnd, &ps);
MyDraw(g_hDc);
EndPaint(g_hWnd, &ps);
break;
case WM_DESTROY://销毁窗口
PostQuitMessage(0);//结束线程
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
void MyDraw(HDC hdc)//hdc-设备上下文
{
int i, x1, x2, y;
for (i = 0; i <= 6; i++)
{
y = (i + 1) * 30;
SelectObject(hdc, hPen[i]);//该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象
MoveToEx(hdc, 30, y, NULL); //移动画笔至线条起点
LineTo(hdc, 520, y); //绘制线条至指定坐标
}
int y1 = 250;
int y2 = 350;
x1 = 30;
x2 = 80;
for (i = 0; i <= 6; i++)
{
SelectObject(hdc, hBru[i]);
SelectObject(hdc, hPen[i]);
Rectangle(hdc, x1, y1, x2, y2); //绘制矩形区域
x1 += 70;
x2 += 70;
}
}
vs2019