MFC:主界面调用子界面,子界面OnOk异常

我在主界面的OnInitDialog里面写了一个:
mainDlg.cpp:
BOOL CMainDlg::OnInitDialog()
{
........
if (m_LogonDlg.DoModal() != IDOK)
{
exit(1);
}

        //成功后做其他操作
}

LogonDlg.cpp:

当我点击登陆界面的ok的时候,触发了OnBnClickedOk,发送了一个请求登陆的消息给OnSendMessage去处理,OnSendMessage处理完毕后,在OnSendMessage中调用了CDialogEx::OnOK();然后回到主界面的OnInitDialog,就中断了。

  请教大家,如何修改啊。。。。

    ps:我的OnSendMessage如下:

首先定义了消息ON_MESSAGE(WM_USER_LOGON, OnSendMessage),
其中‘WM_USER_LOGON’是我定义的消息 ,指定收到这个消息用OnSendMessage处理。

 LRESULT CLogonDlg::OnSendMessage(WPARAM wParam, LPARAM lParam)
{
    BOOL32 bQuit = false;

    switch(wParam)
    {
        case EVENT_LOGON_ACK:
            {
                //其他显示登陆成功的操作省略
                bQuit = true;
                break;
            }
        default:
            break;
        }

    if(bQuit)
    {
        CDialogEx::OnOK();
        MSG_DEBUG(TEXT("登陆成功OnOk()"));
    }
    return 0;   
}
mfc

2个回答

你的逻辑有问题,窗体初始化都被弹出的对话框中断了,如何能处理后续的消息。
建议你将 if (m_LogonDlg.DoModal() != IDOK) 的使用,放在 WM_CREATE 消息中,或者在主窗体中设置一个短时间的Timer,当 Timer 到时再调用 。

dhwlhuaqin
二师兄89 谢谢,前两天问题解决了,忘记回复,不是我怀疑的原因,而是我忘记释放资源的原因,谢谢~~~
接近 5 年之前 回复
91program
91program 回复二师兄89: 出现中断,具体的内容呢?是不是你怀疑的原因,我不确定。但有一种可能是你的对话框的处理中存在异常,如越界,只是在最后窗体消毁时才表现出来。
接近 5 年之前 回复
dhwlhuaqin
二师兄89 hi,我设置了定时器,在定时器中调Logon函数打开Logon对话框,但还是会不定时的出现中断,是因为我在OnSendMessage中调用了CDialogEx::OnOk()的原因吗?
接近 5 年之前 回复
dhwlhuaqin
二师兄89 啊,好的,谢谢你,我试试~~
接近 5 年之前 回复
91program
91program 但是你可以考虑先隐藏主界面,或者使用线程来发送消息,线程可以先等主窗体创建完成。
接近 5 年之前 回复
91program
91program 回复二师兄89: 不行!
接近 5 年之前 回复
dhwlhuaqin
二师兄89 哦。。。。我原来是想要在主界面弹出之前就先执行LogonDlg的消息,等到Logon执行完毕,才让主界面出现。这样的话,用WM_CREATE或者Timer可以吗?
接近 5 年之前 回复

一般是OnInitDialog中创建一个定时器,然后定时器触发后,显示子对话框。这样就不会影响主对话框

