win32 sdk SetWindowText()怎么在编辑框中显示内容?

如下图,只能显示在标题栏上。怎么在图中灰色区域显示?getDlgItem()为什么返回0?

 hWndDialogBox = CreateDialog((HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE), MAKEINTRESOURCE(IDD_DIALOG), hWnd, (DLGPROC)DeleteItemProc);
HWND hWnd = GetDlgItem(hWndDialogBox, IDD_DIALOG);
CString Buff("hhh");
SetWindowText(hWndDialogBox, Buff);
ShowWindow(hWndDialogBox, SW_SHOW);

图片说明

3个回答

在文本框显示用sendmessage wm_settext
上次好像已经回答你了

oqqsoap1234567
alexsendar 知道了,先创建dialog,再创建的static父窗口使用dialog的句柄,再调用getdlgitem
接近 3 年之前 回复
oqqsoap1234567
alexsendar 你上次说的GetDlgItem,返回的都是0
接近 3 年之前 回复

创建个编辑框,然后将编辑框放在你创建的窗体的客户区,然后设置编辑框的文本就可以了

CString Buff(" hhh "); 哈哈

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
PCOMM库,如何实现串口接受的数据实时显示在编辑框中,谢谢!
如题,怎么实现,我用了 ``` if(sio_open(m_portnum)==SIO_OK) { m_Buttonopen.SetWindowText("关闭串口"); m_ON_OFF=true; m_ButtonMsg.EnableWindow(TRUE); m_BTimeMsg.EnableWindow(TRUE); sio_SetReadTimeouts(m_portnum,MAXDWORD,0);//设置读取数据的间隔 char buf[10]; sio_read(m_portnum,buf,10);//读取数据,m_potrnum是定义的int型变量 CString aa=buf; m_resMsg=aa+m_resMsg;//m_resMsg是一个关联编辑框的CSTring型变量 UpdateData(FALSE); } ``` 编辑框中出现“烫烫烫”
win32编程中窗口不显示是什么问题
《windows程序设计》第9章ENVIRON程序 把光盘中的源代码粘贴出来发现还是没有窗口在运行,实在想不明白 (运行环境:VS2013,WINDOWS7) 以下源代码: #include <windows.h> #define ID_LIST 1 #define ID_TEXT 2 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("Environ") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, TEXT ("Environment List Box"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } void FillListBox (HWND hwndList) { int iLength ; TCHAR * pVarBlock, * pVarBeg, * pVarEnd, * pVarName ; pVarBlock = GetEnvironmentStrings () ; // Get pointer to environment block while (*pVarBlock) { if (*pVarBlock != '=') // Skip variable names beginning with '=' { pVarBeg = pVarBlock ; // Beginning of variable name while (*pVarBlock++ != '=') ; // Scan until '=' pVarEnd = pVarBlock - 1 ; // Points to '=' sign iLength = pVarEnd - pVarBeg ; // Length of variable name // Allocate memory for the variable name and terminating // zero. Copy the variable name and append a zero. pVarName = calloc (iLength + 1, sizeof (TCHAR)) ; CopyMemory (pVarName, pVarBeg, iLength * sizeof (TCHAR)) ; pVarName[iLength] = '\0' ; // Put the variable name in the list box and free memory. SendMessage (hwndList, LB_ADDSTRING, 0, (LPARAM) pVarName) ; free (pVarName) ; } while (*pVarBlock++ != '\0') ; // Scan until terminating zero } FreeEnvironmentStrings (pVarBlock) ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hwndList, hwndText ; int iIndex, iLength, cxChar, cyChar ; TCHAR * pVarName, * pVarValue ; switch (message) { case WM_CREATE : cxChar = LOWORD (GetDialogBaseUnits ()) ; cyChar = HIWORD (GetDialogBaseUnits ()) ; // Create listbox and static text windows. hwndList = CreateWindow (TEXT ("listbox"), NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD, cxChar, cyChar * 3, cxChar * 16 + GetSystemMetrics (SM_CXVSCROLL), cyChar * 5, hwnd, (HMENU) ID_LIST, (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL) ; hwndText = CreateWindow (TEXT ("static"), NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, cxChar, cyChar, GetSystemMetrics (SM_CXSCREEN), cyChar, hwnd, (HMENU) ID_TEXT, (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL) ; FillListBox (hwndList) ; return 0 ; case WM_SETFOCUS : SetFocus (hwndList) ; return 0 ; case WM_COMMAND : if (LOWORD (wParam) == ID_LIST && HIWORD (wParam) == LBN_SELCHANGE) { // Get current selection. iIndex = SendMessage (hwndList, LB_GETCURSEL, 0, 0) ; iLength = SendMessage (hwndList, LB_GETTEXTLEN, iIndex, 0) + 1 ; pVarName = calloc (iLength, sizeof (TCHAR)) ; SendMessage (hwndList, LB_GETTEXT, iIndex, (LPARAM) pVarName) ; // Get environment string. iLength = GetEnvironmentVariable (pVarName, NULL, 0) ; pVarValue = calloc (iLength, sizeof (TCHAR)) ; GetEnvironmentVariable (pVarName, pVarValue, iLength) ; // Show it in window. SetWindowText (hwndText, pVarValue) ; free (pVarName) ; free (pVarValue) ; } return 0 ; case WM_DESTROY : PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; } 运行时没有显示错误 ![图片说明](https://img-ask.csdn.net/upload/201505/27/1432710555_149942.jpg)
error C2039: “setWindowText”: 不是“ATL::CStringT<BaseType,StringTraits>”的成员
(1)这是一个显示插入电脑U盘信息的程序,在进行U盘的检测和扫描的主函数中,有2个error不知道怎么解决,我是MFC对话框写的,主要问题在控件的描述这里。 (2)主函数如下: ``` void CU_disk_detection_scanningDlg::OnEnChangeEdit1() { // TODO: 如果该控件是 RICHEDIT 控件,它将不 // 发送此通知,除非重写 CDialogEx::OnInitDialog() // 函数并调用 CRichEditCtrl().SetEventMask(), // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO: 在此添加控件通知处理程序代码 } char CU_disk_detection_scanningDlg::FirstDriveFromMask(ULONG unitmask) //获取盘符 //不允许成员函数重新声明 { char i; //char unitmask; for(i = 0;i < 26;i++) { if(unitmask &0x1) break; unitmask = unitmask >>1; } return i; } LRESULT CU_disk_detection_scanningDlg::WindowProc(UINT message,WPARAM wparam,LPARAM lparam) { CString detectMsg; char wParam ; char lParam ; switch (message) { //WM_DEVICECHANGE,系统硬件改变发出来的系统消息 case WM_DEVICECHANGE: { PDEV_BROADCAST_HDR lpdb=(PDEV_BROADCAST_HDR)lparam; switch (wParam) //char wParam; { case WM_DEVICECHANGE: break; case DBT_DEVICEARRIVAL: //设备检测结束,并且可以使用...... { if(lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME) //逻辑卷 { PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb; switch(lpdbv->dbcv_flags) { case 0: //U盘 { CString decDriver; //char FirstDriveFromMask; CString m_editControl; //char setWindowText; decDriver = FirstDriveFromMask(lpdbv->dbcv_unitmask); detectMsg.Format(_T("检测到U盘:[%s]插入!"),decDriver.GetBuffer(0)); m_editControl.setWindowText(detectMsg); } break; case DBTF_MEDIA: //光盘 break; } } } break; case DBT_DEVICEREMOVECOMPLETE: //设备卸载或者拔出 { if(lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME) //逻辑卷 { PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb; switch(lpdbv->dbcv_flags) { case 0: //U盘 { CString decDriver; //char wParam; //CString FirstDriveFromMask; CString m_editControl; decDriver = FirstDriveFromMask(lpdbv->dbcv_unitmask); //第一个驱动器来自掩码 //应用指针 detectMsg.Format(_T("检测到U盘:[%s]拔出!"),decDriver.GetBuffer(0)); m_editControl.setWindowText(detectMsg); } break; case DBTF_MEDIA: //光盘 break; } } } break; } } break; } return CDialog::WindowProc(message, wParam, lParam); } ``` 头文件如下: ``` // U_disk_detection_scanningDlg.h : 头文件 // #pragma once // CU_disk_detection_scanningDlg 对话框 class CU_disk_detection_scanningDlg : public CDialogEx { // 构造 public: CU_disk_detection_scanningDlg(CWnd* pParent = NULL); // 标准构造函数 LRESULT CU_disk_detection_scanningDlg::WindowProc(UINT message,WPARAM wparam,LPARAM lparam); //CString FirstDriveFromMask; //CString m_editControl; // 对话框数据 enum { IDD = IDD_U_DISK_DETECTION_SCANNING_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 //CEdit m_editControl; // 实现 protected: HICON m_hIcon; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: afx_msg void OnEnChangeEdit1(); char FirstDriveFromMask(ULONG unitmask); }; ``` (3)报错信息 ![图片说明](https://img-ask.csdn.net/upload/201908/11/1565488464_324166.jpg)![图片说明](https://img-ask.csdn.net/upload/201908/11/1565488479_369879.png)![图片说明](https://img-ask.csdn.net/upload/201908/11/1565488490_527755.jpg) (4)尝试过找回m_editControl在.h文件中的定义,但是没有跳转到.h文档中。
GetDlgItem(IDC)->SetWindowText(strsampletime)
GetDlgItem(IDC_TIMES)->SetWindowText(strsampletime)报错,错误如下: C:\Users\Administrator\Desktop\圆盘检测\StillCap\StillCapDlg.cpp(134) : error C2660: 'GetDlgItem' : function does not take 1 parameters C:\Users\Administrator\Desktop\圆盘检测\StillCap\StillCapDlg.cpp(134) : error C2227: left of '->SetWindowTextA' must point to class/struct/union 但是我重新建立一个工程,输入 GetDlgItem(IDC_TIMES)->SetWindowText(strsampletime);,不报错,成功了, 请问这是什么原因引起的?该如何解决?
定时器的使用,怎么添加
怎么用SETWINDOWTEXT显示一个14路采集卡采集的数据,是动态的,每路数据都要在EDIT控件中显示,初学者不会,麻烦了~~
VC++ MFC getwindowtext(),使用提示的错误原因是什么
VC++ MFC getwindowtext(),使用提示的错误原因是什么 int num1,num2,num3; char ch1[12],ch2[12],ch3[12]; m_edit1.GetWindowText(ch1); //在ch1后面不标注长度,会提示出错,size 主要是什么作用 m_edit2.GetWindowText(ch2,12); num1=_ttoi(ch1); num2=_ttoi(ch2); num3=num1+num2; _itot(num3,ch3,10); m_edit3.SetWindowText(ch3); 错误提示: C:\Program Files (x86)\Microsoft Visual Studio\HD_RZG_CiTOS_4.5_EX\HD_RZG_CiTOS_4.5_EX\04_SRC\plan\project\test3\test3Dlg.cpp(270) : error C2664: 'void __thiscall CWnd::GetWindowTextA(class CString &) const' : cannot convert parameter 1 from 'char [ 12]' to 'class CString &
WindowsAP列表框窗口显示不出来
我用的是《Windows程序设计》里面的代码但是显示不出窗口。 删除创建的hwndlist和hwndText才能显示, 请问这是为啥? ``` #include <windows.h> #define ID_LIST 1 #define ID_TEXT 2 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("Environ") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, TEXT ("Environment List Box"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } void FillListBox (HWND hwndList) { int iLength ; TCHAR * pVarBlock, * pVarBeg, * pVarEnd, * pVarName ; pVarBlock = GetEnvironmentStrings () ; // Get pointer to environment block while (*pVarBlock) { if (*pVarBlock != '=') // Skip variable names beginning with '=' { pVarBeg = pVarBlock ; // Beginning of variable name while (*pVarBlock++ != '=') ; // Scan until '=' pVarEnd = pVarBlock - 1 ; // Points to '=' sign iLength = pVarEnd - pVarBeg ; // Length of variable name // Allocate memory for the variable name and terminating // zero. Copy the variable name and append a zero. pVarName = (TCHAR*)calloc (iLength + 1, sizeof (TCHAR)) ; CopyMemory (pVarName, pVarBeg, iLength * sizeof (TCHAR)) ; pVarName[iLength] = '\0' ; // Put the variable name in the list box and free memory. SendMessage (hwndList, LB_ADDSTRING, 0, (LPARAM) pVarName) ; free (pVarName) ; } while (*pVarBlock++ != '\0') ; // Scan until terminating zero } FreeEnvironmentStrings (pVarBlock) ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hwndList, hwndText ; int iIndex, iLength, cxChar, cyChar ; TCHAR * pVarName, * pVarValue ; switch (message) { case WM_CREATE : cxChar = LOWORD (GetDialogBaseUnits ()) ; cyChar = HIWORD (GetDialogBaseUnits ()) ; // Create listbox and static text windows. hwndList = CreateWindow (TEXT ("listbox"), NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD, cxChar, cyChar * 3, cxChar * 16 + GetSystemMetrics (SM_CXVSCROLL), cyChar * 5, hwnd, (HMENU) ID_LIST, (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL) ; hwndText = CreateWindow (TEXT ("static"), NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, cxChar, cyChar, GetSystemMetrics (SM_CXSCREEN), cyChar, hwnd, (HMENU) ID_TEXT, (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL) ; FillListBox (hwndList) ; return 0 ; case WM_SETFOCUS : SetFocus (hwndList) ; return 0 ; case WM_COMMAND : if (LOWORD (wParam) == ID_LIST && HIWORD (wParam) == LBN_SELCHANGE) { // Get current selection. iIndex = SendMessage (hwndList, LB_GETCURSEL, 0, 0) ; iLength = SendMessage (hwndList, LB_GETTEXTLEN, iIndex, 0) + 1 ; pVarName = (TCHAR*)calloc (iLength, sizeof (TCHAR)) ; SendMessage (hwndList, LB_GETTEXT, iIndex, (LPARAM) pVarName) ; // Get environment string. iLength = GetEnvironmentVariable (pVarName, NULL, 0) ; pVarValue = (TCHAR*)calloc (iLength, sizeof (TCHAR)) ; GetEnvironmentVariable (pVarName, pVarValue, iLength) ; // Show it in window. SetWindowText (hwndText, pVarValue) ; free (pVarName) ; free (pVarValue) ; } return 0 ; case WM_DESTROY : PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; } ```
visual 2012 单文档所窗口切换时如何显示同一个标题名称
大家好!请教一个问题: 单文档多视窗切换时,如果在不同的视窗中始终显示同一个标题名称呢?采用下述方式时 m_pMainWnd->SetWindowText(_T("系统2012")); 当切换多其它窗口时,在app文件中的名称就变成其它了,而不再是“系统2012”,谢谢!
为什么子线程运行之后没有立刻执行?运行如下代码子线程永远不会执行。
``` void CMultiThread9Dlg::OnBnClickedWritew() { //创建子线程1 CWinThread *pWriteD=AfxBeginThread(WriteD, &m_ctrlD, THREAD_PRIORITY_HIGHEST, 0, 0); //创建子线程2 CWinThread *pWriteW=AfxBeginThread(WriteW, &m_ctrlW, THREAD_PRIORITY_HIGHEST, 0, 0); //如果去掉此循环,线程1,2可以正常运行,在编辑框里出现数字 //为什么要等待主线程执行之后才执行子线程。明明子线程优先级高于主线程。 //感谢您的关注。 while(1) { Sleep(100); } } ``` ``` UINT WriteW(LPVOID pParam) { CEdit *pEdit=(CEdit*)pParam; CString str; for(int i=0;i<10;i++) { str.Format(_T("%d"),i); pEdit->SetWindowText(str); Sleep(100); } eventWriteD.SetEvent(); return 0; } UINT WriteD(LPVOID pParam) { CEdit *pEdit=(CEdit*)pParam; WaitForSingleObject(eventWriteD,INFINITE); CString str; for(int i=0;i<10;i++) { str.Format(_T("%d"),i); pEdit->SetWindowText(str); Sleep(100); } return 0; } ```
VC中MFC视图中建立的其它控件,单击时这些控件的界面会显示到文本框的位置上
#define IDC_START_DT 10016 #define IDC_END_DT 10017 #define IDC_OPERATOR_COMB 10018 #define IDC_CARTYPE_COMB 10019 #define IDC_MIANFIE_EDT 10020 #define IDC_CHANNEL_COMB 10021 //控件定义 CDateTimeCtrl m_StartDt; CDateTimeCtrl m_EndDt; CComboBox m_OperatorComb; CComboBox m_CarTypeComb; CEdit m_MianFeiEdt; CComboBox m_ChannelComb; CMyListCtrl m_ListCtr; 在view上动态建立控件 int CReportView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here //生成开始时间 if(!m_StartDt.Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP | DTS_LONGDATEFORMAT,CRect(0,0,0,0), this, IDC_START_DT)) { return FALSE; } //生成结束时间 if(!m_EndDt.Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP | DTS_LONGDATEFORMAT,CRect(0,0,0,0), this, IDC_END_DT)) { return FALSE; } //生成操作员下拉框 if(!m_OperatorComb.Create(CBS_DROPDOWNLIST | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, CRect(0,0,0, 0), this, IDC_OPERATOR_COMB)) { return FALSE; } //生成车类型下拉框 if(!m_CarTypeComb.Create(CBS_DROPDOWNLIST | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, CRect(0,0,0, 0), this, IDC_CARTYPE_COMB)) { return FALSE; } //生成通道号下拉框 if(!m_ChannelComb.Create(CBS_DROPDOWNLIST | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, CRect(0,0,0, 0), this, IDC_CHANNEL_COMB)) { return FALSE; } //生成免费编辑框 if(!m_MianFeiEdt.Create(ES_AUTOHSCROLL | ES_AUTOVSCROLL | WS_CHILD | WS_VISIBLE | WS_TABSTOP, CRect(0,0,0, 0), this, IDC_MIANFIE_EDT)) { return FALSE; } return 0; } //改变控件位置 void CReportView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); // TODO: Add your message handler code here if(IsWindow(m_StartDt))//开始时间 { CRect rc(65, 1, 235, 24); m_StartDt.MoveWindow(rc); } if(IsWindow(m_EndDt))//结束时间 { CRect rc(290, 1, 460, 24); m_EndDt.MoveWindow(rc); } if(IsWindow(m_OperatorComb)) { CRect rc(505, 2, 565, 250); m_OperatorComb.MoveWindow(rc); m_OperatorComb.SetItemHeight(-1, 16); } if(IsWindow(m_CarTypeComb)) { CRect rc(610, 2,670, 250); m_CarTypeComb.MoveWindow(rc); m_CarTypeComb.SetItemHeight(-1, 16); } if(IsWindow(m_ChannelComb))//道口 { CRect rc(700, 2,805, 250); m_ChannelComb.MoveWindow(rc); m_ChannelComb.SetItemHeight(-1, 16); } if(IsWindow(m_MianFeiEdt))//免费大于 { CRect rc(860, 1, 1110, 24); m_MianFeiEdt.MoveWindow(rc); } if(IsWindow(m_ListCtr)) { CRect rc(1,26,cx,cy-25); m_ListCtr.MoveWindow(rc); } } //初始化控件 void CReportView::OnInitialUpdate() { CView::OnInitialUpdate(); m_StartDt.SetFormat(L"yyy-MM-dd HH:mm:ss"); m_EndDt.SetFormat(L"yyy-MM-dd HH:mm:ss"); COleDateTime tmEnd = COleDateTime::GetCurrentTime(); COleDateTime tmStart = tmEnd - COleDateTimeSpan(1,0,0,0); m_StartDt.SetTime(tmStart); m_EndDt.SetTime(tmEnd); m_OperatorComb.AddString(L"所有"); m_OperatorComb.AddString(L"1"); m_OperatorComb.AddString(L"2"); m_OperatorComb.AddString(L"3"); m_OperatorComb.SetCurSel(0); m_CarTypeComb.AddString(L"所有"); m_CarTypeComb.AddString(L"临时车"); m_CarTypeComb.AddString(L"固定车"); m_CarTypeComb.SetCurSel(0); m_ChannelComb.AddString(L"所有"); m_ChannelComb.AddString(L"名诚大楼出口1"); m_ChannelComb.AddString(L"名诚大楼出口2"); m_MianFeiEdt.SetWindowText(L""); } void CReportView::OnDraw(CDC* pDC) { CDocument* pDoc = GetDocument(); // TODO: add draw code here //以下为画工具条背景图片 CBitmap hbitmap; hbitmap.LoadBitmap(IDB_16TOOLBARBK); CDC Medc; Medc.CreateCompatibleDC(pDC); Medc.SelectObject(hbitmap); BITMAP bmp; hbitmap.GetBitmap(&bmp); CRect DrawRect; GetWindowRect(DrawRect); ScreenToClient(DrawRect); DrawRect.bottom = 26; pDC->StretchBlt(DrawRect.left,DrawRect.top,DrawRect.Width(),DrawRect.Height(),&Medc, 0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); CFont font; VERIFY(font.CreatePointFont(100, L"宋体", pDC)); CFont* def_font = pDC->SelectObject(&font); pDC->SetBkMode(TRANSPARENT); if(m_ReportType ==SHOW_REPORT_OPERATOR_FEE)//操作员收费查询报表 { pDC->TextOut(10,7,L"开始时间"); pDC->TextOut(235,7,L"结束时间"); pDC->TextOut(460,7,L"操作员"); pDC->TextOut(565,7,L"车类型"); pDC->TextOut(670,7,L"道口"); pDC->TextOut(805,7,L"免费大于"); } else { pDC->TextOut(10,7,L"排序字段"); pDC->TextOut(255,7,L"排序方式"); } pDC->SelectObject(def_font); font.DeleteObject(); } BOOL CReportView::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default CBrush backBrush(RGB(200,220,255)); // 保存旧刷子 CBrush* pOldBrush = pDC->SelectObject(&backBrush); CRect rect; pDC->GetClipBox(&rect); // 擦除所需的区域 pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY); pDC->SelectObject(pOldBrush); return TRUE; } 以上为刷新代码,onpaint没重载 程序运行后,在视图上点击时间控件或从下拉框中选择某项后,当鼠标移动到最后面的文本框上时,不知为何会在文本框的位置会显示时间控件或下拉框上的界面内容?![图片说明](https://img-ask.csdn.net/upload/201804/11/1523416826_921486.jpg)但当鼠标点击了文本框时,仍可在文本框中输入内容。
VC++MFC对话框付值,有值传过来,但就不显示
主对话框函数 if(b_RdSysID == 1) { KillTimer(1); b_RdSysID = 0; CColDatadlg *pDlg = (CColDatadlg*)AfxGetMainWnd(); pDlg ->ReadSysID(); } 当前对话框函数 void CColDatadlg::ReadSysID() { CString szStr,szTemp;//(RecBuf); CString *pPhoneNum =new CString((char*)RecBuf, 22); //将byte数组转换成cstring szStr = *pPhoneNum; szTemp = szStr.Right(19); szTemp = szStr.Right(19); MessageBox(szTemp);//此处szTemp有值显示 m_EditSysID = szTemp; //都是CString ,这里报错 // GetDlgItem(IDC_EditSystemID)->SetWindowText(szTemp);//试过没用 SetDlgItemText(IDC_EditSystemID,szTemp);//给EDIT值,EDIT仍没变化为空 UpdateData(false); }
VC socket编程,数据接收问题
用VC socket编程时,用recv函数接收字符串数据,只能接收到前4个字符,多于4个字符的都是“烫”字乱码。这是什么问题?怎么解决? char cs[100]; case FD_READ: { CString num=""; //定义字符串,用于保存待显示字符 ::recv(s1,cs,strlen(cs),0); //接收来自客户端的字符串数据 GetDlgItem(IDC_TEXT)->GetWindowText(num); //获取消息显示框中原有的字符 num+="\r\n"; //添加换行符 num+=(LPTSTR)::inet_ntoa(add1.sin_addr); //将客户端IP换成字符串 num+=":\r\n"; //添加换行符 num+=(LPTSTR)cs; //将接收到的字符串添加到显示字符串 num+=":\r\n"; //添加换行符 GetDlgItem(IDC_TEXT)->SetWindowText(num); //将字符串显示到消息显示框 }
vc++里循环语句只指执行了最后一次
代码如下,准备读十个数,目标是每读一个数就用GetDlgItem(IDC_DATABACK)->SetWindowText(str2) 把每次的读数显示到IDC_DATABACK的静态文本框里。但程序运行的结果是读取的过程中不显示数,读完十个数之后才把最后一个显示出来。可我的语句明明是在循环里面啊,为什么只执行了一次。str2的数据读取没有问题。 int i=0; for(i=0;i<10;i++) { //VisaRead status=viWrite(instr,(unsigned char*)"READ?",6,&recount); char str2[40]; memset(str2,0,sizeof(str2)); status=viRead(instr,(unsigned char*)str2,15,&recount); GetDlgItem(IDC_DATABACK)->SetWindowText(str2); }
有人遇到过发送EM_REPLACESEL消息插入文本时显示异常的情况吗?
因为要在RichEdit中显示不同格式的文字,所以使用EM_REPLACESEL消息来添加文本,结果发现当RichEdit控件设置为WS_VSCROLL时,如果添加的文本行数超过RichEdit一屏显示的行数,则要显示的文本一闪而过,最后什么都不显示,拉一下滚动条后才能显示正常。 如果不设置WS_VSCROLL则正常显示,但是这样做就没有滚动条了。设置了ES_AUTOVSCROLL能支持鼠标滚动,但滚动条依旧没有。 如果添加的文本没有超过一屏显示的数量没有问题。 用WM_SETTEXT消息或者SetWindowText函数也没有问题。 不知道有没有人遇到过同样的事情。 _LoadLibrary(TEXT("Riched20.dll")) CreateWindow(RICHEDIT_CLASS, TEXT(""), WS_VISIBLE|WS_CHILD|ES_MULTILINE|WS_HSCROLL|WS_VSCROLL, ... SendMessage(HEditData, EM_REPLACESEL, FALSE, (LPARAM)TsDataShow);_
MFC 读取文本内容的问题
``` void EditView::ReadTitle(CString strName) { CString content=""; CStdioFile file; CString fileName = strName; if (file.Open(fileName, CFile::modeRead | CFile::typeText)) { file.SeekToBegin(); CString str; int len = 512 - 2; file.ReadString(str); // A null character ('\0') is appended. if ("" != str) content += str; file.Close(); } else AfxMessageBox("读取失败!"); this->SetWindowText(content); } ``` strName是路径,调试是正确的,而且file.Open()也成功了。 就是读取内容ReadString(str)时,str显示字符串中的字符无效。 不知是哪里的问题。。
MFC 错误 LNK2001 无法解析的外部符号
// SerialTest3Dlg.h : 头文件 // #pragma once #include "afxwin.h" #include "mscomm2.h" #include "stdint.h" #include "stdafx.h" // CSerialTest3Dlg 对话框 class CSerialTest3Dlg : public CDialogEx { // 构造 public: CSerialTest3Dlg(CWnd* pParent = NULL); // 标准构造函数 // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_SERIALTEST3_DIALOG }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: HICON m_hIcon; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() private: CString m_EditReceive;//接收框 CString m_Editsend;//发送框 CComboBox m_comb1;//COM口下拉框 public: CComboBox m_comb2;//波特率下拉框 CMscomm2 m_mscom;//串口控件 afx_msg void OnBnClickedButtonOpen();//打开按钮 afx_msg void OnBnClickedButtonCleanup();//清楚按钮 afx_msg void OnBnClickedButtonClose();//关闭按钮 DECLARE_EVENTSINK_MAP() void OnCommMscomm1();//串口按钮(隐形) CEdit m_Edit; CString m_interpretingdata;//解析数据 afx_msg void OnBnClickedButton5();//发送按钮 }; typedef struct FPGA_INFO_REPORT { uint8_t bWorkMode; //当前工作模式0x00表示初始模式0x01表示扫频模式0x02表示闭环驱动和检测模式0x03表示开环驱动和检测模式0x04表示连续Q值计算模式 uint8_t bCheckMode; //当前检测类型0x01表示开环检测0x02表示闭环检测调试0x03表示闭环检测0x04表示正交校正模式 uint8_t bADMagTimes; //检测信号放大倍数 uint32_t dwSweepTime; //扫频完成时间,毫秒 float fSweepFreq; //扫频得到的谐振频率 float fSweepFreqAmpl; //扫频谐振频率对应的驱动反馈信号幅值 float fDriSignalFreq; //驱动信号频率 float fDriSignalAmpl; //驱动信号幅度 float fDriveFbAmpl; //驱动反馈信号幅度 float fDriveFbPhase; //驱动反馈信号相位 float fBalSignalAmpl; //力平衡信号幅度 float fBalSignalPhase; //力平衡信号相位 float fCheckSignalAmpl; //检测信号幅度 float fCheckSignalPhase; //检测信号相位 float fCheckSignalPalst; //角速度 }FPGA_INFO_REPORT1; // SerialTest3Dlg.cpp : 实现文件 // #include "stdafx.h" #include "SerialTest3.h" #include "SerialTest3Dlg.h" #include "afxdialogex.h" #include <stdlib.h> #include "parser.h" #include <string.h> #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_ABOUTBOX }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CSerialTest3Dlg 对话框 CSerialTest3Dlg::CSerialTest3Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_SERIALTEST3_DIALOG, pParent) , m_EditReceive(_T("")) , m_Editsend(_T("")) , m_interpretingdata(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CSerialTest3Dlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT_Rev, m_EditReceive); DDX_Text(pDX, IDC_EDIT_Tev, m_Editsend); DDX_Control(pDX, IDC_COMBO2, m_comb1); DDX_Control(pDX, IDC_COMBO3, m_comb2); DDX_Control(pDX, IDC_MSCOMM2, m_mscom); DDX_Control(pDX, IDC_EDIT_Rev, m_Edit); DDX_Text(pDX, IDC_EDIT16, m_interpretingdata); } BEGIN_MESSAGE_MAP(CSerialTest3Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON_OPEN, &CSerialTest3Dlg::OnBnClickedButtonOpen) ON_BN_CLICKED(IDC_BUTTON_CLEANUP, &CSerialTest3Dlg::OnBnClickedButtonCleanup) ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CSerialTest3Dlg::OnBnClickedButtonClose) //ON_BN_CLICKED(IDC_BUTTON1, &CSerialTest3Dlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON5, &CSerialTest3Dlg::OnBnClickedButton5) END_MESSAGE_MAP() // CSerialTest3Dlg 消息处理程序 BOOL CSerialTest3Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 // 串口选择组合框 CString str; int i; for (i = 0; i < 5; i++) { str.Format(_T("com %d"), i + 1); m_comb1.InsertString(i, str); } m_comb1.SetCurSel(0);//预置COM口 // 波特率选择组合框 CString str1[] = { _T("4800"),_T("9600"),_T("19200"),_T("38400"),_T("43000"),_T("56000"),_T("57600"),_T("115200") }; for (int i = 0; i < 8; i++) { int judge_tf = m_comb2.AddString(str1[i]); if ((judge_tf == CB_ERR) || (judge_tf == CB_ERRSPACE)) MessageBox(_T("build baud error!")); } m_comb2.SetCurSel(7);//预置波特率为"115200" return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CSerialTest3Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CSerialTest3Dlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CSerialTest3Dlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CSerialTest3Dlg::OnBnClickedButtonOpen()//打开串口 按钮程序 { // TODO: 在此添加控件通知处理程序代码 CString str, str1, n; //定义字符串 GetDlgItemText(IDC_BUTTON_OPEN, str); CWnd *h1; h1 = GetDlgItem(IDC_BUTTON_OPEN); //指向控件的caption if (!m_mscom.get_PortOpen()) { m_comb2.GetLBText(m_comb2.GetCurSel(), str1);//取得所选的字符串,并存放在str1里面 str1 = str1 + ',' + 'n' + ',' + '8' + ',' + '1'; //这句话很关键 m_mscom.put_CommPort((m_comb1.GetCurSel() + 1)); //选择串口 m_mscom.put_InputMode(1); //设置输入方式为二进制方式 m_mscom.put_Settings(str1); //波特率为(波特率组合框)无校验,8数据位,1个停止位 m_mscom.put_InputLen(1024); //设置当前接收区数据长度为1024 m_mscom.put_RThreshold(1); //缓冲区一个字符引发事件 m_mscom.put_RTSEnable(1); //设置RT允许 m_mscom.put_PortOpen(true); //打开串口 if (m_mscom.get_PortOpen()) { str = _T("关闭串口"); UpdateData(true); h1->SetWindowText(str); //改变按钮名称为“关闭串口” } } else { m_mscom.put_PortOpen(false); if (str != _T("打开串口")) { str = _T("打开串口"); UpdateData(true); h1->SetWindowText(str); //改变按钮名称为打开串口 } } } void CSerialTest3Dlg::OnBnClickedButtonCleanup()//清除数据按钮 { // TODO: 在此添加控件通知处理程序代码 m_EditReceive = _T(""); //给接收编辑框发送空格符 UpdateData(false); //更新数据 } void CSerialTest3Dlg::OnBnClickedButtonClose()//退出按钮 { // TODO: 在此添加控件通知处理程序代码 m_EditReceive = _T(""); //给接收编辑框发送空格符 UpdateData(false); //更新数据 } BEGIN_EVENTSINK_MAP(CSerialTest3Dlg, CDialogEx) ON_EVENT(CSerialTest3Dlg, IDC_MSCOMM2, 1, CSerialTest3Dlg::OnCommMscomm1, VTS_NONE) END_EVENTSINK_MAP() //CString temp; void CSerialTest3Dlg::OnCommMscomm1()//串口控件(按钮) { // TODO: 在此处添加消息处理程序代码 if (m_mscom.get_CommEvent() == 2) { char str[2048] = { 0 }; long k; CString temp; VARIANT InputData = m_mscom.get_Input(); //读缓冲区 COleSafeArray fs; fs = InputData; //VARIANT型变量转换为COleSafeArray型变量 for (k = 0; k < fs.GetOneDimSize(); k++) { fs.GetElement(&k, str + k); //转换为BYTE型数组 temp.Format(L"%02X",(char*)(str + k));//输出显示16进制 m_EditReceive += temp; // 接收到数据显示在编辑框里面 } SetTimer(1,10,NULL); //延时10ms UpdateData(false); m_Edit.SetSel(-1, 1); this->SetDlgItemTextW(IDC_EDIT_Rev, m_EditReceive);//将接收框内容显示到最后位置 m_Edit.LineScroll(m_Edit.GetLineCount() - 1, 0);//将垂直滚动条滚动到最后一行 FPGA_INFO_REPORT1 info; memcpy(&info, str, sizeof(str)); CString str2; str2.Format(L"当前工作模式:%c\n", info.bWorkMode, "当前检测类型:%c\n", info.bCheckMode, "检测信号放大倍数:%c\n", info.bADMagTimes, "扫频完成时间:%c\n", info.dwSweepTime, "扫频得到的谐振频率:%f\n", info.fSweepFreq, "扫频谐振频率对应的驱动反馈信号幅值:%f\n", info.fSweepFreqAmpl, "驱动信号频率:%f\n", info.fDriSignalFreq, "驱动信号幅度:%f\n", info.fDriSignalAmpl, "驱动反馈信号幅度:%f\n", info.fDriveFbAmpl, "力平衡信号幅度:%f\n", info.fBalSignalAmpl, "力平衡信号相位:%f\n", info.fBalSignalPhase, "检测信号幅度:%f\n", info.fCheckSignalAmpl, "检测信号相位:%f\n", info.fCheckSignalPhase, "角速度:%f\n", info.fCheckSignalPalst); m_interpretingdata =str2; } } void CSerialTest3Dlg::OnBnClickedButton5() { // TODO: 在此添加控件通知处理程序代码 UpdateData(true); //更新控件数据 m_mscom.put_Output(COleVariant(m_Editsend));//把发送编辑框的数据发送出去 } 以上代码报错 :错误 LNK2001 无法解析的外部符号 "public: virtual struct CRuntimeClass * __thiscall CMscomm2::GetRuntimeClass(void)const " (?GetRuntimeClass@CMscomm2@@UBEPAUCRuntimeClass@@XZ) SerialTest3 C:\Users\LFY\Desktop\SerialTest3\SerialTest3\SerialTest3Dlg.obj 1 是什么原因
API实现串口通讯,读数据时显示“烫烫烫烫烫”是怎么回事
【更新】 按照各位的方法进行了内存初始化 现在不显示“烫烫烫“了 但也没有显示任何的字符是怎么回事呢? 这是执行到ReadFile语句时候的各个变量 ![图片说明](https://img-ask.csdn.net/upload/201607/24/1469363517_629879.png) 但是再执行下一句的时候length就变为0了 而且str也是空的 在CString str(RXBuff);处断点显示: ![图片说明](https://img-ask.csdn.net/upload/201607/24/1469363956_803254.png) 麻烦各位了。。。 ------------------------------------------------------------------------------------- 发送“123”的话就会显示一长串的烫 缓冲区也没清空 如果改成只接收单个字符的程序 也还是收到乱码 不管发送'1'还是'2'都显示‘Ì’ 求指教~~ ```struct Parameter { COMConfig* c; CBLDDlg* dlg; }; //这是开启的线程: UINT ThreadFunc(LPVOID lpParam) { Parameter* parameter = (Parameter*)lpParam; COMConfig* comConfig = parameter->c; CBLDDlg* dlg = parameter->dlg; BOOL bResult = TRUE; DWORD Event = 0; DWORD BytesTransfered = 0; DWORD CommEvent = 0; DWORD dwError = 0; if(comConfig->m_hComm) { PurgeComm(comConfig->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR); } else { AfxMessageBox(_T("串口初始化失败")); return 0; } for(;;) { bResult = WaitCommEvent(comConfig->m_hComm,&Event,&(comConfig->m_ov));//监测通信事件 if(!bResult) { switch(dwError = GetLastError()) { case ERROR_IO_PENDING: { AfxMessageBox(_T("正常")); break; } case 87: { break; } default: { //显示错误信息 AfxMessageBox(_T("其他错误")); break; } } } else { bResult = ClearCommError(comConfig->m_hComm,&dwError,&(comConfig->comstat)); if(comConfig->comstat.cbInQue == 0)//接收缓冲区字节数 continue; }//end if bResult Event = WaitForMultipleObjects(3,comConfig->m_hEventArray,FALSE,INFINITE); switch(Event) { case 0: { //关闭串口操作 } case 1: { GetCommMask(comConfig->m_hComm,&CommEvent);//获取当前通信事件 if(CommEvent & EV_RXCHAR) dlg->ReceiveChar(comConfig,100); AfxMessageBox(_T("读事件")); break; } case 2: { //写数据操作 } } } return 0; } ``` 然后下面是读数据的函数: ``` void CBLDDlg::ReceiveChar(LPVOID lpParam, DWORD dwLength) { BOOL bRead = TRUE; BOOL bResult = TRUE; DWORD dwError = 0; COMConfig* comConfig = (COMConfig*)lpParam; DWORD length = 0; CString str; char RXBuff[100]; InitializeCriticalSection(&cs); for (;;) { EnterCriticalSection(&cs); bResult = ClearCommError(comConfig->m_hComm, &dwError, &(comConfig->comstat)); LeaveCriticalSection(&cs); if (comConfig->comstat.cbInQue == 0) { break; } EnterCriticalSection(&cs); length=min(dwLength, comConfig->comstat.cbInQue); if (bRead) { //读数据 bResult = ReadFile(comConfig->m_hComm, // Handle to COMM port RXBuff, // RX Buffer Pointer length, // Read one byte &length, // Stores number of bytes read &(comConfig->m_ov)); // pointer to the m_ov structure CString str(RXBuff); m_strEditReceiveMsg = str; GetDlgItem(IDC_receive)->SetWindowText(str);//显示在控件中 if (!bResult) { switch (dwError = GetLastError()) { case ERROR_IO_PENDING: { bRead = FALSE; break; } default: { break; } } } else { bRead = TRUE; } } // close if (bRead) if (!bRead) { bRead = TRUE; bResult = GetOverlappedResult(comConfig->m_hComm, // Handle to COMM port &(comConfig->m_ov), // Overlapped structure &length, // Stores number of bytes read TRUE); // Wait flag if(!bResult) { AfxMessageBox(_T("GetOverlappedResults()in ReadFile()")); } SetCommMask(comConfig->m_ov.hEvent,EV_RXCHAR);//重置为有信号 LeaveCriticalSection(&cs); } } } ```
MFC自绘EDIT控件和Text控件。怎么消除先前的文字?
把EDIT和TEXT设成透明色,和窗口背景一样。1.SetWindowText 和以前的文字重叠。 2.按退格建删除文字,以前的文字还在EDIT里面,再次输入还是重叠。怎么解决?
以下两个MFC函数里的区别是什么
第一个函数是在vc6.0中用class Wizard添加的 第二个函数是在vc的类视图里用 Add Window Message Handle添加的,第二个函数里修改了标题,程序没有进入第一个函数,它们的作用分别是什么,哪个才是窗口的消息回调函数?? ``` BOOL CTestDlg::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class SetWindowText("在OnCreate中修改窗口标题"); return CDialog::Create(IDD, pParentWnd); } int CTestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here // SetWindowText("在OnCreate中修改窗口标题"); return 0; } ```
相见恨晚的超实用网站
相见恨晚的超实用网站 持续更新中。。。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
python 简易微信实现(注册登录+数据库存储+聊天+GUI+文件传输)
socket+tkinter详解+简易微信实现 历经多天的努力,查阅了许多大佬的博客后终于实现了一个简易的微信O(∩_∩)O~~ 简易数据库的实现 使用pands+CSV实现数据库框架搭建 import socket import threading from pandas import * import pymysql import csv # 创建DataFrame对象 # 存储用户数据的表(...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
JavaScript 为什么能活到现在?
作者 | 司徒正美 责编 |郭芮 出品 | CSDN(ID:CSDNnews) JavaScript能发展到现在的程度已经经历不少的坎坷,早产带来的某些缺陷是永久性的,因此浏览器才有禁用JavaScript的选项。甚至在jQuery时代有人问出这样的问题,jQuery与JavaScript哪个快?在Babel.js出来之前,发明一门全新的语言代码代替JavaScript...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
开源并不是你认为的那些事
点击上方蓝字 关注我们开源之道导读所以 ————想要理清开源是什么?先要厘清开源不是什么,名正言顺是句中国的古代成语,概念本身的理解非常之重要。大部分生物多样性的起源,...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
相关热词 c#中dns类 c#合并的excel c# implicit c#怎么保留3个小数点 c# 串口通信、 网络调试助手c# c# 泛型比较大小 c#解压分卷问题 c#启动居中 c# 逻辑或运算符
立即提问