精华内容
下载资源
问答
  • MFC常用函数整理

    2012-10-23 10:36:46
    函数可通过控件ID来获取控件文本并把它保存在CString 的一个对象中或char型数组中,因为数组会有最大字符数,因此第一个重载函数还有 nMaxCount 参数。   CWnd::SetDlgItemText void ...

    CButton::Create

    BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

    动态创建一个按纽

    LPCTSTR lpszCaption  按纽文字

    DWORD dwStyle 按纽样式,常选用BS_DEFPUSHBUTTON表示下压式按纽,

    控件本身也是窗口,因此还具有窗口类型,如让控件创建后即可见,可给控件WS_VISIBLE,

    通常还具有WS_CHILD属性

    const RECT& rect    矩形区域,可以是CRect类型,也可是Rect结构体。可直接由CRect构造,如CRect (0,0,10,10).。

    CWnd* pParentWnd 为父窗口指针,若消息响应在父类中,可直接用this指针。UINT nID 可随便给(只能为数字?)。

    注意用此函数时需判断该控件是否已与该控件窗口已关联,因为若关联两次会出现错误,动态创建控件好象只能创建一个控件。

     

    CWnd::GetDlgItem 

    CWnd* GetDlgItem( int nID ) const;

    用此函数可通过控件ID获得指定控件的指针,一般此函数用于一个对话框类中。

     

     CWnd::GetWindowText

    int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const;

    void GetWindowText( CString& rString ) const;

    此函数可获得指定控件上的文本信息并把它保存在一个CString对象或char型数组中。

    第一个重载函数中nMaxCount指能够复制到BUFFER中的最大字符数

     

    CWnd::SetWindowText

    void SetWindowText( LPCTSTR lpszString );

    该函数用于设置窗体尤其是控件文本。(该函数是否可向窗口输出字符串?)

     

    atoi

    int atoi( const char *string );

    该函数可将字符串转换为整形值并返回。

    类似的函数如下:

    long atol( const char *string );

    double atof( const char *string );

    如果字符不能转化为相应的类型则返回0

    itoa

    char *_itoa( int value, char *string, int radix );

    第一个参数是要转换的整形值,第二个参数是目标字符串的指针,第三个参数代表进制。

    (回值干什么用的?)

     

    CWnd::GetDlgItemText 

    int GetDlgItemText( int nID, LPTSTR lpStr, int nMaxCount ) const;

    int GetDlgItemText( int nID, CString& rString ) const;

    该函数可通过控件ID来获取控件文本并把它保存在CString 的一个对象中或char型数组中,因为数组会有最大字符数,因此第一个重载函数还有nMaxCount参数。

     

    CWnd::SetDlgItemText

    void SetDlgItemText( int nID, LPCTSTR lpszString );

    将字符串中字符放回nID所指定的控件中

     

    CWnd::GetDlgItemInt 

    UINT GetDlgItemInt( int nID, BOOL* lpTrans = NULL, BOOL bSigned = TRUE ) const;

    该函数作用是接收指定控件文本并作为整形数返回

    nID为控件ID,第二个参数若为NULL则若字符无法转换为数字时会接受一个零而不会报错,第三个参数若为TRUE则检查文本开始处的有无符号,即数据做有符号数处理,若为FALSE则作无符号数处理。

     

    CWnd::SetDlgItemInt

    void SetDlgItemInt( int nID, UINT nValue, BOOL bSigned = TRUE );

    该函数是将整形值直接传入ID标识的控件作为控件文本。

    nID为控件ID,第二个参数为要传入的整形值,第三个参数为真则为有符号值,反之则为无符号值

     

    CWnd::ShowWindow

    BOOL ShowWindow( int nCmdShow );

    常用nCmdShow的参数值

    • SW_HIDE   隐藏窗口或控件
    • SW_SHOW   正常显示窗口或控件

    一般由窗口类或窗口类的派生类产生一个窗口后都需要调用该函数将窗口显示出来,不过有时不需要显式调用而有时必须显示调用

     

    CWnd::PostMessage

    BOOL PostMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );

    CWnd::SendMessage

    LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );

    可用于各窗体或控件之间的消息通信。

    如常用的获取窗体或控件的文本消息WM_GETTEXT,用WM_GETTEXT时参数:

    WPARAM为要copy的最大字符数,LPARAM为存储的buffer区,若为char型数组则需要强制类型转换

    设置窗体文本的消息WM_SETTEXT,参数含义:

    wParam 未被使用,设为0 ,lParam 为要设置的文本的存储单元地址;

    设置编辑框文本复选的消息为EM_SETSEL

    EM_SETSEL

    wParam = (WPARAM) (INT) nStart;    // starting position

    lParam = (LPARAM) (INT) nEnd;      // ending position

    wParam为复选起始位置,lParam为复选结束位置。注意,若最后鼠标焦点不在编辑框上则无法显示文本复选,因此一般最后会加上一个SetFocus函数。

    获取编辑框文本复选的消息为 EM_GETSEL
    wParam = (WPARAM) (LPDWORD) lpdwStart; // receives starting position
    lParam = (LPARAM) (LPDWORD) lpdwEnd;   // receives ending position

    wParam为一个DWORD类型数的指针,用于保存起始位置,lParam也为一个DWORD类型数的指针,用于保存结束位置。

     

    CWnd::SendDlgItemMessage

    LRESULT SendDlgItemMessage( int nID, UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );

    本函数用于对话框各控件的消息通信,获取指定ID的消息,该函数不是被类的对象调用的。

     

    CDC::TextOut

    virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount );

    BOOL TextOut( int x, int y, const CString& str );

    该函数可用于向指定窗口输出一串文字,输出成功则返回非0;

    输出文本颜色不是由画笔控制的,而是由CD中的成员函数

    CDC::SetTextColor

    virtual COLORREF SetTextColor( COLORREF crColor );

    指定。背景颜色由

    CDC::SetBkColor 

    virtual COLORREF SetBkColor( COLORREF crColor );

    指定。

     

    SDK下该函数为:

    BOOL TextOut(
      HDC hdc          // handle to device context
      int nXStart      // x-coordinate of starting position
      int nYStart      // y-coordinate of starting position
      LPCTSTR lpString // pointer to string
     int cbString       // number of characters in string
    );
     

    CWnd::SetFocus

    CWnd* SetFocus( );

    该函数为设置鼠标焦点的函数,返回的是原先具有焦点的窗体指针。

     

    CWnd::GetWindowRect

    void GetWindowRect( LPRECT lpRect ) const;

    该函数获得窗口矩形区域信息并将信息保存在CRect或Rect结构体中

     

    CWnd::SetWindowPos

    BOOL SetWindowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags );

    该函数可用于设置窗口的大小以及窗口的层叠次序。

    第二,三个参数为窗口的左上角的x与y值,第四个参数为窗口的宽度,第五个参数为窗口的高度,最后一个参数为设置显示属性,如若要窗口显示位置不改变,nFlags可设置为 SWP_NOMOVE   ,此时将忽略x与y值,

     

    SetWindowLong

    LONG SetWindowLong(

      HWND hWnd      // handle of window

      int nIndex     // offset of value to set

      LONG dwNewLong   // new value

    );

     

    API函数,可用于改变指定窗口的一个属性,当nIndex取GWL_WNDPROC,

    可用于替换一个窗口过程。

     

    GetNextWindow

    HWND GetNextWindow(
      HWND hWnd // handle to current window
      UINT wCmd   // direction flag
    );
    SDK函数,可获取当前控件的下一个控件的句柄,其中第一个参数为当前控件的句柄,第二个参数可取GW_HWNDNEXT或GW_HWNDPREV,若取GW_HWNDNEXT则获取下一个控件句柄,若取GW_HWNDPREV则获取当前句柄的前一个控件句柄
     
    GetWindow
    HWND GetWindow(
      HWND hWnd // handle to original window
      UINT uCmd   // relationship flag
    );
    该函数功能与GetNextWindow相似,但功能比GetNextWindow更强大,其中的nCmd选项可选GW_HWNDNEXT与GW_HWNDPREV外还可选择:

    GW_CHILD表示获取当前控件子控件句柄,GW_HWNDFIRST与 GW_HWNDLASTfenbie分别表示获取第一个与最后一个控件句柄。

     

    GetNextDlgTabItem

    HWND GetNextDlgTabItem(
      HWND hDlg      // handle of dialog box
      HWND hCtl      // handle of known control
      BOOL bPrevious   // direction flag
    );
     

    CWnd::GetNextWindow 

    CWnd* GetNextWindow( UINT nFlag = GW_HWNDNEXT ) const;

    此函数返回指向当前控件的下一个控件的指针。

     

    CWnd::ModifyStyle

    BOOL ModifyStyle(DWORD dwRemove,DWORD dwAdd, UINT nFlags = 0 );

    此函数用于替换指定窗口的样式,第一个参数DWORD dwRemove,为要去掉的窗口样式,第二个参数DWORD dwAdd为将要添加的窗口样式,第三个参数为0则窗口不重绘,非0则窗口重绘。

     

    LPTSTR MAKEINTRESOURCE(
      WORD wInteger  // integer to convert
    );

    该函数可以将一个整形值转换为一个资源类型的值,一般用于将一个资源的ID标示转换为资源的名字的字符串

     

    封装所有字符串操作的类CString类,常用方法:

    CString::Format:格式化输出一个字符串用法与c语言中Printf()相类似

    CString::operator +=:可以连接一个字符串

     
    DWORD GetCurrentDirectory(
      DWORD nBufferLength // size, in characters, of directory buffer
      LPTSTR lpBuffer       // pointer to buffer for current directory
    );

    该函数为SDK平台下的函数,作用是获取当前目录下所有文件名,并将当前目录下所有文件的文件名放入lpBuffer指向的字符数组中。

    展开全文
  • C++/MFC-钩子函数

    千次阅读 2017-06-11 15:36:48
    即不管在哪按下键盘上的键,都会通过钩子调用DLL中的函数。 1.1、先在DLL里写好回调函数 LRESULT CALLBACK KeyboardProc(   int code, // 此值为1和3时 我们自己处理 小于零时一般调用CallNextHookEx来...

    一、全局键盘勾子


    即不管在哪按下键盘上的键,都会通过钩子调用DLL中的函数。


    1.1、先在DLL里写好回调函数

    LRESULT CALLBACK KeyboardProc(
     

    int code,      // 此值为1和3时 我们自己处理 小于零时一般调用CallNextHookEx来处理
      

    WPARAM wParam, // 按下的键值
      

    LPARAM lParam  // 按键相关信息,第31位为1时表示释放按键)

    ) 

    1.2、DLL中用SetWindowsHookEx安装键盘勾子

    HHOOK SetWindowsHookEx(

    int idHook,         // 待安装的勾子类型

    HOOKPROC lpfn,    // 回调函数地址必须在DLL里边

    HINSTANCE hMod,   // 应用程序中包含回调函数lpfn的DLL句柄

    DWORD dwThreadId   //要安装勾子的线程,为0则是全局勾子,向所有线程注入

    )

    1.3、一般的mfc文件

    在初始化函数中,加载库等。

    1.4、示例代码

    MFCDLL:

    CDll_Dlg myDlg;
    LRESULT CALLBACK KeyboardProc(
    	int code,      // 此值为1和3时 我们自己处理 小于零时一般调用CallNextHookEx来处理
    	WPARAM wParam, // 按下的键值
    	LPARAM lParam   // 按键相关信息,第31位为1时表示释放按键)
    )
    {
    	// TODO: 在此添加控件通知处理程序代码
    	//这里我们显示窗口
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    	static bool flag = true;
    	if (wParam == VK_HOME) //home键
    	{
    		if (((1 << 31)&lParam) == (1 << 31))//0按下等于<<31释放,避免多次按下时的一闪而过
    		{
    			if (myDlg.m_hWnd == 0)
    			{
    				myDlg.Create(IDD_DIALOG1);
    			}
    			myDlg.ShowWindow(flag);
    			flag = !flag;
    		}
    	}
    
    	return 1;
    }
    
    HHOOK SetHook(void)
    {
    	HHOOK hk = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, LoadLibrary(_T("MFCDLL.dll")), 0);
    	return hk;
    }


    别忘了在.def文件中加上函数名。

    MFC工程中:


    OnInitDialog函数中:为了加载库


    其余某一函数:为了注入钩子



    二、线程钩子函数


    即仅针对某一应用程序


    步骤同1.1、1.2、1.3


    1.4

    #define HookCaption  L"计算器"

    HHOOK SetHook(void)
    {
    	//AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
    	DWORD pid,tid;
    	HWND h=FindWindow(NULL,HookCaption);
    	TRACE("h=%d\n",h);
    	if (h>0)
    	{
    		tid=GetWindowThreadProcessId(h,&pid);
    		TRACE("tid=%d\n",tid);
    		HMODULE hmod=GetModuleHandle(L"keyDll.dll");
    		TRACE("hmod=%d\n",hmod);
    		//hhk=SetWindowsHookEx(WH_KEYBOARD,mykeyproc,hmod,0);全局HOOK
    		hhk=SetWindowsHookEx(WH_KEYBOARD,mykeyproc,hmod,tid);//hook tid线程
    	}
    	return hhk;
    }
    












    展开全文
  • 在利用MFC读取本地视频文件进行播放时,在开始播放后无法进行暂停等操作,因此需要考虑采用线程的操作来实现该暂停功能。 采用的事AfxBeginThread()函数,调用了this指阵作为线程函数的传递参数。 这里简单的采用...

    在利用MFC读取本地视频文件进行播放时,在开始播放后无法进行暂停等操作,因此需要考虑采用线程的操作来实现该暂停功能。
    采用的是AfxBeginThread()函数,调用了this指阵作为线程函数的传递参数。参考了【MFC之AfxbeginThread 线程 创建、挂起、释放、结束、退出
    这里简单的采用累加数的控制来模拟视频的播放,累加器增加一个数字,相当于视频新读取一帧。点击start按钮后,在“示例编辑框”中显示一个自动递增数,点击pause后,该按钮变为“continue”,同时暂停线程,数字停止增加,再点击step后,每点击一次step,数字增加一,再点击“continue”则又开始递增,点击stop则停止递增,此时点击step按钮也不会再增加了。
    累加器
    在.h中添加线程相关定义,需要定义为static

    int cnt = 0;//计数器
    int terminal_flag = 0;//stop标志
    CWinThread *m_pThread;//线程名
    static UINT jisuan(LPVOID pParam);//线程函数
    

    添加的线程函数如下,利用this指针指向计数器cnt,显示到edit control中,并增加cnt的值:

    UINT CMFC_thread_2Dlg::jisuan(LPVOID lpParam)
    {
    	CMFC_thread_2Dlg *pDlg = (CMFC_thread_2Dlg *)lpParam;
    	int i;
    	CString str;
    	while (TRUE) {
    		i = pDlg->cnt;
    		str.Format(_T("%d"), i);
    		pDlg->cnt++;
    		::SetWindowText(::GetDlgItem(pDlg->m_hWnd, IDC_EDIT1), str);
    		Sleep(1000);
    	}
    	return 0;
    
    }
    

    该线程函数的调用采用AfxBeginThread()函数,参数主要是线程函数名jisuan和传递参数this:

    m_pThread = AfxBeginThread(
    		jisuan,
    		this,
    		THREAD_PRIORITY_NORMAL,
    		0,
    		0,
    		NULL
    		);
    

    完整的.h和.cpp文件如下所示:
    .h文件:

    
    // MFC_thread_2Dlg.h : 头文件
    //
    
    #pragma once
    #include "afxwin.h"
    
    #define WM_UPDATE_STATIC (WM_USER + 100)  //added
    // CMFC_thread_2Dlg 对话框
    class CMFC_thread_2Dlg : public CDialogEx
    {
    // 构造
    public:
    	CMFC_thread_2Dlg(CWnd* pParent = NULL);	// 标准构造函数
    
    // 对话框数据
    	enum { IDD = IDD_MFC_THREAD_2_DIALOG };
    
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持
    	//static UINT jisuan(LPVOID lpParam);
    
    // 实现
    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 OnBnClickedStart();
    	afx_msg void OnBnClickedDialog();
    	CEdit m_text;//
    	int cnt = 0;//计数器
    	int terminal_flag = 0;//stop标志
    	CWinThread *m_pThread;//线程名
    	static UINT jisuan(LPVOID pParam);//线程函数
    	
    	afx_msg void OnBnClickedStop();
    	afx_msg void OnBnClickedStep();
    };
    

    cpp文件:

    
    // MFC_thread_2Dlg.cpp : 实现文件
    //
    
    #include "stdafx.h"
    #include "MFC_thread_2.h"
    #include "MFC_thread_2Dlg.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()
    
    
    // CMFC_thread_2Dlg 对话框
    
    
    
    CMFC_thread_2Dlg::CMFC_thread_2Dlg(CWnd* pParent /*=NULL*/)
    	: CDialogEx(CMFC_thread_2Dlg::IDD, pParent)
    {
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CMFC_thread_2Dlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialogEx::DoDataExchange(pDX);
    	DDX_Control(pDX, IDC_EDIT1, m_text);
    }
    
    BEGIN_MESSAGE_MAP(CMFC_thread_2Dlg, CDialogEx)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	ON_BN_CLICKED(IDC_START, &CMFC_thread_2Dlg::OnBnClickedStart)
    	ON_BN_CLICKED(IDC_DIALOG, &CMFC_thread_2Dlg::OnBnClickedDialog)
    	ON_BN_CLICKED(IDC_STOP, &CMFC_thread_2Dlg::OnBnClickedStop)
    	ON_BN_CLICKED(IDC_STEP, &CMFC_thread_2Dlg::OnBnClickedStep)
    END_MESSAGE_MAP()
    
    
    // CMFC_thread_2Dlg 消息处理程序
    
    BOOL CMFC_thread_2Dlg::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:  在此添加额外的初始化代码
    	//m_pThread = AfxBeginThread((AFX_THREADPROC)jisuan, this);
    	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }
    
    void CMFC_thread_2Dlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    	{
    		CAboutDlg dlgAbout;
    		dlgAbout.DoModal();
    	}
    	else
    	{
    		CDialogEx::OnSysCommand(nID, lParam);
    	}
    }
    
    // 如果向对话框添加最小化按钮,则需要下面的代码
    //  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
    //  这将由框架自动完成。
    
    void CMFC_thread_2Dlg::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 CMFC_thread_2Dlg::OnQueryDragIcon()
    {
    	return static_cast<HCURSOR>(m_hIcon);
    }
    
    //线程函数
    UINT CMFC_thread_2Dlg::jisuan(LPVOID lpParam)
    {
    	
    	CMFC_thread_2Dlg *pDlg = (CMFC_thread_2Dlg *)lpParam;
    
    	int i;
    	
    	CString str;
    
    	while (TRUE) {
    		
    		i = pDlg->cnt;
    		str.Format(_T("%d"), i);
    		pDlg->cnt++;
    		//::SetWindowText(::GetDlgItem(pDlg->m_hWnd, IDC_EDIT1), L"Hello World");
    		//Sleep(1000);
    		::SetWindowText(::GetDlgItem(pDlg->m_hWnd, IDC_EDIT1), str);
    		Sleep(1000);
    	}
    	return 0;
    
    }
    //开始线程,进行累加显示
    void CMFC_thread_2Dlg::OnBnClickedStart()
    {
    	// TODO:  在此添加控件通知处理程序代码
    	
    	terminal_flag = 1;
    		m_pThread = AfxBeginThread(
    		jisuan,
    		this,
    		THREAD_PRIORITY_NORMAL,
    		0,
    		0,
    		NULL
    		);
    }
    //暂停、继续线程
    void CMFC_thread_2Dlg::OnBnClickedDialog()
    {
    	// TODO:  在此添加控件通知处理程序代码
    	//AfxMessageBox(_T("列表为空!"));
    
    	CString button_str0;
    	button_str0 = "pause";
    
    	CEdit *pBoxOne;
    	pBoxOne = (CEdit*)GetDlgItem(IDC_DIALOG);
    
    	CString button_str;
    	pBoxOne->GetWindowText(button_str);
    
    	
    	
    	if (button_str == button_str0)
    	{
    		m_pThread->SuspendThread();
    		pBoxOne->SetWindowText(_T("continue"));
    		
    	}
    	else
    	{
    		m_pThread->ResumeThread();
    		pBoxOne->SetWindowText(_T("pause"));
    	}
    
    }
    //停止线程
    void CMFC_thread_2Dlg::OnBnClickedStop()
    {
    	// TODO:  在此添加控件通知处理程序代码
    	TerminateThread(m_pThread->m_hThread, 0);
    	terminal_flag = -1;
    }
    //单步增加累加器的值并显示
    void CMFC_thread_2Dlg::OnBnClickedStep()
    {
    	// TODO:  在此添加控件通知处理程序代码
    	//更改edit control 内容
    	CString str_text;
    	CEdit *pBoxText;
    	if (terminal_flag==1)
    	{
    		pBoxText = (CEdit*)GetDlgItem(IDC_EDIT1);
    		str_text.Format(_T("%d"), cnt++);
    		pBoxText->SetWindowText(str_text);
    	}
    
    }
    

    刚开始上网搜怎么通过AfxBeginThread()函数创建线程,以及怎么通过线程函数调用全局变量和修改界面上控件的值时,一直找不到现成的网络资料,直到找到一个this指针的博客,才知道是通过自己定义的线程函数和需要传递的参数作为AfxBeginThread()函数的输入参数来实现的。

    展开全文
  • MFC不同类之间的函数调用

    千次阅读 2017-07-10 10:57:01
    在单文档的添加的新类中一个函数(关于UDP发送数据的函数)void CommConfig::Send() { // TODO: 在此添加控件通知处理程序代码 HANDLE hThreadSend; hThreadSend = AfxBeginThread(NetSet::SendProc, this);

    创建一个基于单文档的工程,命名为Test。插入多个对话框

    目标:在对话框类void cDoalogH::OnBnClickedButtonHopen()的函数中调用另一个对话框的函数void NetSet::Send()

    在NetSet.cpp中声明全局指针

    NetSet *pNetSet=NULL;
    并在构造函数中定义:

    NetSet::NetSet(CWnd* pParent /*=NULL*/)
    	: CDialog(NetSet::IDD, pParent)
    	, m_dataToSend(_T(""))
    {
    	pNetSet=this;
    }
    在要调用函数的类DialogH中声明全局变量
    extern NetSet *pNetSet;
    然后就可以在类DialigH的任何一个函数中用指针pNetSet了

    例如:

    void cDoalogH::OnBnClickedButtonHopen()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	showimg(hcamera_online.GetBuffer(),&m_h_show);
    	if (connect_flag==1)
    	{
    		pNetSet->Send();
    		cout<<"发送成功";
    	}
    	else
    		AfxMessageBox("请先保存设置");
    }





    展开全文
  • MFC查找指定文件,VC++PathFileExists函数
  • mfc】截屏函数

    2019-06-16 14:25:20
    FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL); //位图文件头 bmfHdr.bfType = 0x4D42; // "BM" bmfHdr.bfSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwBmBitsSize;//!! ...
  • 两例MFC程序flag获取

    2019-01-03 18:22:42
    MFC应用程序破解需要找到某个按钮对应的消息处理函数(不能单纯理解成Win32项目,去找自定义的消息处理函数),可以在关键函数处下断点,比如:GetDlgItem( ) GetDlgText( ) SetDlgText( ) GetWindowText( ) ...
  • BOOL CopyFile(  LPCTSTR lpExistingFileName, // pointer to name of an existing file  LPCTSTR lpNewFileName, // pointer to filename to copy to  BOOL bFailIfExists // flag for operation if file exists
  • MFC写通过修改导入段的IAT来达到API拦截程序时,写了一个函数列举了所有导入函数函数名。、 看代码: HMODULE hModule=GetModuleHandle(NULL); ULONG size; PIMAGE_IMPORT_DESCRIPTOR pImport=(PIMAGE_...
  • MFC中GetDlgItemText与GetDlgItemInt函数 -

    万次阅读 2012-04-12 17:17:37
    GetDlgItemText 函数 用于获取对话框中指定控件的标题或文本。 UINT GetDlgItemText(HWND hDlg, int nIDDlgItem, LPTSTR lpString, int nMaxCount); hDlg 窗口的句柄。 nIDDlgItem 指定控件的标识符(ID)。...
  • MFC框架内的反应函数 void Infoshow::OnBnClickedGetSysinfo() { //string SysInfo; // TODO: 在此添加控件通知处理程序代码 CMyWMI myWMI; //myWMI.InitWMI(); // SysInfo=myWMI.QuerySystemInfo();...
  • 在做一个MFC下载器,但是OpenUrl函数在调用的时候返回的是一个空的指针,求解啊 做一个简化的例子 CStdioFile* fTargFile = netSession.OpenURL(LinkUrl , 1, INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_...
  • MFC 框架、文档、视图操作常用函数用法简析1. 跟窗口刷新有关的几个MFC函数//重绘窗口1) RecalcLayout(); /*RecalcLayout()-- The default implementation of this member function calls the CWnd m
  • MFC 绘制坐标及波形图函数

    千次阅读 2013-05-25 22:44:00
    最近因为课程需要,自己设计了一些相对简单的绘制坐标和波形图的函数,这些函数不够理想,但是对于简单要求足够了,以后自己会逐渐的完善这些函数。这里先把他们放这里,以免找不到。  在MFC中,如果不是绘制动态...
  • MFC中OnPaint()函数

    2014-07-29 03:53:21
    void CSiftRegDlg::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CDialog::...把OnPaint()函数中的代码注释掉就没有这个问题了
  • 主要是因为OpenResquest参数 dwFlags 不要用INTERNET_FLAG_DONT_CACHE 就好了
  • 自己写的一个列表框项目添加与筛除函数
  • MFC 里的 CFile 类的一个函数 CreateFile

    千次阅读 2014-05-26 10:41:32
    NanShan 即时通讯 在开发的时候,需要创建一些文件,这时要用到 MFC 里的 CFile 类的一个函数 CreateFile。下面详细说明: 一下借鉴与网络资料和书籍。目的一是作为将来学习查找对资料的一种保存,二是供学习...
  • Flag that indicates whether dialog box is being initialized ( FALSE ) or data is being retrieved ( TRUE ). Remarks Call this member function to initialize data in a dialog box, or to ...
  • C语言,有时候真不得不佩它,照理说,文件处理函数是没有什么好讲的,但对于很多C入门的人来说,似乎也是值得静心品味一番的。 C中的文件处理函数并不很多,而常用的,似乎更少。 函数不难,但并不代表文件处理也...
  • mfc计算器运用逆波兰包含四则运算,根号,平方,三角函数,进制转换 计算器是程序猿经典考题,我们学校语言设计课程暑假的任务就是写一个越复杂越好的计算器,一开始在学校里的时候比较忙,断断续续搜了一点资料还是...
  • MFC中(TCP/IP)回调函数简析

    千次阅读 2016-09-09 09:58:48
    所谓回调,就是模块A要通过模块B的某个函数b()完成一定的功能,但是函数b()自己无法实现全部功能,需要反过头来调用模块A中的某个函数a()来完成,这个a()就是回调函数。如下图   ①约定接口规范。在模块B必须...
  • 这几天专门调研了一下MFC中如何动态创建控件及其消息响应函数。 参考帖子如下: (1)http://topic.csdn.net/u/20101204/13/5f1b1e70-2f1c-4205-ba10-41616d16f07e.html (2)http://www.cp...
  • 基于MFC的截屏和以位图保存的函数

    千次阅读 2008-04-24 20:22:00
    Vc6中,把如下两个文件拷贝到/工程中,然后在用到截屏的文件中,先#include "takescreen.h",再直接用如下三个函数即可。附:头文件:takescreen.h--------------------------------------------------------------...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,122
精华内容 3,248
关键字:

flagmfc函数