MFC调用SetTimer为什么代码不执行

MFC使用OnTimer函数了,也编写了代码,但是调用SetTimer为什么代码不执行呢?也没有任何报错,十分疑惑?

mfc

4个回答

用classwizard将消息和处理函数关联起来了没有?看下你的对话框的消息的定义

SetTimer是定义定时器的,只有定义了SetTimer,OnTimer才会被触发

SetTimer是自己需要想办法触发的,比如你在OnCreate函数中SetTimer,则OnTimer就会被触发;另外KillTimer是杀死定时器的,调用KillTimer之后,OnTimer将不会执行

真正原因是因为 OnTimer() 事件,你自己敲进去没有用的,要通过类向导,在相应的类里添加相应的消息 WM_TIMER 处理程序才可以

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MFC 中SetTimer OnTimer KillTimer 的使用

刚学MFC,想做一个倒计时器,下面为部分代码,ToSecond和ToTimeFormat 是秒和时间字符串的转换。大神们知道问题出在哪里吗? void CTimerDlg::OnBnClickedBegin() { // TODO: 在此添加控件通知处理程序代码 CString szTimeFormat; GetDlgItemText(IDC_IN, szTimeFormat); SetDlgItemText(IDC_OUT, szTimeFormat); iSecond = ToSecond(szTimeFormat); SetTimer(ID_TIMER, 1000, NULL); } void CTimerDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialogEx::OnTimer(nIDEvent); CString szTimeFormat; if (iSecond == -1) { return; } while (iSecond >= 0) { szTimeFormat = ToTimeFormat(iSecond); SetDlgItemText(IDC_OUT, szTimeFormat); } iSecond--; } void CTimerDlg::OnBnClickedStop() { // TODO: 在此添加控件通知处理程序代码 KillTimer(ID_TIMER); }

MFC怎么用settimer循环调用OnDaw,这个是一个控件还是一个函数呢?

MFC怎么用settimer循环调用OnDaw,这个是一个控件还是一个函数呢?

MFC里的线程内Sleep()不执行???

void CAaaDlg::OnButton1() { // TODO: Add your control notification handler code here m_a=0; SetTimer(1,500,NULL); } void CAaaDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default UpdateData(TRUE); m_a=m_a+1; Info.a=m_a; m_b=Info.b; pThread=AfxBeginThread(ThreadFunc,&Info); UpdateData(FALSE); CDialog::OnTimer(nIDEvent); } UINT CAaaDlg::ThreadFunc(LPVOID lParam) { int d; ThreadInfo* pInfo=(ThreadInfo*)lParam; Sleep(2000); d=pInfo->a; pInfo->b=d; return 0; } 然后结构体 struct ThreadInfo { int a; int b; }Info; 代码是这样的,本意是编辑框a里的数每隔5传一次给编辑框b,但为什么只做了一次后,之后再循环,线程里的sleep()不起作用了????![![图片说明](https://img-ask.csdn.net/upload/201503/27/1427460135_230643.jpg)图片说明](https://img-ask.csdn.net/upload/201503/27/1427460161_725745.jpg)

用MFC的对话框载入摄像头并处理,运行接近10分钟后提示内存出错,指针都释放掉了。这是什么原因呀?

![图片说明](https://img-ask.csdn.net/upload/201603/28/1459166465_682627.jpg) 相关的代码: void CMFC_VedioDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 if(!pCapture) { pCapture = cvCaptureFromCAM(0); pFrame = cvQueryFrame(pCapture); drawToDC(pFrame, IDC_Open); } SetTimer(IDC_BUTTON1, 10, NULL); } void CMFC_VedioDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 SetTimer(IDC_BUTTON2, 10, NULL); } void CMFC_VedioDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 int i, j; switch(nIDEvent) { case IDC_BUTTON1: { if(m_bOpenCamera) { pFrame = cvQueryFrame(pCapture); drawToDC(pFrame, IDC_Open); } break; } case IDC_BUTTON2: { IplImage* pGray = cvCreateImage(cvGetSize(pFrame), 8, 1); cvCvtColor(pFrame, pGray, CV_BGR2GRAY); cvCanny(pGray,pGray,100,255,3); drawToDC(pGray, IDC_DEAL); cvReleaseImage(&pGray); break; } } CDialogEx::OnTimer(nIDEvent); } void CMFC_VedioDlg::OnClose() { // TODO: 在此添加消息处理程序代码和/或调用默认值c cvReleaseCapture(&pCapture); cvReleaseImage(&pFrame); KillTimer(IDC_BUTTON1); KillTimer(IDC_BUTTON2); CDialogEx::OnClose(); } void CMFC_VedioDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CDialogEx::OnOK(); } PS:参考这个博客写的代码:http://www.cnblogs.com/leven20061001/archive/2012/10/17/2727865.html 运行10分钟程序就报错了,好郁闷呀!

求大神给该段代码详细注解(MFC 俄罗斯方块)

// TetrisDlg.cpp : 实现文件 // #include "stdafx.h" #include "myself.h" #include "Tetris.h" #include "TetrisDlg.h" #include <iostream> #include <math.h> // #include<windows.h> // #include <mmsystem.h>//导入声音头文件 // #pragma comment(lib,"winmm.lib")//导入声音头文件库 using namespace std; #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialog { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() // CTetrisDlg 对话框 CTetrisDlg::CTetrisDlg(CWnd* pParent /*=NULL*/) : CDialog(CTetrisDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CTetrisDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CTetrisDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_WM_LBUTTONDOWN() ON_WM_TIMER() ON_WM_KEYDOWN() ON_COMMAND(ID_32771, &CTetrisDlg::On32771) ON_COMMAND(ID_32772, &CTetrisDlg::On32772) ON_COMMAND(ID_32773, &CTetrisDlg::On32773) ON_COMMAND(ID_32775, &CTetrisDlg::On32775) ON_COMMAND(ID_32776, &CTetrisDlg::On32776) ON_COMMAND(ID_32777, &CTetrisDlg::On32777) ON_COMMAND(ID_32779, &CTetrisDlg::On32779) ON_COMMAND(ID_32778, &CTetrisDlg::On32778) END_MESSAGE_MAP() // CTetrisDlg 消息处理程序 BOOL CTetrisDlg::OnInitDialog() { CDialog::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 srand((unsigned)time(NULL)); my_brush.CreateSolidBrush(RGB(0,0,0)); speed=1; score=0; gamestate=STOP; return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CTetrisDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CTetrisDlg::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 { CRect rect; CPaintDC dc(this); GetClientRect(rect); dc.FillSolidRect(rect,RGB(0,0,0)); CPen pen(PS_SOLID,1,RGB(255,255,255)); pDC=GetDC(); pDC->SelectObject(&pen); //绘制方框区 pDC->MoveTo(MAINFRAME_X-1,MAINFRAME_Y-1); pDC->LineTo(MAINFRAME_X+MAX_COL*SIZE+1,MAINFRAME_Y-1); pDC->LineTo(MAINFRAME_X+MAX_COL*SIZE+1,MAINFRAME_Y+MAX_ROW*SIZE+1); pDC->LineTo(MAINFRAME_X-1,MAINFRAME_Y+MAX_ROW*SIZE+1); pDC->LineTo(MAINFRAME_X-1,MAINFRAME_Y-1); //绘制预览区 pDC->MoveTo(LOOK_X,LOOK_Y); pDC->LineTo(LOOK_X+6*SIZE,LOOK_Y); pDC->LineTo(LOOK_X+6*SIZE,LOOK_Y+6*SIZE); pDC->LineTo(LOOK_X,LOOK_Y+6*SIZE); pDC->LineTo(LOOK_X,LOOK_Y); //绘制文字 pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(255,0,0)); pDC->TextOut(LOOK_X,LOOK_Y+SIZE*6+20,_T("Score:"),6); pDC->SetTextColor(RGB(0,255,0)); pDC->TextOut(LOOK_X,LOOK_Y+SIZE*6+55,_T("Speed:"),6); //绘制图标 BITMAP bm1; CDC MemDC1; pDC=GetDC(); my_bitmap.LoadBitmap(IDB_PAUSE); my_bitmap.GetObject(sizeof(BITMAP),&bm1); MemDC1.CreateCompatibleDC(pDC); MemDC1.SelectObject(&my_bitmap); pDC->StretchBlt(LOOK_X+45,LOOK_Y+SIZE*6+175,bm1.bmWidth,bm1.bmHeight,&MemDC1,0,0,40,40,SRCCOPY); my_bitmap.DeleteObject(); BITMAP bm2; CDC MemDC2; my_bitmap.LoadBitmap(IDB_START); my_bitmap.GetObject(sizeof(BITMAP),&bm2); MemDC2.CreateCompatibleDC(pDC); MemDC2.SelectObject(&my_bitmap); pDC->StretchBlt(LOOK_X+45,LOOK_Y+SIZE*6+100,bm2.bmWidth,bm2.bmHeight,&MemDC2,0,0,40,40,SRCCOPY); my_bitmap.DeleteObject(); BITMAP bm3; CDC MemDC3; my_bitmap.LoadBitmap(IDB_STOP); my_bitmap.GetObject(sizeof(BITMAP),&bm3); MemDC3.CreateCompatibleDC(pDC); MemDC3.SelectObject(&my_bitmap); pDC->StretchBlt(LOOK_X+45,LOOK_Y+SIZE*6+250,bm3.bmWidth,bm3.bmHeight,&MemDC3,0,0,40,40,SRCCOPY); my_bitmap.DeleteObject(); DrawNextState(LOOK_X,LOOK_Y); for (int i=0;i<MAX_ROW;i++) { for (int j=0;j<MAX_COL;j++) { if (stateMap[i][j]==MAP_STATE_NOT_EMPTY) { BITMAP bm; CDC MemDC; pDC=GetDC(); my_bitmap.LoadBitmap(IDB_SQUARE); my_bitmap.GetObject(sizeof(BITMAP),&bm); MemDC.CreateCompatibleDC(pDC); MemDC.SelectObject(&my_bitmap); pDC->StretchBlt(MAINFRAME_X+j*SIZE,MAINFRAME_Y+i*SIZE,SIZE,SIZE,&MemDC,0,0,SIZE,SIZE,SRCCOPY); my_bitmap.DeleteObject(); } else if (stateMap[i][j]==MAP_FALLING) { BITMAP bm; CDC MemDC; pDC=GetDC(); my_bitmap.LoadBitmap(IDB_SQUARE); my_bitmap.GetObject(sizeof(BITMAP),&bm); MemDC.CreateCompatibleDC(pDC); MemDC.SelectObject(&my_bitmap); pDC->StretchBlt(MAINFRAME_X+j*SIZE,MAINFRAME_Y+i*SIZE,SIZE,SIZE,&MemDC,0,SIZE*ActiveColor,SIZE,SIZE,SRCCOPY); my_bitmap.DeleteObject(); } else { CRect my(MAINFRAME_X+j*SIZE,MAINFRAME_Y+i*SIZE,MAINFRAME_X+j*SIZE+SIZE,MAINFRAME_Y+i*SIZE+SIZE); pDC=GetDC(); pDC->FillRect(my,&my_brush); } } } pDC=GetDC(); CRect my(LOOK_X+50,LOOK_Y+SIZE*6+20,LOOK_X+6*SIZE,LOOK_Y+SIZE*6+100); pDC->FillRect(my,&my_brush); pDC=GetDC(); pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(255,0,0)); CString Cscore; Cscore.Format(_T("%d"),score); pDC->TextOut(LOOK_X+50,LOOK_Y+SIZE*6+20,Cscore,Cscore.GetLength()); CString Cspeed; switch(speed) { case 1: Cspeed.Format(_T("简单")); break; case 2: Cspeed.Format(_T("一般")); break; case 3: Cspeed.Format(_T("困难")); break; } pDC->SetTextColor(RGB(0,255,0)); pDC->TextOut(LOOK_X+50,LOOK_Y+SIZE*6+55,Cspeed,Cspeed.GetLength()); CDialog::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CTetrisDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CTetrisDlg::start() { score=0; InitMap(); Produce_NextState(); NexttoActive(); Produce_NextState(); ActivetoMap(); pDC=GetDC(); pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(255,0,0)); CString Cscore; Cscore.Format(_T("%d"),score); pDC->TextOut(LOOK_X+50,LOOK_Y+SIZE*6+20,Cscore,Cscore.GetLength()); CString Cspeed; switch(speed) { case 1: Cspeed.Format(_T("简单")); break; case 2: Cspeed.Format(_T("一般")); break; case 3: Cspeed.Format(_T("困难")); break; } pDC->SetTextColor(RGB(0,255,0)); pDC->TextOut(LOOK_X+50,LOOK_Y+SIZE*6+55,Cspeed,Cspeed.GetLength()); if (gamestate==OVER) gameover(); } void CTetrisDlg::Produce_NextState() { int Shape=rand()%7; NextColor=rand()%4+1; switch(Shape) //调试中 { case 0: { switch(rand()%4) { case 0: //山条,完成 { NextState[0][0]=2; NextState[0][1]=0; NextState[1][0]=1; NextState[1][1]=1; NextState[2][0]=2; NextState[2][1]=1; NextState[3][0]=2; NextState[3][1]=2; break; } case 1: { NextState[0][0]=2; NextState[0][1]=1; NextState[1][0]=1; NextState[1][1]=2; NextState[2][0]=2; NextState[2][1]=2; NextState[3][0]=3; NextState[3][1]=2; break; } case 2: { NextState[0][0]=1; NextState[0][1]=1; NextState[1][0]=1; NextState[1][1]=2; NextState[2][0]=2; NextState[2][1]=2; NextState[3][0]=1; NextState[3][1]=3; break; } case 3: { NextState[0][0]=0; NextState[0][1]=1; NextState[1][0]=1; NextState[1][1]=1; NextState[2][0]=2; NextState[2][1]=1; NextState[3][0]=1; NextState[3][1]=2; break; } default:break; } break; } case 1: //长条,完成 { switch(rand()%4) { case 0: { NextState[0][0]=0; NextState[0][1]=1; NextState[1][0]=1; NextState[1][1]=1; NextState[2][0]=2; NextState[2][1]=1; NextState[3][0]=3; NextState[3][1]=1; break; } case 1: { NextState[0][0]=2; NextState[0][1]=0; NextState[1][0]=2; NextState[1][1]=1; NextState[2][0]=2; NextState[2][1]=2; NextState[3][0]=2; NextState[3][1]=3; break; } case 2: { NextState[0][0]=0; NextState[0][1]=2; NextState[1][0]=1; NextState[1][1]=2; NextState[2][0]=2; NextState[2][1]=2; NextState[3][0]=3; NextState[3][1]=2; break; } case 3: { NextState[0][0]=1; NextState[0][1]=0; NextState[1][0]=1; NextState[1][1]=1; NextState[2][0]=1; NextState[2][1]=2; NextState[3][0]=1; NextState[3][1]=3; break; } default:break; } break; } case 2: //L,完成 { switch(rand()%4) { case 0: { NextState[0][0]=2; NextState[0][1]=0; NextState[1][0]=2; NextState[1][1]=1; NextState[2][0]=1; NextState[2][1]=2; NextState[3][0]=2; NextState[3][1]=2; break; } case 1: { NextState[0][0]=1; NextState[0][1]=1; NextState[1][0]=1; NextState[1][1]=2; NextState[2][0]=2; NextState[2][1]=2; NextState[3][0]=3; NextState[3][1]=2; break; } case 2: { NextState[0][0]=1; NextState[0][1]=1; NextState[1][0]=2; NextState[1][1]=1; NextState[2][0]=1; NextState[2][1]=2; NextState[3][0]=1; NextState[3][1]=3; break; } case 3: { NextState[0][0]=0; NextState[0][1]=1; NextState[1][0]=1; NextState[1][1]=1; NextState[2][0]=2; NextState[2][1]=1; NextState[3][0]=2; NextState[3][1]=2; break; } default:break; } break; } case 3: //倒L,完成 { switch(rand()%4) { case 0: { NextState[0][0]=1; NextState[0][1]=0; NextState[1][0]=1; NextState[1][1]=1; NextState[2][0]=1; NextState[2][1]=2; NextState[3][0]=2; NextState[3][1]=2; break; } case 1: { NextState[0][0]=1; NextState[0][1]=1; NextState[1][0]=2; NextState[1][1]=1; NextState[2][0]=3; NextState[2][1]=1; NextState[3][0]=1; NextState[3][1]=2; break; } case 2: { NextState[0][0]=1; NextState[0][1]=1; NextState[1][0]=2; NextState[1][1]=1; NextState[2][0]=2; NextState[2][1]=2; NextState[3][0]=2; NextState[3][1]=3; break; } case 3: { NextState[0][0]=2; NextState[0][1]=1; NextState[1][0]=0; NextState[1][1]=2; NextState[2][0]=1; NextState[2][1]=2; NextState[3][0]=2; NextState[3][1]=2; break; } default:break; } break; } case 4: //正Z { switch(rand()%4) { case 0: { NextState[0][0]=1; NextState[0][1]=0; NextState[1][0]=1; NextState[1][1]=1; NextState[2][0]=2; NextState[2][1]=1; NextState[3][0]=2; NextState[3][1]=2; break; } case 1: { NextState[0][0]=2; NextState[0][1]=1; NextState[1][0]=3; NextState[1][1]=1; NextState[2][0]=1; NextState[2][1]=2; NextState[3][0]=2; NextState[3][1]=2; break; } case 2: { NextState[0][0]=1; NextState[0][1]=1; NextState[1][0]=1; NextState[1][1]=2; NextState[2][0]=2; NextState[2][1]=2; NextState[3][0]=2; NextState[3][1]=3; break; } case 3: { NextState[0][0]=1; NextState[0][1]=1; NextState[1][0]=2; NextState[1][1]=1; NextState[2][0]=0; NextState[2][1]=2; NextState[3][0]=1; NextState[3][1]=2; break; } default:break; } break; } case 5: //倒Z { switch(rand()%4) { case 0: { NextState[0][0]=2; NextState[0][1]=0; NextState[1][0]=1; NextState[1][1]=1; NextState[2][0]=2; NextState[2][1]=1; NextState[3][0]=1; NextState[3][1]=2; break; } case 1: { NextState[0][0]=1; NextState[0][1]=1; NextState[1][0]=2; NextState[1][1]=1; NextState[2][0]=2; NextState[2][1]=2; NextState[3][0]=3; NextState[3][1]=2; break; } case 2: { NextState[0][0]=2; NextState[0][1]=1; NextState[1][0]=1; NextState[1][1]=2; NextState[2][0]=2; NextState[2][1]=2; NextState[3][0]=1; NextState[3][1]=3; break; } case 3: { NextState[0][0]=0; NextState[0][1]=1; NextState[1][0]=1; NextState[1][1]=1; NextState[2][0]=1; NextState[2][1]=2; NextState[3][0]=2; NextState[3][1]=2; break; } default:break; } break; } case 6: //方格,完成 { NextState[0][0]=1; NextState[0][1]=1; NextState[1][0]=2; NextState[1][1]=1; NextState[2][0]=1; NextState[2][1]=2; NextState[3][0]=2; NextState[3][1]=2; break; } default:break; } } void CTetrisDlg::NexttoActive() { for (int i=0;i<4;i++) for (int j=0;j<2;j++) ActiveState[i][j]=NextState[i][j]; ActiveColor=NextColor; } void CTetrisDlg::DrawNextState(int x,int y) { BITMAP bm; CDC MemDC; pDC=GetDC(); my_bitmap.LoadBitmap(IDB_SQUARE); my_bitmap.GetObject(sizeof(BITMAP),&bm); MemDC.CreateCompatibleDC(pDC); MemDC.SelectObject(&my_bitmap); for (int i=0;i<4;i++) { if (NextState[i][1]>=0&&NextState[i][0]>=0) pDC->StretchBlt(x+SIZE+NextState[i][1]*SIZE,y+SIZE+NextState[i][0]*SIZE,bm.bmWidth,SIZE,&MemDC,0,SIZE*NextColor,SIZE,SIZE,SRCCOPY); } my_bitmap.DeleteObject(); } void CTetrisDlg::ActivetoMap() { int min_row; int min_col; min_row=ActiveState[0][0]; if (ActiveState[1][0]<min_row) min_row=ActiveState[1][0]; if (ActiveState[2][0]<min_row) min_row=ActiveState[2][0]; if (ActiveState[3][0]<min_row) min_row=ActiveState[3][0]; min_col=ActiveState[0][1]; if (ActiveState[1][1]<min_col) min_col=ActiveState[1][1]; if (ActiveState[2][1]<min_col) min_col=ActiveState[2][1]; if (ActiveState[3][1]<min_col) min_col=ActiveState[3][1]; for (int i=0;i<4;i++) { if (stateMap[ActiveState[i][0]-min_row][MAX_COL/2-1+ActiveState[i][1]-min_col]==MAP_STATE_NOT_EMPTY) { gamestate=OVER; break; } else stateMap[ActiveState[i][0]-min_row][MAX_COL/2-1+ActiveState[i][1]-min_col]=MAP_FALLING; } } void CTetrisDlg::OnLButtonDown(UINT nFlags, CPoint point) { if ((point.x>=LOOK_X+45)&&(point.x<=LOOK_X+85)&&(point.y>=(LOOK_Y+SIZE*6+100))&&(point.y<=(LOOK_Y+SIZE*6+140))&&gamestate>=STOP) { SetTimer(1,600/speed,NULL); start(); gamestate=PLAY; OnPaint(); } if ((point.x>=LOOK_X+45)&&(point.x<=LOOK_X+85)&&(point.y>=(LOOK_Y+SIZE*6+100))&&(point.y<=(LOOK_Y+SIZE*6+140))&&gamestate==PAUSE) { SetTimer(1,600/speed,NULL); gamestate=PLAY; } if ((point.x>=LOOK_X+45)&&(point.x<=LOOK_X+85)&&(point.y>=(LOOK_Y+SIZE*6+175))&&(point.y<=(LOOK_Y+SIZE*6+215))&&gamestate==PLAY) { KillTimer(1); gamestate=PAUSE; } if ((point.x>=LOOK_X+45)&&(point.x<=LOOK_X+85)&&(point.y>=(LOOK_Y+SIZE*6+250))&&(point.y<=(LOOK_Y+SIZE*6+290))&&gamestate<=PAUSE) { KillTimer(1); pDC=GetDC(); CRect my(LOOK_X+50,LOOK_Y+SIZE*6+20,LOOK_X+6*SIZE,LOOK_Y+SIZE*6+100); pDC->FillRect(my,&my_brush); InitMap(); InitNextAndActive(); gamestate=STOP; DrawMapBlack(); DrawLookBlack(); } CDialog::OnLButtonDown(nFlags, point); } void CTetrisDlg::OnTimer(UINT_PTR nIDEvent) { if (nIDEvent==1) { if (IsBottom()==1) { for (int i=0;i<MAX_ROW;i++) { for (int j=0;j<MAX_COL;j++) { if (stateMap[i][j]==MAP_FALLING) { stateMap[i][j]=MAP_STATE_NOT_EMPTY; BITMAP bm; CDC MemDC; pDC=GetDC(); my_bitmap.LoadBitmap(IDB_SQUARE); my_bitmap.GetObject(sizeof(BITMAP),&bm); MemDC.CreateCompatibleDC(pDC); MemDC.SelectObject(&my_bitmap); pDC->StretchBlt(MAINFRAME_X+j*SIZE,MAINFRAME_Y+i*SIZE,SIZE,SIZE,&MemDC,0,0,SIZE,SIZE,SRCCOPY); my_bitmap.DeleteObject(); } } } Sweep(); NexttoActive(); Produce_NextState(); DrawLookBlack(); DrawNextState(LOOK_X,LOOK_Y); ActivetoMap(); if (gamestate==OVER) gameover(); else { BITMAP bm; CDC MemDC; pDC=GetDC(); my_bitmap.LoadBitmap(IDB_SQUARE); my_bitmap.GetObject(sizeof(BITMAP),&bm); MemDC.CreateCompatibleDC(pDC); MemDC.SelectObject(&my_bitmap); for (int i=0;i<4;i++) { for (int j=0;j<MAX_COL;j++) { if (stateMap[i][j]==MAP_FALLING) { pDC->StretchBlt(MAINFRAME_X+j*SIZE,MAINFRAME_Y+i*SIZE,SIZE,SIZE,&MemDC,0,SIZE*ActiveColor,SIZE,SIZE,SRCCOPY); } } } my_bitmap.DeleteObject(); } } else { BITMAP bm; CDC MemDC; pDC=GetDC(); my_bitmap.LoadBitmap(IDB_SQUARE); my_bitmap.GetObject(sizeof(BITMAP),&bm); MemDC.CreateCompatibleDC(pDC); MemDC.SelectObject(&my_bitmap); for (int i=MAX_ROW-1;i>=0;i--) { for (int j=MAX_COL-1;j>=0;j--) { if (stateMap[i][j]==MAP_FALLING) { stateMap[i][j]=MAP_STATE_EMPTY; stateMap[i+1][j]=MAP_FALLING; pDC->StretchBlt(MAINFRAME_X+j*SIZE,MAINFRAME_Y+(i+1)*SIZE,SIZE,SIZE,&MemDC,0,SIZE*ActiveColor,SIZE,SIZE,SRCCOPY); CRect my(MAINFRAME_X+j*SIZE,MAINFRAME_Y+i*SIZE,MAINFRAME_X+j*SIZE+SIZE,MAINFRAME_Y+i*SIZE+SIZE); pDC=GetDC(); pDC->FillRect(my,&my_brush); } } } my_bitmap.DeleteObject(); } } KillTimer(1); SetTimer(1,600/speed,NULL); CDialog::OnTimer(nIDEvent); } int CTetrisDlg::IsLeftLimit() //1代表不能左移 { for (int i=0;i<MAX_ROW;i++) { for (int j=0;j<MAX_COL;j++) { if (stateMap[i][j]==MAP_FALLING) { if ((j==0)||stateMap[i][j-1]==MAP_STATE_NOT_EMPTY) return 1; } } } return 0; } int CTetrisDlg::IsRightLimit() { for (int i=0;i<MAX_ROW;i++) { for (int j=0;j<MAX_COL;j++) { if (stateMap[i][j]==MAP_FALLING) { if ((j==MAX_COL-1)||stateMap[i][j+1]==MAP_STATE_NOT_EMPTY) return 1; } } } return 0; } int CTetrisDlg::IsBottom() { for (int i=0;i<MAX_ROW;i++) { for (int j=0;j<MAX_COL;j++) { if (stateMap[i][j]==MAP_FALLING) { if ((i==MAX_ROW-1)||stateMap[i+1][j]==MAP_STATE_NOT_EMPTY) { return 1; } } } } return 0; } void CTetrisDlg::InitMap() { for (int i=0;i<MAX_ROW;i++) { for (int j=0;j<MAX_COL;j++) { stateMap[i][j]=MAP_STATE_EMPTY; } } } void CTetrisDlg::InitNextAndActive() { for (int i=0;i<4;i++) { for (int j=0;j<2;j++) { NextState[i][j]=-1; ActiveState[i][j]=-1; } } } void CTetrisDlg::DrawMapBlack() { for (int i=0;i<MAX_ROW;i++) { for (int j=0;j<MAX_COL;j++) { CRect my(MAINFRAME_X+j*SIZE,MAINFRAME_Y+i*SIZE,MAINFRAME_X+j*SIZE+SIZE,MAINFRAME_Y+i*SIZE+SIZE); pDC=GetDC(); pDC->FillRect(my,&my_brush); } } } void CTetrisDlg::DrawLookBlack() { CRect my(LOOK_X+1,LOOK_Y+1,LOOK_X+6*SIZE-1,LOOK_Y+6*SIZE-1); pDC=GetDC(); pDC->FillRect(my,&my_brush); } void CTetrisDlg::gameover() { KillTimer(1); CString notice; notice.Format(_T("GAME IS OVER!\nYOUR SCORE IS %d"),score); AfxMessageBox(notice); /////////////////////////////////////////清除记录的数字 pDC=GetDC(); CRect my(LOOK_X+50,LOOK_Y+SIZE*6+20,LOOK_X+6*SIZE,LOOK_Y+SIZE*6+100); pDC->FillRect(my,&my_brush); InitMap(); InitNextAndActive(); gamestate=STOP; DrawMapBlack(); DrawLookBlack(); } void CTetrisDlg::RectLeft() { //PlaySound(_T("sounds\\rotateANDmove.WAV"),NULL,SND_FILENAME|SND_ASYNC); if (IsLeftLimit()==0) { int temp[4][2]; int count=0; for (int i=0;i<MAX_ROW;i++) { for (int j=0;j<MAX_COL;j++) { if (stateMap[i][j]==MAP_FALLING) { stateMap[i][j-1]=MAP_FALLING; stateMap[i][j]=MAP_STATE_EMPTY; temp [count][0]=i; temp [count][1]=j-1; count++; } } } BITMAP bm; CDC MemDC; pDC=GetDC(); my_bitmap.LoadBitmap(IDB_SQUARE); my_bitmap.GetObject(sizeof(BITMAP),&bm); MemDC.CreateCompatibleDC(pDC); MemDC.SelectObject(&my_bitmap); count--; for (;count>=0;count--) pDC->StretchBlt(MAINFRAME_X+temp[count][1]*SIZE,MAINFRAME_Y+temp[count][0]*SIZE,SIZE,SIZE,&MemDC,0,SIZE*ActiveColor,SIZE,SIZE,SRCCOPY); my_bitmap.DeleteObject(); for (int i=0;i<4;i++) { if (stateMap[temp[i][0]][temp[i][1]+1]==MAP_STATE_EMPTY) { CRect my(MAINFRAME_X+(temp[i][1]+1)*SIZE,MAINFRAME_Y+temp[i][0]*SIZE,MAINFRAME_X+SIZE+(temp[i][1]+1)*SIZE,MAINFRAME_Y+SIZE+temp[i][0]*SIZE); pDC->FillRect(my,&my_brush); } } } } void CTetrisDlg::RectRight() { if (IsRightLimit()==0) { int temp[4][2]; int count=0; for (int i=0;i<MAX_ROW;i++) { for (int j=MAX_COL-1;j>=0;j--) { if (stateMap[i][j]==MAP_FALLING) { stateMap[i][j+1]=MAP_FALLING; stateMap[i][j]=MAP_STATE_EMPTY; temp [count][0]=i; temp [count][1]=j+1; count++; } } } BITMAP bm; CDC MemDC; pDC=GetDC(); my_bitmap.LoadBitmap(IDB_SQUARE); my_bitmap.GetObject(sizeof(BITMAP),&bm); MemDC.CreateCompatibleDC(pDC); MemDC.SelectObject(&my_bitmap); count--; for (;count>=0;count--) pDC->StretchBlt(MAINFRAME_X+temp[count][1]*SIZE,MAINFRAME_Y+temp[count][0]*SIZE,SIZE,SIZE,&MemDC,0,SIZE*ActiveColor,SIZE,SIZE,SRCCOPY); my_bitmap.DeleteObject(); for (int i=0;i<4;i++) { if (stateMap[temp[i][0]][temp[i][1]-1]==MAP_STATE_EMPTY) { CRect my(MAINFRAME_X+(temp[i][1]-1)*SIZE,MAINFRAME_Y+temp[i][0]*SIZE,MAINFRAME_X+SIZE+(temp[i][1]-1)*SIZE,MAINFRAME_Y+SIZE+temp[i][0]*SIZE); pDC->FillRect(my,&my_brush); } } } } void CTetrisDlg::RectUp() //逆时针旋转 { bool choice; int temp[4][2]; for (int i=0;i<4;i++) { temp[i][1]=ActiveState[i][0]; temp[i][0]=3-ActiveState[i][1]; } int locate[4][2]; //将旋转前falling状态的方块记住 int count=0; for (int j=0;j<MAX_COL;j++) { for (int i=0;i<MAX_ROW;i++) { if (stateMap[i][j]==MAP_FALLING) { locate[count][0]=i; locate[count][1]=j; ++count; } } } --count; int travel[4][2]; //将旋转后的falling状态的方块记住 for (int i=0;i<4;i++) for (int j=0;j<2;j++) travel[i][j]=locate[i][j]+(temp[i][j]-ActiveState[i][j]); choice=TRUE; for (int i=0;i<4;i++) { if (!(travel[i][0]>=0&&travel[i][0]<MAX_ROW&&travel[i][1]>=0&&travel[i][1]<MAX_COL&&stateMap[travel[i][0]][travel[i][1]]!=MAP_STATE_NOT_EMPTY)) choice=FALSE; } if (choice==TRUE) { pDC=GetDC(); for (int i=0;i<4;i++) { stateMap[locate[i][0]][locate[i][1]]=MAP_STATE_EMPTY; //zuotu CRect my(MAINFRAME_X+locate[i][1]*SIZE,MAINFRAME_Y+locate[i][0]*SIZE,MAINFRAME_X+SIZE+locate[i][1]*SIZE,MAINFRAME_Y+SIZE+locate[i][0]*SIZE); pDC->FillRect(my,&my_brush); } BITMAP bm; CDC MemDC; pDC=GetDC(); my_bitmap.LoadBitmap(IDB_SQUARE); my_bitmap.GetObject(sizeof(BITMAP),&bm); MemDC.CreateCompatibleDC(pDC); MemDC.SelectObject(&my_bitmap); for (int i=0;i<4;i++) { stateMap[travel[i][0]][travel[i][1]]=MAP_FALLING; //zuotu pDC->StretchBlt(MAINFRAME_X+travel[i][1]*SIZE,MAINFRAME_Y+travel[i][0]*SIZE,SIZE,SIZE,&MemDC,0,SIZE*ActiveColor,SIZE,SIZE,SRCCOPY); } my_bitmap.DeleteObject(); for (int i=0;i<4;i++) for (int j=0;j<2;j++) ActiveState[i][j]=temp[i][j]; for (int j=0;j<3;j++) { for (int i=2;i>=j;i--) if (ActiveState[i][1]>ActiveState[i+1][1]||(ActiveState[i][1]==ActiveState[i+1][1]&&ActiveState[i][0]>ActiveState[i+1][0])) { int x=ActiveState[i+1][0]; int y=ActiveState[i+1][1]; ActiveState[i+1][0]=ActiveState[i][0]; ActiveState[i+1][1]=ActiveState[i][1]; ActiveState[i][0]=x; ActiveState[i][1]=y; } } } } void CTetrisDlg::RectDown() { int temp[4][2]; int origin[4][2]; int count=0; for (int i=0;i<MAX_ROW;i++) { for (int j=0;j<MAX_COL;j++) { if (stateMap[i][j]==MAP_FALLING) { origin[count][0]=temp [count][0]=i; origin[count][1]=temp [count][1]=j; count++; } } } if (!IsBottom()) { for (int i=3;i>=0;i--) { stateMap [temp[i][0]+1][temp[i][1]]=MAP_FALLING; stateMap [temp[i][0]][temp[i][1]]=MAP_STATE_EMPTY; temp[i][0]++; } } for (int i=0;i<4;i++) { if (stateMap[origin[i][0]][origin[i][1]]==MAP_STATE_EMPTY) { CRect my(MAINFRAME_X+(origin[i][1])*SIZE,MAINFRAME_Y+origin[i][0]*SIZE,MAINFRAME_X+(origin[i][1])*SIZE+SIZE,MAINFRAME_Y+origin[i][0]*SIZE+SIZE); pDC->FillRect(my,&my_brush); } } BITMAP bm; CDC MemDC; pDC=GetDC(); my_bitmap.LoadBitmap(IDB_SQUARE); my_bitmap.GetObject(sizeof(BITMAP),&bm); MemDC.CreateCompatibleDC(pDC); MemDC.SelectObject(&my_bitmap); for (int i=0;i<4;i++) pDC->StretchBlt(MAINFRAME_X+temp[i][1]*SIZE,MAINFRAME_Y+temp[i][0]*SIZE,SIZE,SIZE,&MemDC,0,SIZE*ActiveColor,SIZE,SIZE,SRCCOPY); my_bitmap.DeleteObject(); } BOOL CTetrisDlg::PreTranslateMessage(MSG* pMsg) { if(pMsg->message==WM_KEYDOWN&&gamestate==PLAY) { switch(pMsg->wParam) { case VK_LEFT: RectLeft(); break; case VK_RIGHT: RectRight(); break; case VK_UP: RectUp(); break; case VK_DOWN: RectDown(); break; } } return CDialog::PreTranslateMessage(pMsg); } void CTetrisDlg::Sweep() { bool m_sweep; int bottom; int judge=0; int ii=0; for (int i=MAX_ROW-1;i>=0;i--) { m_sweep=TRUE; for (int j=0;j<MAX_COL;j++) { if(stateMap[i][j]==MAP_STATE_EMPTY) { m_sweep=FALSE; break; } } if (m_sweep) { if (judge!=1) { bottom=i; judge=1; } for (int k=i;k>0;k--) { for (int l=0;l<MAX_COL;l++) { stateMap[k][l]=stateMap[k-1][l]; } } for (int l=0;l<MAX_COL;l++) stateMap[0][l]=MAP_STATE_EMPTY; i++; ii++; } } if (judge==1) { BITMAP bm; CDC MemDC; pDC=GetDC(); my_bitmap.LoadBitmap(IDB_SQUARE); my_bitmap.GetObject(sizeof(BITMAP),&bm); MemDC.CreateCompatibleDC(pDC); MemDC.SelectObject(&my_bitmap); for (int i=bottom;i>=0;i--) for (int j=0;j<MAX_COL;j++) { if (stateMap[i][j]==MAP_STATE_NOT_EMPTY) pDC->StretchBlt(MAINFRAME_X+j*SIZE,MAINFRAME_Y+i*SIZE,SIZE,SIZE,&MemDC,0,0,SIZE,SIZE,SRCCOPY); else { CRect my(MAINFRAME_X+j*SIZE,MAINFRAME_Y+i*SIZE,MAINFRAME_X+j*SIZE+SIZE,MAINFRAME_Y+i*SIZE+SIZE); pDC->FillRect(my,&my_brush); } } my_bitmap.DeleteObject(); score+=ii*ii*100; CRect my(LOOK_X+50,LOOK_Y+SIZE*6+20,LOOK_X+100,LOOK_Y+SIZE*6+55); pDC=GetDC(); pDC->FillRect(my,&my_brush); pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(255,0,0)); CString Cscore; Cscore.Format(_T("%d"),score); pDC->TextOut(LOOK_X+50,LOOK_Y+SIZE*6+20,Cscore,Cscore.GetLength()); // PlaySound(_T("sounds\\line.WAV"),NULL,SND_FILENAME|SND_ASYNC); } } void CTetrisDlg::On32771() { if (gamestate>=STOP) { SetTimer(1,600/speed,NULL); start(); gamestate=PLAY; OnPaint(); } if (gamestate==PAUSE) { SetTimer(1,600/speed,NULL); gamestate=PLAY; } } void CTetrisDlg::On32772() { if (gamestate==PLAY) { KillTimer(1); gamestate=PAUSE; } } void CTetrisDlg::On32773() { if (gamestate<=PAUSE) { KillTimer(1); pDC=GetDC(); CRect my(LOOK_X+50,LOOK_Y+SIZE*6+20,LOOK_X+6*SIZE,LOOK_Y+SIZE*6+100); pDC->FillRect(my,&my_brush); InitMap(); InitNextAndActive(); gamestate=STOP; DrawMapBlack(); DrawLookBlack(); } } void CTetrisDlg::On32775() { speed=1; pDC=GetDC(); pDC->SetBkMode(TRANSPARENT); CRect my(LOOK_X+50,LOOK_Y+SIZE*6+55,LOOK_X+6*SIZE,LOOK_Y+SIZE*6+100); pDC->FillRect(my,&my_brush); CString Cspeed; Cspeed.Format(_T("简单")); pDC->SetTextColor(RGB(0,255,0)); pDC->TextOut(LOOK_X+50,LOOK_Y+SIZE*6+55,Cspeed,Cspeed.GetLength()); } void CTetrisDlg::On32776() { speed=2; pDC=GetDC(); pDC->SetBkMode(TRANSPARENT); CRect my(LOOK_X+50,LOOK_Y+SIZE*6+55,LOOK_X+6*SIZE,LOOK_Y+SIZE*6+100); pDC->FillRect(my,&my_brush); CString Cspeed; Cspeed.Format(_T("一般")); pDC->SetTextColor(RGB(0,255,0)); pDC->TextOut(LOOK_X+50,LOOK_Y+SIZE*6+55,Cspeed,Cspeed.GetLength()); } void CTetrisDlg::On32777() { speed=3; pDC=GetDC(); pDC->SetBkMode(TRANSPARENT); CRect my(LOOK_X+50,LOOK_Y+SIZE*6+55,LOOK_X+6*SIZE,LOOK_Y+SIZE*6+100); pDC->FillRect(my,&my_brush); CString Cspeed; Cspeed.Format(_T("困难")); pDC->SetTextColor(RGB(0,255,0)); pDC->TextOut(LOOK_X+50,LOOK_Y+SIZE*6+55,Cspeed,Cspeed.GetLength()); } void CTetrisDlg::On32779() { OnCancel(); } void CTetrisDlg::On32778() { AfxMessageBox(_T("通过键盘控制方块移动和旋转\n上:旋转物块\n下:加速下滑\n左、右:左右移动\n当一行全部填满可消去")); } void CTetrisDlg::OnOK() {} // PlaySound(_T("sounds\\question.wav"),NULL,SND_FILENAME|SND_ASYNC);

mfc中用for循环,使用不同的ding'shi'qi

我想在for循环里面根据数据的不同,调用不同的定时器 ``` for(int i=0;i<11;i++) { c=C[i]; m=M[i]; //食人族动 if(m==0 && c==-2 && s1==0 && s2==0) SetTimer(3,1000,NULL); else if(m==0 && c==-2 && s1==0 && s3==0) SetTimer(4,1000,NULL); //食人族回 else if(m==0 && c==1 && s1==1) SetTimer(6,1000,NULL); //传教士动 else if(m==-2 && c==0 && m1==0 && m2==0) SetTimer(1,1000,NULL); else if(m==-2 && c==0 && m1==0 && m3==0) SetTimer(2,1000,NULL); //传教士和食人族回 else if(m==1 && c==1 && s2==1 && m1==1) SetTimer(7,1000,NULL); else {} ```

MFC怎么更新更新圆心坐标,并在坐标中绘制出闪烁效果的圆形?

mfc程序,主线程里创建两个线程接收手机的数据,手机每隔一定时间就发送数据来pc端,在while(true)循环中循环更新数值,并且设置一个定时器SetTimer来实现闪烁效果;在OnTimer()中调用绘制圆形函数: ![图片说明](https://img-ask.csdn.net/upload/201704/21/1492768106_705533.png) 但是所绘制的图形的坐标与实际显示的不一样,我把坐标的结果于static text中显示出来。![图片说明](https://img-ask.csdn.net/upload/201704/21/1492768646_35553.png)

如果在对话框B中要调用对话框A的ontimer函数,该怎么用

![图片说明](https://img-ask.csdn.net/upload/201507/22/1437568821_141097.png) 我在对话框A中有一个仪表控件,其类向导是在A中建立,启动是在ontimer中启动。但是我想在对话框B中的一个按钮去控制A的仪表控件,请问该怎么实现。我在B里也加了一个ontimer,但是仪表控件的ID没有定义,该怎么弄。。。

MFC中视频流内存泄漏问题

void CHLDlg::OnBnClickedOpen() { // TODO: 在此添加控件通知处理程序代码 CFileDialog dlg(TRUE,NULL,NULL,NULL,NULL); pCapture = NULL; if(dlg.DoModal()==IDOK)// { PathName = dlg.GetPathName(); FileName = dlg.GetFileName(); } else { return; } c=(LPCSTR)PathName; pCapture = cvCaptureFromFile(c); video_fps=(int)cvGetCaptureProperty(pCapture,CV_CAP_PROP_FPS); hThread2 = CreateThread(NULL,0,Wavedisplay,(LPVOID)this,0,NULL); } DWORD WINAPI CHLDlg::Wavedisplay(LPVOID lpParam) { CHLDlg *p=(CHLDlg *)lpParam; p->SetTimer(1,(int)(1000/p->video_fps),NULL); return 0; } void CHLDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialogEx::OnTimer(nIDEvent); if(1==nIDEvent) { Frame_Img = cvQueryFrame( pCapture ); } } 程序如上,变量都封装在CHLDlg类里面,析构函数里将它们一一释放,为什么程序运行后内存一直以每秒8kb的速度上升?

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 是什么原因

vs2010里,无法解析的外部符号 protected: void __thiscall

按论坛的教程编程串口,错误提示: yyyzzzDlg.obj : error LNK2001: 无法解析的外部符号 "protected: void __thiscall CyyyzzzDlg::OnStnClickedStatic4(void)" (?OnStnClickedStatic4@CyyyzzzDlg@@IAEXXZ) c:\users\yz980\documents\visual studio 2010\Projects\yyyzzz\Debug\yyyzzz.exe : fatal error LNK1120: 1 个无法解析的外部命令 程序: // yyyzzzDlg.cpp : 实现文件 // #include "stdafx.h" #include "yyyzzz.h" #include "yyyzzzDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CyyyzzzDlg 对话框 CyyyzzzDlg::CyyyzzzDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CyyyzzzDlg::IDD, pParent) , m_EditReceive(_T("")) , m_EditSend(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CyyyzzzDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_EditReceive); DDX_Text(pDX, IDC_EDIT2, m_EditSend); DDX_Control(pDX, IDC_COMBO1, m_comb1); DDX_Control(pDX, IDC_COMBO2, m_cob2); DDX_Control(pDX, IDC_MSCOMM1, m_mscom); } BEGIN_MESSAGE_MAP(CyyyzzzDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON_OPEN, &CyyyzzzDlg::OnBnClickedButtonOpen) ON_BN_CLICKED(IDC_BUTTON_SEND, &CyyyzzzDlg::OnBnClickedButtonSend) ON_BN_CLICKED(IDC_BUTTON_CLEAR, &CyyyzzzDlg::OnBnClickedButtonClear) ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CyyyzzzDlg::OnBnClickedButtonClose) ON_STN_CLICKED(IDC_STATIC4, &CyyyzzzDlg::OnStnClickedStatic4) END_MESSAGE_MAP() // CyyyzzzDlg 消息处理程序 BOOL CyyyzzzDlg::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 < 15; i++) { str.Format(_T("COM %d"), i+1); m_comb1.InsertString(i, str); //将COM 1-15填入comb1 } m_comb1.SetCurSel(0); //预置为COM 1 //波特率选择组合框 CString str1[]={_T("300"),_T("600"),_T("1200"),_T("2400"),_T("4800"),_T("9600"), _T("19200"),_T("38400"),_T("43000"),_T("56000"),_T("57600"),_T("115200")}; for(i = 0; i < 12; i++) { int judge_tf = m_cob2.AddString(str1[i]); if((judge_tf == CB_ERR) || (judge_tf == CB_ERRSPACE)) MessageBox(_T("Build baud error!")); } m_cob2.SetCurSel(5); //预置波特率为9600 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CyyyzzzDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CyyyzzzDlg::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 CyyyzzzDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CyyyzzzDlg::OnBnClickedButtonOpen() { CString str, str1, n; GetDlgItemText(IDC_BUTTON_OPEN, str); //str获得与对话框中的控件相关的标题或文本 CWnd *h1; //窗口类的基类 h1 = GetDlgItem(IDC_BUTTON_OPEN); //指向控件的caption //串口为关闭状态 if(!m_mscom.get_PortOpen()) { m_cob2.GetLBText(m_cob2.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); //comb2选择的波特率,无校验,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 CyyyzzzDlg::OnBnClickedButtonSend() { UpdateData(true); //更新控件数据 m_mscom.put_Output(COleVariant(m_EditSend));//把发送编辑框的数据发送出去 } void CyyyzzzDlg::OnBnClickedButtonClear() { m_EditReceive = _T(""); //给接收编辑框发送空格符 UpdateData(false); //根据数据状态反馈给控件 } void CyyyzzzDlg::OnBnClickedButtonClose() { //若当前串口为打开 if(m_mscom.get_PortOpen()) m_mscom.put_PortOpen(false); //置为关闭 CDialogEx::OnCancel(); } BEGIN_EVENTSINK_MAP(CyyyzzzDlg, CDialogEx) ON_EVENT(CyyyzzzDlg, IDC_MSCOMM1, 1, CyyyzzzDlg::OnCommMscomm1, VTS_NONE) END_EVENTSINK_MAP() void CyyyzzzDlg::OnCommMscomm1() { //接收缓冲区有数据 if(m_mscom.get_CommEvent() == 2) { char str[1024] = {0}; //缓冲区最大为1024 long k; VARIANT InputData = m_mscom.get_Input(); //读入缓冲区 COleSafeArray fs; fs = InputData; //VARIANT型变À量转换为COleSafeArray型变量 for(k = 0; (size_t)k < fs.GetOneDimSize(); k++) { fs.GetElement(&k, str+k); //转换为BYTE型数组 } m_EditReceive += str; //接收到编辑框里面 //SetTimer(1, 10, NULL); //延时10ms UpdateData(false); //将数据在屏幕中对应控件中显示出来。 } }

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Intellij IDEA 实用插件安利

1. 前言从2020 年 JVM 生态报告解读 可以看出Intellij IDEA 目前已经稳坐 Java IDE 头把交椅。而且统计得出付费用户已经超过了八成(国外统计)。IDEA 的...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

魂迁光刻,梦绕芯片,中芯国际终获ASML大型光刻机

据羊城晚报报道,近日中芯国际从荷兰进口的一台大型光刻机,顺利通过深圳出口加工区场站两道闸口进入厂区,中芯国际发表公告称该光刻机并非此前盛传的EUV光刻机,主要用于企业复工复产后的生产线扩容。 我们知道EUV主要用于7nm及以下制程的芯片制造,光刻机作为集成电路制造中最关键的设备,对芯片制作工艺有着决定性的影响,被誉为“超精密制造技术皇冠上的明珠”,根据之前中芯国际的公报,目...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

百度工程师,获利10万,判刑3年!

所有一夜暴富的方法都写在刑法中,但总有人心存侥幸。这些年互联网犯罪高发,一些工程师高技术犯罪更是引发关注。这两天,一个百度运维工程师的案例传遍朋友圈。1...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《Oracle Java SE编程自学与面试指南》最佳学习路线图2020年最新版(进大厂必备)

正确选择比瞎努力更重要!

字节跳动面试官竟然问了我JDBC?

轻松等回家通知

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

实时更新:计算机编程语言排行榜—TIOBE世界编程语言排行榜(2020年6月份最新版)

内容导航: 1、TIOBE排行榜 2、总榜(2020年6月份) 3、本月前三名 3.1、C 3.2、Java 3.3、Python 4、学习路线图 5、参考地址 1、TIOBE排行榜 TIOBE排行榜是根据全世界互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube统计出排名数据。

阿里面试官让我用Zk(Zookeeper)实现分布式锁

他可能没想到,我当场手写出来了

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

​能让德国人放弃现金支付​,也没谁了

在新冠疫情中,德国人越来越多地选择在超市,加油站或其他商店付款时使用非接触式付款方式。德国信贷协会Deutschen Kreditwirtschaft (DK) 的一位发言人告诉德国新...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

2020春招面试了10多家大厂,我把问烂了的数据库事务知识点总结了一下

2020年截止目前,我面试了阿里巴巴、腾讯、美团、拼多多、京东、快手等互联网大厂。我发现数据库事务在面试中出现的次数非常多。

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

在拼多多上班,是一种什么样的体验?我心态崩了呀!

之前有很多读者咨询我:武哥,在拼多多上班是一种什么样的体验?由于一直很忙,没抽出时间来和大家分享。上周末特地花点时间来写了一篇文章,跟大家分享一下拼多多的日常。 1. 倒时差的作息 可能很多小伙伴都听说了,拼多多加班很严重。这怎么说呢?作息上确实和其他公司有点区别,大家知道 996,那么自然也就能理解拼多多的“11 11 6”了。 所以当很多小伙伴早上出门时,他们是这样的: 我们是这样的: 当...

立即提问
相关内容推荐