dhwlhuaqin
二师兄89 我现在改了,设置了定时器,在定时器中调Logon函数打开Logon对话框,但还是会偶尔的出现中断,中断的地方就是我LogonDlg调用OnOk之后,是因为我在OnSendMessage中调用了CDialogEx::OnOk()的原因吗?
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何实现CDialogEx::OnOK()中的传数据功能但又不关闭对话框?
请问大家,我有一个对话框类Display,其中一个函数给一个和变量赋了值,用了 CDialogEx::OnOK()把值传给View类中的DoModal,并在View类中有一个变 量来接收Display对话框中的变量的值。但是这样的话,每次Display对话框点了按钮 都会消失,如果不加CDialogEx::OnOK()又不能把值传到View中,请问该怎么实现 不关闭对话框,但是在View类中可以在每一次点击Display对话框按钮的时候获得值呢? 以下是代码: ``` void Display::OnBnClickeddsift() { // TODO: Add your control notification handler code here UpdateData(); if (m_intDisp == 0){ m_intSift = 1; } CDialogEx::OnOK(); } //Display对话框中按钮的代码 void CSIMSView::OnDisplay() { // TODO: Add your command handler code here Display disp; if (disp.DoModal()==IDOK){ m_IntDISP = disp.m_intDisp; if (m_IntDISP == 3 || m_IntDISP == 4) m_DSMAJOR = disp.m_dsMajor; Invalidate(); } } //View类中Display对话框的代码,要求每次 //点击Display中的按钮都能把值传到View中 ``` 求各位大神解答!感激不尽!
VC++6.0 MFC创建新的dialog报错
在创建完成新的class(默认)后给主界面加入头文件后编译报错: error C2143: syntax error : missing ';' before 'constant' fatal error C1004: unexpected end of file found 部分具体代码: 主界面: 主界面头: #include "stdafx.h" #include "Happygame.h" #include "HappygameDlg.h" #include "DLG.h" ……按钮部分代码: void CHappygameDlg::OnOK() { // TODO: Add extra validation here DLG dlg; dlg.DoModal(); CDialog::OnOK(); } 新dialog部分代码: #if !defined(AFX_DLG_H__E092C23E_0190_4E76_B7EA_34E78B1110E0__INCLUDED_) #define AFX_DLG_H__E092C23E_0190_4E76_B7EA_34E78B1110E0__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // DLG.h : header file // ///////////////////////////////////////////////////////////////////////////// // DLG dialog class DLG : public CDialog (此处是报错行!!!!!) { // Construction public: DLG(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(DLG) enum { IDD = IDD_DIALOG1 }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(DLG) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(DLG) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_DLG_H__E092C23E_0190_4E76_B7EA_34E78B1110E0__INCLUDED_) 其中新的dialog叫DLG 报错:error C2143: syntax error : missing ';' before 'constant' fatal error C1004: unexpected end of file found 小白大二做MFC求解谢谢大佬
VS2010 MFC登录对话框打开数据库失败后意外出现主界面的问题
用VS2010 MFC建立了一个主界面为对话框的函数,要求需要登录对话框,且通过读取数据库来校验用户,代码如下: BOOL CManagementDlg::OnInitDialog()//主对话框初始函数 { CDialogEx::OnInitDialog(); _CLogInDlg dlgLogin; if(dlgLogin.DoModal() != IDOK)//登录对话框 { OnOK(); return TRUE; }_ // 将“关于...”菜单项添加到系统菜单中。 // 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); // 设置小图标 ShowWindow(SW_MAXIMIZE); // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } 登录对话框响应登录按钮的代码如下: void CLogInDlg::OnClickedButtonLogin() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); if(m_strLogUser.GetLength() == 0) { MessageBox(_T("请输入用户名!")); return; } CManagementDlg *pdlgMain = (CManagementDlg *)theApp.m_pMainWnd; CString strDataSource; CString strInitCatalog; CString strUser; CString strPassword; CString strTableName = _T(TABLE_NAME_STAFF); CAdoDBControl myAdoControl;//对象声明 CString strShow; UINT iGet = 0; iGet = CAdoDBControl::GetDbCfgFromIniFile(); if(iGet & INI_USERID_MISSING) { strShow.Format(_T("配置文件%s中未找到数据库用户名"), _T(INI_FILE_NAME)); MessageBox(strShow); return; } if(iGet & INI_PWD_MISSING) { strShow.Format(_T("配置文件%s中未找到数据库用户密码"), _T(INI_FILE_NAME)); MessageBox(strShow); return; } if(iGet & INI_DATASOURCE_MISSING) { strShow.Format(_T("配置文件%s中未找到数据库主机名"), _T(INI_FILE_NAME)); MessageBox(strShow); return; } if(iGet & INI_INITCATALOG_MISSING) { strShow.Format(_T("配置文件%s中未找到数据库名"), _T(INI_FILE_NAME)); MessageBox(strShow); return; } if(iGet & INI_FILE_MISSING) { strShow.Format(_T("配置文件%s未找到"), _T(INI_FILE_NAME)); MessageBox(strShow); return; } CAdoDBControl::GetDbCfg(strUser, strPassword, strDataSource, strInitCatalog); CString strSql; strSql.Format(_T("Provider=SQLOLEDB.1;Data Source=%s;User ID=%s;Password=%s;Initial Catalog=%s;Persist Security Info=FALSE"), strDataSource, strUser, strPassword, strInitCatalog); _int iResult = myAdoControl.Open(strSql.AllocSysString(), adModeUnknown); if(ADO_DB_SUCCESSFUL != iResult) { return; }_ strSql.Format(_T("SELECT * FROM %s WHERE 用户名='%s'"), strTableName, m_strLogUser); vector<vector<_variant_t>> vSelectResult = myAdoControl.Select(strSql.AllocSysString()); myAdoControl.Close(); int iFindNumber = vSelectResult.size(); if(iFindNumber < 1) { CString strMsg; strMsg.Format(_T("用户%s不存在"), m_strLogUser); MessageBox(strMsg); return; } _variant_t vUser = vSelectResult[0][STAFF_USERNAME_COLUMN]; _variant_t vPwd = vSelectResult[0][STAFF_PASSWORD_COLUMN]; CString strUserFromSql = (LPCTSTR)_bstr_t(vUser); CString strPwdFromSql = (LPCTSTR)_bstr_t(vPwd); if((!strUserFromSql.CompareNoCase(m_strLogUser)) && (strPwdFromSql == m_strLogPwd)) { pdlgMain->m_stCurUser.m_strUserName = strUserFromSql; _variant_t vElement = vSelectResult[0][STAFF_NO_COLUMN]; pdlgMain->m_stCurUser.m_strStaffNo = (LPCTSTR)_bstr_t(vElement); vElement = vSelectResult[0][STAFF_REALNAME_COLUMN]; pdlgMain->m_stCurUser.m_strRealName = (LPCTSTR)_bstr_t(vElement); vElement = vSelectResult[0][STAFF_AUTHORITY_COLUMN]; pdlgMain->m_stCurUser.m_strAuthority = (LPCTSTR)_bstr_t(vElement); OnOK(); } else { MessageBox(_T("密码错误")); } } 为了使按回车键和点击登录按钮的功能一样,添加如下代码: BOOL CLogInDlg::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if(WM_KEYDOWN == pMsg->message) { if(VK_RETURN == pMsg->wParam) { OnClickedButtonLogin(); return FALSE; } } return CDialogEx::PreTranslateMessage(pMsg); } 打开数据库的代码如下: int CAdoDBControl::Open(BSTR ConnectionString, long Options ) { if( FAILED( m_pConnection.CreateInstance(__uuidof(Connection)) ) ) //初始化Connection指针 { return ADO_DB_CREATE_FAIL; } try { m_pConnection->Open(ConnectionString, "", "", Options); } catch(_com_error e) { AfxMessageBox(e.Description()); return ADO_DB_OPEN_FAIL; } return ADO_DB_SUCCESSFUL; } 运行函数时,故意将数据库配置写错,在填写完用户名和密码后点击登录按钮,那么约10秒以后,程序报错“[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒绝访问。”,点击确定后,返回登录对话框。重复多次操作,依然如此。程序此时是正常的。 但是,如果在填写完用户名和密码后,用回车方式登录,此时依然报错“[DBNETLIB][ConnectionOpen (Connect()).]SQL Server不存在或拒绝访问。”,但是在点击 确定后,登录对话框会消失,并且弹出主界面,且主界面不响应鼠标点击任何按钮,且主界面不是我想要的主界面(比如正常登录的主界面是最大化的,而此时出现 的主界面不是最大化的),此问题100%复现。 请问各位达人,这是怎么回事?有何解决办法?
MFC对话框程序通过按钮弹出子对话框,如何初始化子窗口
要实现的功能就是点击按钮,用dlg.DoModal()弹出子对话框,在子对话框中有CListControl控件,要对CListControl控件进行数据的初始化,但是无法对其进行初始化。子对话类中已经添加了OnInitDialog()方法,感觉没有执行这个方法,求解。 点击按钮事件代码: void CMFCPaikeDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CDialogEx::OnOK(); CDialog dlg(IDD_DIALOGCLASS); dlg.DoModal(); } 子窗口类中的OnInitDialog()代码: BOOL ClassEidt::OnInitDialog() { CDialogEx::OnInitDialog(); classCListctr.InsertColumn(0, _T("id"), LVCFMT_CENTER); classCListctr.InsertColumn(0, _T("name"), LVCFMT_CENTER); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE }
新手做了个MFC程序程序,调试界面能出来了,但是按按钮没反应,弄了几天了。
新手做了个MFC程序程序,出错提示全改后运行,点击按钮没反应,只有界面显示,能帮我看看吗,弄了好几天了。 // MFCApplication2Dlg.cpp : 实现文件 // #include "stdafx.h" #include "MFCApplication2.h" #include "MFCApplication2Dlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 HHOOK hHook; CTypedPtrList<CPtrList,EVENTMSG*> EventMsgList; 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() // CMFCApplication2Dlg 对话框 CMFCApplication2Dlg::CMFCApplication2Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(CMFCApplication2Dlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMFCApplication2Dlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CMFCApplication2Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDOK, &CMFCApplication2Dlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON3, &CMFCApplication2Dlg::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON2, &CMFCApplication2Dlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplication2Dlg::OnBnClickedButton1) END_MESSAGE_MAP() // CMFCApplication2Dlg 消息处理程序 BOOL CMFCApplication2Dlg::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: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CMFCApplication2Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CMFCApplication2Dlg::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 CMFCApplication2Dlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CMFCApplication2Dlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CDialogEx::OnOK(); } void CMFCApplication2Dlg::OnBnClickedButton3() { hHook =SetWindowsHookEx( WH_JOURNALRECORD, (HOOKPROC)JournalRecordProc, AfxGetApp()->m_hInstance, 0 ); // TODO: 在此添加控件通知处理程序代码 } void CMFCApplication2Dlg::OnBnClickedButton2() { UnhookWindowsHookEx(hHook); // TODO: 在此添加控件通知处理程序代码 } void CMFCApplication2Dlg::OnBnClickedButton1() { hHook=SetWindowsHookEx( WH_JOURNALPLAYBACK, (HOOKPROC)JounralPlaybackProc, AfxGetApp()->m_hInstance, 0 ); // TODO: 在此添加控件通知处理程序代码 } //LRESULT CMFCApplication2Dlg::JournalRecordPro(void) //{ // return LRESULT CALLBACK(); //} LRESULT CALLBACK CMFCApplication2Dlg::JournalRecordProc(int nCode,WPARAM wparam,LPARAM lparam) { if (nCode<0) return CallNextHookEx(NULL,nCode,wparam,lparam); EVENTMSG*pmsg=(EVENTMSG*)lparam; switch(nCode) { case HC_ACTION: {EVENTMSG * pEventMsg =new EVENTMSG; memcpy(pEventMsg,pmsg,sizeof(EVENTMSG)); EventMsgList.AddTail(pEventMsg);} break; case HC_SYSMODALOFF: break; case HC_SYSMODALON: break; } } LRESULT CALLBACK CMFCApplication2Dlg::JounralPlaybackProc(int nCode,WPARAM wparam,LPARAM lparam) { static unsigned i=0; static BOOL bFlag =TRUE; EVENTMSG*pMsg; POSITION pos; DWORD PreTime,NowTime; switch (nCode) { case HC_SKIP: bFlag =TRUE; i++; break; case HC_GETNEXT: if(i>=EventMsgList.GetCount()-2) { i=0; UnhookWindowsHookEx(hHook); AfxMessageBox(_T("回放完毕!")); } pos=EventMsgList.FindIndex(i); pMsg=EventMsgList.GetAt(pos); memcpy((LPEVENTMSG)lparam,pMsg,sizeof(EVENTMSG)); if((i)!=0 && bFlag==TRUE) { bFlag=FALSE; NowTime=pMsg->time; pos=EventMsgList.FindIndex(i-1); pMsg=EventMsgList.GetAt(pos); PreTime=pMsg->time; return NowTime-PreTime; } else return 0; break; default: return CallNextHookEx(NULL,nCode,wparam,lparam); } return 0; } // MFCApplication2Dlg.h : 头文件 // #pragma once // CMFCApplication2Dlg 对话框 class CMFCApplication2Dlg : public CDialogEx { // 构造 public: CMFCApplication2Dlg(CWnd* pParent = NULL); // 标准构造函数 // 对话框数据 enum { IDD = IDD_MFCAPPLICATION2_DIALOG }; 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() public: afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedButton3(); afx_msg void OnBnClickedButton2(); afx_msg void OnBnClickedButton1(); static LRESULT CALLBACK JournalRecordProc(int nCode,WPARAM wparam,LPARAM lparam); static LRESULT CALLBACK JounralPlaybackProc(int nCode,WPARAM wparam,LPARAM lparam); 这两句是我在.h上加的用来申明全局函数。 };
MFC中使用Update(FALSE)后变量不更新显示新的值
各位大佬麻烦帮忙看一下,放了一个static text的控件,在对话框中添加了下拉框的消息的处理函数,想要调用UpdateData(FALSE)函数将变量m_DriveType的值更新到界面上,但是运行后什么都没有。。 ``` // File1Dlg.cpp : 实现文件 // #include "stdafx.h" #include "File1.h" #include "File1Dlg.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() // CFile1Dlg 对话框 CFile1Dlg::CFile1Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(CFile1Dlg::IDD, pParent) , m_DriverType(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CFile1Dlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBO1, m_drive); DDX_Text(pDX, IDC_STATIC1, m_DriverType); } BEGIN_MESSAGE_MAP(CFile1Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_OK, &CFile1Dlg::OnBnClickedOk) ON_CBN_SELCHANGE(IDC_COMBO1, &CFile1Dlg::OnCbnSelchangeComboDrive) END_MESSAGE_MAP() // CFile1Dlg 消息处理程序 BOOL CFile1Dlg::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: 在此添加额外的初始化代码 //第一次调用 size_t alldrive=::GetLogicalDriveStrings(0,NULL); _TCHAR *driverstr; driverstr=new _TCHAR[alldrive+sizeof(_T(""))]; //printf("AllDrivesize is: %d\r\n",alldrive); //第二次调用 size_t twosize=GetLogicalDriveStrings(alldrive,driverstr); CString DriveLetter; for(int i=0;i<alldrive/4;i++) { DriveLetter=driverstr+i*4; m_drive.InsertString(i,DriveLetter.GetBuffer()); } m_drive.SetCurSel(0); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CFile1Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CFile1Dlg::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 CFile1Dlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CFile1Dlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CString strDrive; m_drive.GetWindowTextW(strDrive); this->MessageBox(strDrive.GetBuffer()); OnOK(); } void CFile1Dlg::OnCbnSelchangeComboDrive() { // TODO: 在此添加控件通知处理程序代码 CString m_DriveType; CString strDrive; int now=m_drive.GetCurSel(); m_drive.GetLBText(now,strDrive); // not // m_Drive.GetWindowText(strDrive); int retCode = ::GetDriveType(strDrive); switch (retCode) { case DRIVE_UNKNOWN: m_DriveType = "驱动器类型:未知"; break; case DRIVE_NO_ROOT_DIR: m_DriveType = "类型:驱动器根路径错误"; break; case DRIVE_REMOVABLE:// 2 m_DriveType = "类型:可移动磁盘驱动器"; break; case DRIVE_FIXED:// 3 m_DriveType = "类型:固定磁盘驱动器"; break; case DRIVE_REMOTE: m_DriveType = "类型:网络磁盘驱动器"; break; case DRIVE_CDROM: m_DriveType = "类型:CD-ROM"; break; case DRIVE_RAMDISK: m_DriveType = "类型:RAM"; break; default: m_DriveType = "类型:未知"; break; } UpdateData(FALSE); } ``` ![图片说明](https://img-ask.csdn.net/upload/201909/25/1569421005_977279.png) ![图片说明](https://img-ask.csdn.net/upload/201909/25/1569421041_644529.png) ps.变量类型是value还是control会影响UpdateData(FALSE)的调用吗??
MFC点击button确定按钮如何打开新的窗体?
A窗体界面有个确认选择按钮,点击后,它自动打开B窗体,并关闭A窗体了; 双击A窗体的确认button查看响应函数,内部并没有新建B窗体对象,这是怎么打开B窗体的呢? 代码如下: void selDir::OnOK() { // TODO: Add extra validation here UpdateData(TRUE); int order_idx = m_sel_order.GetCurSel();//返回值为列表框索引 m_sel_order.GetWindowText(str_order);//获取订单号 m_sel_wknum.GetWindowText(str_wknum);//获取工作人员编号 CDialog::OnOK(); } 求大神解答
MFC,后制作的登录对话框先启动,但原先的对话框不能运行计时器
各位大大好,第一次提问,请多关照! 问题叙述如下: 1.我先做了一个界面,启动按钮里会运行OnTimer来处理SOCKET发过来的数据并传回。 程序已经可以运行了,即使不连接服务器也可以本地运行。 2.因为需要做一个简单的不连接数据库的登录界面,且希望登录界面先显示,就修改了InitInstance,把初始指针 改成了登录界面的。然后密码正确后,利用OnOK关掉登录界面,“登录”按钮里调用DoModal创建原先的界面。 3.但是这样一来弹出的原先界面就只能对编辑框设置些字符串显示而无法另计时器计算显示了。 跪求各位大大给小弟讲解下!自己确实没啥赏金,只能再拜表诚意!
2010VC++我的控件TAB顺序问题
顺序已经调好,为什么我的聚焦在第一个控件后回车会直接跳到第三个顺序的控件上呢,还有跳到OK的控件上时为什么不再聚焦下面的控件?代码仅有一行,如下: void CTestDlg::OnOk() { // TODO: 在此添加控件通知处理程序代码 GetFocus()->GetWindow(GW_HWNDNEXT)->SetFocus(); // CDialog::OnOK(); }
MFC单击按钮弹出模态对话框的相关问题
主对话框本身是一个模态对话框,有一个按钮。 从资源视图插入dialog,然后在类向导中添加类rrrDlg1 在主对话框的按钮点击事件中添加如下代码: ``` void CrrrDlg::OnBnClickedOk(){ //TODO: 在此添加控件通知处理程序代码 rrrDlg1 dlg1; INT_PTR n1Response = dlg1.DoModal(); if (n1Response == IDOK){ } else if (n1Response == IDCANCEL){ } CDialogEx::OnOK(); } ``` 其中DoModal()有波浪线提示错误:类rrrDlg1没有成员DoModal 问题来了:怎样建立的对话框是模态对话框,怎样又是非模态的?在整个建立的流程中并没有相关选项,只在实例化之后告诉我没有DoModal这个方法,太郁闷了!!
关于MFC中文件读取的问题
我把存有密码的dat文件放在"\\FlashDisk\\Program Files\\Etonepay\\manager_pw.dat"这个路径下,是原密码,想要读取里面的数据与界面上输入的原密码数据做比较,可是读取的一直不对。现在里面存的数据是12,我单步运行读取的不对,不知道是哪的问题。 void SysAdmin::OnOK() { UpdateData(); CFile SourceFile;//数据文件 CString SourceData;//定义一临时变量保存一条记录 CString appendstr; CString strtmp; CString tmp; CFileException ex; CString SourceData1; SourceFile.Open(_T("\\FlashDisk\\Program\\Files\\Etonepay\\manager_pw.dat") ,CFile::modeRead | CFile::shareDenyWrite, &ex); CArchive ar(&SourceFile,CArchive::load); while(NULL!=ar.ReadString(SourceData))//循环读取文件,直到文件结束 { strtmp.Format(_T("%s"),m_oldpw_text); if(SourceData==strtmp) { tmp.Format(_T("%s"),appendstr); strtmp.Format(_T("%s"),m_newpw_text); //appendstr.Format(_T("%s%s\n"),tmp,strtmp); AfxMessageBox(_T("修改成功!")); }
新手MFC求教,我用MFC做了一个用HOOK的电脑用录制回放器但是出完错后运行法相用不了。
能帮我看看哪有问题吗 // MFCApplication2Dlg.cpp : 实现文件 // #include "stdafx.h" #include "MFCApplication2.h" #include "MFCApplication2Dlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 HHOOK hHook; CTypedPtrList<CPtrList,EVENTMSG*> EventMsgList; 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() // CMFCApplication2Dlg 对话框 CMFCApplication2Dlg::CMFCApplication2Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(CMFCApplication2Dlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMFCApplication2Dlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CMFCApplication2Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDOK, &CMFCApplication2Dlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON3, &CMFCApplication2Dlg::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON2, &CMFCApplication2Dlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplication2Dlg::OnBnClickedButton1) END_MESSAGE_MAP() // CMFCApplication2Dlg 消息处理程序 BOOL CMFCApplication2Dlg::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: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CMFCApplication2Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CMFCApplication2Dlg::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 CMFCApplication2Dlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CMFCApplication2Dlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CDialogEx::OnOK(); } void CMFCApplication2Dlg::OnBnClickedButton3() { hHook =SetWindowsHookEx( WH_JOURNALRECORD, (HOOKPROC)JournalRecordProc, AfxGetApp()->m_hInstance, 0 ); // TODO: 在此添加控件通知处理程序代码 } void CMFCApplication2Dlg::OnBnClickedButton2() { UnhookWindowsHookEx(hHook); // TODO: 在此添加控件通知处理程序代码 } void CMFCApplication2Dlg::OnBnClickedButton1() { hHook=SetWindowsHookEx( WH_JOURNALPLAYBACK, (HOOKPROC)JounralPlaybackProc, AfxGetApp()->m_hInstance, 0 ); // TODO: 在此添加控件通知处理程序代码 } //LRESULT CMFCApplication2Dlg::JournalRecordPro(void) //{ // return LRESULT CALLBACK(); //} LRESULT CALLBACK CMFCApplication2Dlg::JournalRecordProc(int nCode,WPARAM wparam,LPARAM lparam) { if (nCode<0) return CallNextHookEx(NULL,nCode,wparam,lparam); EVENTMSG*pmsg=(EVENTMSG*)lparam; switch(nCode) { case HC_ACTION: {EVENTMSG * pEventMsg =new EVENTMSG; memcpy(pEventMsg,pmsg,sizeof(EVENTMSG)); EventMsgList.AddTail(pEventMsg);} break; case HC_SYSMODALOFF: break; case HC_SYSMODALON: break; } } LRESULT CALLBACK CMFCApplication2Dlg::JounralPlaybackProc(int nCode,WPARAM wparam,LPARAM lparam) { static unsigned i=0; static BOOL bFlag =TRUE; EVENTMSG*pMsg; POSITION pos; DWORD PreTime,NowTime; switch (nCode) { case HC_SKIP: bFlag =TRUE; i++; break; case HC_GETNEXT: if(i>=EventMsgList.GetCount()-2) { i=0; UnhookWindowsHookEx(hHook); AfxMessageBox(_T("回放完毕!")); } pos=EventMsgList.FindIndex(i); pMsg=EventMsgList.GetAt(pos); memcpy((LPEVENTMSG)lparam,pMsg,sizeof(EVENTMSG)); if((i)!=0 && bFlag==TRUE) { bFlag=FALSE; NowTime=pMsg->time; pos=EventMsgList.FindIndex(i-1); pMsg=EventMsgList.GetAt(pos); PreTime=pMsg->time; return NowTime-PreTime; } else return 0; break; default: return CallNextHookEx(NULL,nCode,wparam,lparam); } return 0; } 调试后框里出来的东西: “MFCApplication2.exe”(Win32): 已加载“E:\PJB\MFCApplication2\Debug\MFCApplication2.exe”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\mfc110ud.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcr110d.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\user32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.9600.17784_none_a9f497a901334c74\comctl32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\oleaut32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\gdi32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcrt.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\combase.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\rpcrt4.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\sspicli.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\cryptbase.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\sechost.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\bcryptprimitives.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\imm32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\msctf.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\advapi32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\shlwapi.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\ole32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\shell32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\uxtheme.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\dwmapi.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel.appcore.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\SHCore.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Users\Saber\AppData\Roaming\TaobaoProtect\TaobaoProtectSE.dll”。无法查找或打开 PDB 文件。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\psapi.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\crypt32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\version.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\sfc.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\msasn1.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\sfc_os.dll”。已加载符号。 程序“[10192] MFCApplication2.exe”已退出,返回值为 2 (0x2)。
急!MFC强制重绘问题 ::SendMessage()
``` void CEmailSettingDlg::OnBnClickedOk() { UpdateData(1); CEmailManagementDlg *pdlg = (CEmailManagementDlg*)AfxGetApp()->GetMainWnd(); if (m_str_BackGround == "蒲公英") m_str_BackGround = "1"; if (m_str_BackGround == "书") m_str_BackGround = "2"; if (m_str_BackGround == "天空") m_str_BackGround = "3"; if (m_str_BackGround == "秦时明月") m_str_BackGround = "4"; //刷新显示新的背景 CString temp = pdlg->m_backGround; //暂存原背景图数据 pdlg->m_backGround = m_str_BackGround; ** ::SendMessage(pdlg->m_hWnd, WM_PAINT, 0, 0);** //UpdateWindow(); pdlg->m_backGround = temp; //如果设置没变,则不需要打开数据库(出于效率考虑) if (!(m_str_AutoReply == pdlg->m_auto_reply && m_str_BackGround == pdlg->m_backGround)) { CString temp; temp.Format("update user_psw_tab set auto_reply = '%s', back_ground = %d where user_name = '%s'", m_str_AutoReply, atoi(m_str_BackGround), pdlg->m_str_UserName); TRACE(temp); pdlg->m_db.ExecuteSQL(temp); AfxMessageBox("更新成功!"); } CDialogEx::OnOK(); } ``` ``` void CEmailManagementDlg::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 { CPaintDC dc(this); // 用于绘制的设备上下文 CRect rc; GetClientRect(&rc); CDC dcMem; dcMem.CreateCompatibleDC(&dc); CBitmap bmpBackground; switch (atoi(m_backGround)) { case 1: bmpBackground.LoadBitmap(IDB_BITMAP_FLOWER); break; case 2: bmpBackground.LoadBitmap(IDB_BITMAP_BOOK); break; case 3: bmpBackground.LoadBitmap(IDB_BITMAP_SKY); break; case 4: bmpBackground.LoadBitmap(IDB_BITMAP_QIN); break; } BITMAP bitmap; bmpBackground.GetBitmap(&bitmap); CBitmap* pbmpPri = dcMem.SelectObject(&bmpBackground); dc.StretchBlt(0, 0, rc.Width(), rc.Height(), &dcMem, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY); //CDialogEx::OnPaint(); //这句需要去掉 } } ``` 我想实现实时切换 CEmailManagementDlg的背景 CEmailSettingDlg设置背景数据,点击确定后去刷新CEmailManagementDlg的背景 但是调试发现尽管SendMessage消息以后进入了CEmailManagementDlg的OnPaint函数,但是语句执行完以后并没有改变背景,请问我哪里错了吗。。
vc++ 6.0开始编译链接都通过,修改后就不通过了,但是改回之后链接还是不通过?
void CInputDlg::OnOK() { UpdateData(); m_strName.TrimLeft(); m_strNo.TrimLeft(); if(m_strName.IsEmpty()||m_strNo.IsEmpty()) { MessageBox("姓名或者学号不能为空"); } else { data.OpenFile(); data.InsertStudent(m_strName.GetBuffer(0),m_strNo.GetBuffer(0),m_fScore1,m_fScore2,m_fScore3); data.WriteFile(); } // TODO: Add extra validation here CDialog::OnOK(); } 一开始编译能通过,但是后来加上了data.OpenFile(); data.WriteFile();就出现链接错误,改回来后还是出现连接错误 StdAfx.obj : error LNK2005: "class StudentData data" (?data@@3VStudentData@@A) already defined in InputDlg.obj Debug/StudentCtrl.exe : fatal error LNK1169: one or more multiply defined symbols found
用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分钟程序就报错了,好郁闷呀!
非模态对话框出错,非模态对话框
我先说一下我创建非模态对话框的思路, 资源视图中创建一个对话框并创建类Coption,在菜单中加入一个按键coption, 在CChildView类中创建一个Coption类对象指针,在CChildView类中用Coption类对象指针创建非模态对话框,并判断Coption类对象指针是否为null,如果不为null,则不创建,将焦点给非模态对话框就行,创建的时候,将CChildView类作为Coption类构造参数传入Coption类中,当非模态对话框点击取消时,销毁非模态对话框,并发送消息给CChildView类,让他将Coption类对象指针赋值为null,否则非模态对话框只能出来一次,但是现在发送消息会报错, 下面贴出四个文件代码: ``` Coption.h: #pragma once // Coption 对话框 class Coption : public CDialogEx { DECLARE_DYNAMIC(Coption) public: Coption(CWnd* pParent = nullptr); // 标准构造函数 Coption(CView* pview); // 标准构造函数 virtual ~Coption(); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_DIALOG1 }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedCancel(); virtual void PostNcDestroy(); private: CView* p_view; public: afx_msg void OnBnClickedOk(); }; ``` Coption.cpp: // Coption.cpp: 实现文件 // #include "stdafx.h" #include "MFCApplication5.h" #include "Coption.h" #include "afxdialogex.h" // Coption 对话框 IMPLEMENT_DYNAMIC(Coption, CDialogEx) Coption::Coption(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_DIALOG1, pParent) { } Coption::Coption(CView* pview /*=nullptr*/) { p_view = pview; } Coption::~Coption() { } void Coption::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(Coption, CDialogEx) ON_BN_CLICKED(IDCANCEL, &Coption::OnBnClickedCancel) ON_BN_CLICKED(IDOK, &Coption::OnBnClickedOk) END_MESSAGE_MAP() // Coption 消息处理程序 void Coption::OnBnClickedCancel() { // TODO: 在此添加控件通知处理程序代码 //CDialogEx::OnCancel(); DestroyWindow(); } void Coption::PostNcDestroy() { // TODO: 在此添加专用代码和/或调用基类 CDialogEx::PostNcDestroy(); p_view->SendMessage(WM_GOODBYE, 0,0); //屏蔽这一行就不会报错 } void Coption::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 //CDialogEx::OnOK(); DestroyWindow(); } ``` CChildView.cpp: // ChildView.cpp: CChildView 类的实现 // #include "stdafx.h" #include "MFCApplication5.h" #include "ChildView.h" #include "resource.h" // 主符号 #ifdef _DEBUG #define new DEBUG_NEW #endif // CChildView CChildView::CChildView() { m_option = NULL; } CChildView::~CChildView() { } BEGIN_MESSAGE_MAP(CChildView, CWnd) ON_WM_PAINT() ON_COMMAND(ID_32771, &CChildView::On32771) ON_MESSAGE(WM_GOODBYE,ON_GOODBYE) END_MESSAGE_MAP() LRESULT CChildView::ON_GOODBYE(WPARAM wparam, LPARAM lparam) { /*delete m_option;*/ m_option = NULL; return 0; } // CChildView 消息处理程序 BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs) { if (!CWnd::PreCreateWindow(cs)) return FALSE; cs.dwExStyle |= WS_EX_CLIENTEDGE; cs.style &= ~WS_BORDER; cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, ::LoadCursor(nullptr, IDC_ARROW), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), nullptr); return TRUE; } void CChildView::OnPaint() { CPaintDC dc(this); // 用于绘制的设备上下文 // TODO: 在此处添加消息处理程序代码 // 不要为绘制消息而调用 CWnd::OnPaint() } void CChildView::On32771() { if (NULL==m_option) { /*SetFocus(); MessageBox(_T("m_option不为空"));*/ m_option = new Coption; m_option->Create(IDD_DIALOG1, this); MessageBox(_T("m_option为空")); } m_option->ShowWindow(SW_SHOW); // TODO: 在此添加命令处理程序代码 } ``` CChildView.h: // ChildView.h: CChildView 类的接口 // #pragma once #include"Coption.h" // CChildView 窗口 class CChildView : public CWnd { // 构造 public: CChildView(); // 特性 public: // 操作 public: // 重写 protected: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); // 实现 public: virtual ~CChildView(); // 生成的消息映射函数 protected: afx_msg void OnPaint(); DECLARE_MESSAGE_MAP() protected: Coption* m_option; public: afx_msg void On32771(); afx_msg LRESULT ON_GOODBYE(WPARAM wparam, LPARAM lparam); }; ``` 报错如下: ![图片说明](https://img-ask.csdn.net/upload/201908/15/1565872965_493989.png) 如果实在没人愿意回答,讲一下编写非模态对话框心得也行
非模态对话框创建的时候出错
我先说一下我创建非模态对话框的思路, 资源视图中创建一个对话框并创建类Coption,在菜单中加入一个按键coption, 在CChildView类中创建一个Coption类对象指针,在CChildView类中用Coption类对象指针创建非模态对话框,并判断Coption类对象指针是否为null,如果不为null,则不创建,将焦点给非模态对话框就行,创建的时候,将CChildView类作为Coption类构造参数传入Coption类中,当非模态对话框点击取消时,销毁非模态对话框,并发送消息给CChildView类,让他将Coption类对象指针赋值为null,否则非模态对话框只能出来一次, 但是现在发送消息会报错, 下面贴出四个文件代码,忘大佬们解答 CChildView.h: ``` #pragma once #include"Coption.h" // CChildView 窗口 class CChildView : public CWnd { // 构造 public: CChildView(); // 特性 public: // 操作 public: // 重写 protected: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); // 实现 public: virtual ~CChildView(); // 生成的消息映射函数 protected: afx_msg void OnPaint(); DECLARE_MESSAGE_MAP() protected: Coption* m_option; public: afx_msg void On32771(); //为菜单option按钮 afx_msg LRESULT ON_GOODBYE(WPARAM wparam, LPARAM lparam); }; ``` ChildView.cpp: ``` #include "stdafx.h" #include "MFCApplication5.h" #include "ChildView.h" #include "resource.h" // 主符号 #ifdef _DEBUG #define new DEBUG_NEW #endif // CChildView CChildView::CChildView() { m_option = NULL; } CChildView::~CChildView() { } BEGIN_MESSAGE_MAP(CChildView, CWnd) ON_WM_PAINT() ON_COMMAND(ID_32771, &CChildView::On32771) ON_MESSAGE(WM_GOODBYE,ON_GOODBYE) END_MESSAGE_MAP() LRESULT CChildView::ON_GOODBYE(WPARAM wparam, LPARAM lparam) { delete m_option; m_option = NULL; return 0; } // CChildView 消息处理程序 BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs) { if (!CWnd::PreCreateWindow(cs)) return FALSE; cs.dwExStyle |= WS_EX_CLIENTEDGE; cs.style &= ~WS_BORDER; cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, ::LoadCursor(nullptr, IDC_ARROW), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), nullptr); return TRUE; } void CChildView::OnPaint() { CPaintDC dc(this); // 用于绘制的设备上下文 // TODO: 在此处添加消息处理程序代码 // 不要为绘制消息而调用 CWnd::OnPaint() } void CChildView::On32771() { if (NULL!=m_option) { SetFocus(); MessageBox(_T("m_option不为空")); } else { m_option = new Coption; m_option->Create(IDD_DIALOG1,this); m_option->ShowWindow(SW_SHOW); MessageBox(_T("m_option为空")); } // TODO: 在此添加命令处理程序代码 } ``` Coption.h: ``` class Coption : public CDialogEx { DECLARE_DYNAMIC(Coption) public: Coption(CWnd* pParent = nullptr); // 标准构造函数 Coption(CView* pview); // 标准构造函数 virtual ~Coption(); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_DIALOG1 }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedCancel(); virtual void PostNcDestroy(); private: CView* p_view; public: afx_msg void OnBnClickedOk(); }; ``` Coption.cpp: ``` #include "stdafx.h" #include "MFCApplication5.h" #include "Coption.h" #include "afxdialogex.h" // Coption 对话框 IMPLEMENT_DYNAMIC(Coption, CDialogEx) Coption::Coption(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_DIALOG1, pParent) { } Coption::Coption(CView* pview /*=nullptr*/) { p_view = pview; } Coption::~Coption() { } void Coption::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(Coption, CDialogEx) ON_BN_CLICKED(IDCANCEL, &Coption::OnBnClickedCancel) ON_BN_CLICKED(IDOK, &Coption::OnBnClickedOk) END_MESSAGE_MAP() // Coption 消息处理程序 void Coption::OnBnClickedCancel() { // TODO: 在此添加控件通知处理程序代码 //CDialogEx::OnCancel(); DestroyWindow(); } void Coption::PostNcDestroy() { // TODO: 在此添加专用代码和/或调用基类 CDialogEx::PostNcDestroy(); p_view->SendMessage(WM_GOODBYE, 0,0); //屏蔽这一行就不会报错 } void Coption::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 //CDialogEx::OnOK(); DestroyWindow(); } ```
我的MFC程序执行到pRs->Update();这句时catch到错误 build WHERE ->insert_fields failded?
void CStuInfoModify::OnOK() { _RecordsetPtr pRs = NULL; _ConnectionPtr pConnection = NULL; _bstr_t strCnn(SQLCONSTR); try { UpdateData(TRUE); // 打开连接 pConnection.CreateInstance(__uuidof(Connection)); pConnection->Open(strCnn,"","",NULL); pRs.CreateInstance(__uuidof(Recordset)); // 根据学号查询学生信息 CString SqlStr; SqlStr.Format("select 备注 from xs where 学号 = '%s'",m_StuXH); pRs->Open(_variant_t(SqlStr),_variant_t((IDispatch *) pConnection,FALSE),adOpenDynamic,adLockOptimistic,adCmdText); if(!pRs->adoEOF) { pRs->PutCollect("备注", _variant_t(m_StuBZ)); pRs->Update(); // 更新到数据库 } pRs->Close(); pConnection->Close(); m_StuADO.Refresh(); m_StuDG.ReBind(); m_StuDG.Refresh(); AfxMessageBox("更新成功!"); } catch(_com_error &e) { // 捕捉异常 _bstr_t bstrSource(e.Source()); _bstr_t bstrDescription(e.Description()); // 格式化错误提示字符串 CString sError; sError.Format("Source:%sDescription:%s",(LPCSTR)bstrSource,(LPCSTR)bstrDescription); // 弹出错误对话框 AfxMessageBox(sError); } //CDialog::OnOK(); }
mfc弹出非模态对话框出错
mfc弹出非模态对话框,然后重载非模态对画框的onok函数,在其中destroywindow,并重载postncdestroy中delete非模态对话框类指针,这样没有问题,为什么在destroywindow前加弹出一个Afx对话框,运行时会出现问题
130 个相见恨晚的超实用网站,一次性分享出来
相见恨晚的超实用网站 持续更新中。。。
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
win10系统安装教程(U盘PE+UEFI安装)
一、准备工作 u盘,电脑一台,win10原版镜像(msdn官网) 二、下载wepe工具箱 极力推荐微pe(微pe官方下载) 下载64位的win10 pe,使用工具箱制作启动U盘打开软件, 选择安装到U盘(按照操作无需更改) 三、重启进入pe系统 1、关机后,将U盘插入电脑 2、按下电源后,按住F12进入启动项选择(技嘉主板是F12) 选择需要启...
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Java描述设计模式(19):模板方法模式
本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景 通常一款互联网应用的开发流程如下:业务需求,规划产品,程序开发,测试交付。现在基于模板方法模式进行该过程描述。 public class C01_InScene { public static void main(String[] args) { DevelopApp developApp = n...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n...
第三个java程序(表白小卡片)
前言: &nbsp;向女神表白啦,作为一个程序员,当然也有爱情啦。只不过,虽然前面两个程序都只是学习了基础的语法结构和向量哈希表。这里涉及的是Swing,awt图形用户界面和一点文件输入输出流的知识。 &nbsp; 表白代码如下: 另附:里面的音乐和图片可以放在一个自己创建的包里面,也可以放在src里面,或者使用绝对路径。至于布局,我自己的使用的是简单的排班,简单的继承。后面的程序会慢慢实现。 ...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
化繁为简 - 腾讯计费高一致TDXA的实践之路
导语:腾讯计费是孵化于支撑腾讯内部业务千亿级营收的互联网计费平台,在如此庞大的业务体量下,腾讯计费要支撑业务的快速增长,同时还要保证每笔交易不错账。采用最终一致性或离线补...
Linux网络服务-----实验---PXE和Kickstart的无人值守装机
目录 一.PXE的原理 二.kickstart的原理 三.PXE与kickstart的结合使用自动装机 一.PXE的原理 PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由支持通过网络启动操作系统,再启动过程中,终端要求服务器分配IP地址...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
A*搜索算法概述
编者按:本文作者奇舞团前端开发工程师魏川凯。A*搜索算法(A-star search algorithm)是一种常见且应用广泛的图搜索和寻径算法。A*搜索算法是通过使用启...
程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
从顶级黑客到上市公司老板
一看标题,很多老读者就知道我在写什么了。今天Ucloud成功上市,季昕华成为我所熟悉的朋友里又双叒叕一个成功上市的案例。我们认识大概是十五年多吧,如果没记错,第一次见面应该是2004年,...
蓝桥杯知识点汇总:基础知识和常用算法
文章目录基础语法部分:算法竞赛常用API:算法部分数据结构部分 此系列包含蓝桥杯绝大部分所考察的知识点,以及真题题解~ 基础语法部分: 备战蓝桥杯java(一):一般输入输出 和 快速输入输(BufferedReader&amp;BufferedWrite) 备战蓝桥杯java(二):java编程规范和常用数据类型 备战蓝桥杯java(三):常用功能符以及循环结构和分支结构 备战蓝桥杯java(四...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
强烈推荐10本程序员在家读的书
很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终将会...
Linux自学篇——linux命令英文全称及解释
man: Manual 意思是手册,可以用这个命令查询其他命令的用法。 pwd:Print working directory 意思是密码。 su:Swith user 切换用户,切换到root用户 cd:Change directory 切换目录 ls:List files 列出目录下的文件 ps:Process Status 进程状态 mkdir:Make directory ...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
疫情数据接口api
返回json示例 { "errcode":0,//0标识接口正常 "data":{ "date":"2020-01-30 07:47:23",//实时更新时间 "diagnosed":7736,//确诊人数 "suspect":12167,//疑是病例人数 "death":170,//死亡人数 "cur...
智力题(程序员面试经典)
NO.1  有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。 解法 有时候,严格的限制条件有可能反倒是解题的线索。在这个问题中,限制条件是天平只能用一次。 因为天平只能用一次,我们也得以知道一个有趣的事实:一次必须同时称很多药丸,其实更准确地说,是必须从19瓶拿出药丸进行称重。否则,如果跳过两瓶或更多瓶药...
相关热词 c# 为空 判断 委托 c#记事本颜色 c# 系统默认声音 js中调用c#方法参数 c#引入dll文件报错 c#根据名称实例化 c#从邮件服务器获取邮件 c# 保存文件夹 c#代码打包引用 c# 压缩效率
立即提问