15,979
社区成员
发帖
与我相关
我的任务
分享
// graphics.cpp : 定义应用程序的入口点。
//
#include "framework.h"
#include "graphics.h"
#include <string.h>
#include <atltypes.h>
#include "uart.h"
#include "serialcom.h"
#define MAX_LOADSTRING 100
// 全局变量:
HINSTANCE hInst; // 当前实例
WCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本
WCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名
// 此代码模块中包含的函数的前向声明:
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: 在此处放置代码。
// 初始化全局字符串
LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadStringW(hInstance, IDC_GRAPHICS, szWindowClass, MAX_LOADSTRING);
// 执行应用程序初始化:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_GRAPHICS));
MSG msg;
// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
//
// 函数: InitInstance(HINSTANCE, int)
//
// 目标: 保存实例句柄并创建主窗口
//
// 注释:
//
// 在此函数中,我们在全局变量中保存实例句柄并
// 创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance; // 将实例句柄存储在全局变量中
/*主窗口*/
HWND hWnd = CreateDialogW(hInst, MAKEINTRESOURCE(IDD_DIALOG_UART), NULL, About);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
//文本框的处理程序。
BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_COMMAND:
MessageBox(hwndDlg, L"点击了文本框!\n", L"成功", MB_OK);
}
return (INT_PTR)FALSE;
}
// “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
static HWND hOpen; /*打开串口句柄*/
static HWND hBaudRate; /*波特率句柄*/
static HWND hGet; /*收数据框句柄*/
static HWND hSend; /*发数据框句柄*/
static HWND hDefCom; /*默认单选句柄*/
static DWORD dwBaudrate = 1200; /*波特率大小*/
static int iPushtimes = 0; /*波特率按钮按下次数*/
static BOOL bOpenUart = FALSE; /*是否打开了串口*/
static uart myuart; /*串口对象*/
TCHAR buffer[255]; /*UNICODE数据缓存*/
char cBuffer[255]; /*ANSI*/
DWORD baudrate; /*波特率*/
switch (message)
{
case WM_INITDIALOG:
hOpen = GetDlgItem(hDlg, IDC_BUTTON_OPENCOMM);
hBaudRate = GetDlgItem(hDlg, IDC_COMBO_BAUDRATE);
hGet = GetDlgItem(hDlg, IDC_EDIT_RECEIVE);
hSend = GetDlgItem(hDlg, IDC_EDIT_SEND);
myuart.inithRec(hGet);
SendMessage(hBaudRate, CB_ADDSTRING, 0, (LPARAM)_T("4800"));
SendMessage(hBaudRate, CB_ADDSTRING, 0, (LPARAM)_T("9600"));
SendMessage(hBaudRate, CB_ADDSTRING, 0, (LPARAM)_T("115200"));
SendMessage(hBaudRate, CB_SETCURSEL, 0, 0);
return (INT_PTR)TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_BUTTON_OPENCOMM:
SendMessage(hBaudRate, WM_GETTEXT, (WPARAM)20, (LPARAM)buffer);
uart::TcharToChar(buffer, cBuffer);
sscanf_s(cBuffer, "%d", &baudrate);
if (!myuart.openCOM(baudrate))
{
MessageBox(hDlg, TEXT("打开串口失败!"), TEXT("错误"), MB_OK | MB_ICONERROR);
}
case IDC_COMBO_BAUDRATE:
break;
default:
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_QUIT:
EndDialog(hDlg, LOWORD(wParam));
break;
}
return DefWindowProc(hDlg, message, wParam, lParam);
}
//文本框的处理程序。
BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_COMMAND:
{
UINT uNotify = HIWORD(wParam); //事件
UINT uID = LOWORD(wParam); //控件ID
if(uNotify == BN_CLICKED && uID == IDC_XXXX)
{
MessageBox(hwndDlg, L"点击了文本框!\n", L"成功", MB_OK);
}
break;
}
}
return (INT_PTR)FALSE;
}