问一下为什么我的程序弹出的messageBox关不了,而且修改之后第二次编译的时候会不能写入,是进程没有关掉吗?

qq_40669215 2019-06-22 06:53:49

// 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);
}

弹出错误框时,点X和确定都没有反应,确定按钮连图标凹陷的动画都没有。
...全文
153 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2019-06-23
  • 打赏
  • 举报
回复
BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage (0);
break;
case WM_COMMAND://WM_COMMAND
switch (LOWORD(wParam))
{
case IDOK:
case IDCANCEL:
DestroyWindow(hwndDlg);
return TRUE;// 消息 已 处理 !
return TRUE;
case IDC_EDIT1:
MessageBox(hwndDlg, "点击了文本框!\n", "成功", MB_OK);
return TRUE;
}
break;
}
return FALSE;// 消息没处理 !
}
zgl7903 2019-06-23
  • 打赏
  • 举报
回复
COMMAND 中应该区分事件和ID再弹窗
//文本框的处理程序。
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;
}

schlafenhamster 2019-06-23
  • 打赏
  • 举报
回复
你的
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;
}
qq_40669215 2019-06-22
  • 打赏
  • 举报
回复
我发现弹窗的标题栏是灰色的而且程序一直在接收WM_NCACTIVATE信号,这个怎么解决啊

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