dword winapi函数怎么用(为什么在DWORD WINAPI里使用不到外部函数)
本文目录
- 为什么在DWORD WINAPI里使用不到外部函数
- DWORD WINAPI ThreadProc (LPVOID lpParam)这里的参数不能变吗
- WINAPI里的CreateThread函数
- MFC如何在自定义函数中调用控件变量
- C++ 中如何使用API函数 生成一个窗体
- DWORD WINAPI MyThread1这个东西的参数到底是什么呀,我见过LPVOID lpParameter还有void * p!
为什么在DWORD WINAPI里使用不到外部函数
myUpdate不是外部函数,而是一个class的成员函数,跟普通的函数不一样的,使用成员函数必须带class的实例的,像下面这样调用才行:CMyWindow1Dlg mywin;mywin.myUpdate();
DWORD WINAPI ThreadProc (LPVOID lpParam)这里的参数不能变吗
DWORD WINAPI MyThreadProc (LPVOID lpParam){ somestruct* pN = (somestruct*)lpParam; // 将参数转为你的类型 ... return 0;}HANDLE hThread = CreateThread( NULL, // 没有安全描述符 0, // 默认线程栈的大小 MyThreadProc, // 线程函数指针 (LPVOID)&n, // 传递参数 NULL, // 没有附加属性 NULL // 不需要获得线程号码 );CloseHandle(hThread); // 如果不需要再监视线程,则关闭线程句柄
WINAPI里的CreateThread函数
传给CreateThread的函数,必须是全局函数或静态函数,不能使用类的普通函数即,你可以使用如下函数声明:static DWORD WINAPI Run(LPVOID LpParameter);因为类的普通函数会传递类对象指针作为隐含参数,所以与CreateThread所要求的函数类型不匹配
MFC如何在自定义函数中调用控件变量
Producer是一个线程的起始函数吧?应该不是进程。您可以将框控件的指针或句柄通过lpPara参数传入到线程里面。例如:HWND hWnd = GetDlgItem(hWndDlg,IDC_EDIT);_beginthreadex(...Producer,(LPVOID)hWnd,....);在线程里:DWORD WINAPI Producer(LPVOID lpPara){ HWND hWnd=(HWND)lpPara; if(hWnd != NULL) SetWindowText(hWnd,TEXT("123"));}
C++ 中如何使用API函数 生成一个窗体
生产窗体可以使用CreateWindowEx函数。
函数功能:该函数创建一个具有扩展风格的层叠式窗口、弹出式窗口或子窗口,其他与CreateWindow函数相同。函数原型:CreateWindowEx函数创建一个层叠的,自动弹出的(pop-up)或是一个子窗口通过扩展格式。另外这个函数的作用与CreateWindow函数的作用相同。要获得更多的关于创建窗口的信息和关于CreateWindowEx函数参数的详细描述。参见CreateWindowHWND CreateWindowEx(DWOR DdwExStyle, //窗口的扩展风格LPCTSTR lpClassName, //指向注册类名的指针LPCTSTR lpWindowName, //指向窗口名称的指针DWORD dwStyle, //窗口风格int x, //窗口的水平位置int y, //窗口的垂直位置int nWidth, //窗口的宽度int nHeight, //窗口的高度HWND hWndParent, //父窗口的句柄HMENU hMenu, //菜单的句柄或是子窗口的标识符HINSTANCE hInstance, //应用程序实例的句柄LPVOID lpParam //指向窗口的创建数据);
例程:
include《windows.h》#include《stdio.h》LRESULT CALLBACK WinDouProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter);class CWnd{public: CWnd() { m_hWnd = NULL; } BOOL CreateEx( DWORD dwExStyle, // extended window style LPCTSTR lpClassName, // pointer to registered class name LPCTSTR lpWindowName, // pointer to window name DWORD dwStyle, // window style int x, // horizontal position of window int y, // vertical position of window int nWidth, // window width int nHeight, // window height HWND hWndParent, // handle to parent or owner window HMENU hMenu, // handle to menu or child-window identifier HANDLE hInstance, // handle to application instance LPVOID lpParam // pointer to window-creation data ); BOOL ShowWindow( int nCmdShow ); BOOL UpdateWindow();public: HWND m_hWnd;};BOOL CWnd::CreateEx( DWORD dwExStyle, // extended window style LPCTSTR lpClassName, // pointer to registered class name LPCTSTR lpWindowName, // pointer to window name DWORD dwStyle, // window style int x, // horizontal position of window int y, // vertical position of window int nWidth, // window width int nHeight, // window height HWND hWndParent, // handle to parent or owner window HMENU hMenu, // handle to menu or child-window identifier HANDLE hInstance, // handle to application instance LPVOID lpParam // pointer to window-creation data){ m_hWnd = ::CreateWindowEx (dwExStyle,lpClassName,lpWindowName,dwStyle,x,y,nWidth,nHeight,hWndParent,hMenu,(HINSTANCE)hInstance,lpParam); if(m_hWnd != NULL) return TRUE; else return FALSE;}BOOL CWnd::ShowWindow(int nCmdShow){ return ::ShowWindow(m_hWnd,nCmdShow);}BOOL CWnd::UpdateWindow(){ return ::UpdateWindow(m_hWnd);}int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // pointer to command line int nCmdShow // show state of window){ WNDCLASS wndclass; //先设计窗口类 wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hbrBackground = (HBRUSH)GetStockObject(DKGRAY_BRUSH); wndclass.hCursor = LoadCursor(NULL,IDC_HELP); wndclass.hIcon = LoadIcon(NULL,IDI_WARNING); wndclass.hInstance = hInstance; wndclass.lpfnWndProc = WinDouProc; wndclass.lpszClassName = "Magic_Maggie"; wndclass.lpszMenuName = 0; wndclass.style = CS_VREDRAW | CS_HREDRAW; //某一个变量原油几个变量去掉一个特征,可以用取反(~)后再进行与(&) //例如:style上去掉CS_NOCLOSE,可以style&~CS_NOCLOSE; RegisterClass(&wndclass); ///注意先建立再注册昂 CWnd wnd; wnd.CreateEx(NULL,"Magic_Maggie","DouDou",WS_OVERLAPPEDWINDOW,0,0,800,600,NULL,NULL,hInstance,NULL); wnd.ShowWindow(SW_SHOWNORMAL); wnd.UpdateWindow(); MSG msg; //消息循环 while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); //触发WinDouProc } return 0;} LRESULT CALLBACK WinDouProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter){ switch(uMsg) { case WM_LBUTTONDOWN: MessageBox(hwnd,"您按下了鼠标左键昂","豆豆的程序",MB_OK); HDC hdc; hdc = GetDC(hwnd); //The GetDC function retrieves a handle to a display device context for the client area of a specified window or for the entire screen. You can use the returned handle in subsequent GDI functions to draw in the device context. TextOut(hdc,0,0,"感谢您对豆豆程序的支持昂",strlen("感谢您对豆豆程序的支持昂")); ReleaseDC(hwnd,hdc); break; case WM_CHAR: char szChar; sprintf(szChar,"Char is %d",wParam); MessageBox(hwnd,szChar,"豆豆的程序",MB_OK); break; case WM_PAINT: PAINTSTRUCT ps; HDC hDc; hDc = BeginPaint(hwnd,&ps); TextOut(hDc,0,0,"这个是重绘滴哦",strlen("这个是重绘滴哦")); EndPaint(hwnd,&ps); break; case WM_CLOSE: //这个case与下边的destroy这个case不要弄错了,否则窗口不出现,但任务管理器中运行 if(IDYES == MessageBox(hwnd,"您真的要退出么?","豆豆的程序",MB_YESNO)) { DestroyWindow(hwnd); } break; case WM_DESTROY: PostQuitMessage(0); //////////////////////////////////////////????????????????????? break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); // 别忘记了return } return 0;}
DWORD WINAPI MyThread1这个东西的参数到底是什么呀,我见过LPVOID lpParameter还有void * p!
DWORD WINAPI MyThread1 (LPVOID lpParam){ somestruct* pN = (somestruct*)lpParam; // 将参数转为你的类型 pN-》m_number;//这里就是利用你传进来的指针进行一个类型转换,然后用这个指针做一些你想要的事 ... return 0;}就是说 你传进来一个指针给这个函数 但是呢这个指针是空类型的 因为空类型的指针可以给任何类型的指针赋值 所以要进行一个强制类型转换 就像上面写的一样 然后你就可以进行操作了顺便说一下LPVOID这个是一个宏定义 表示的是指向空类型的指针 至于你说的参数是什么意思 那就看你要传什么指针进来了望采纳哦
本文相关文章:
cesium的datasource(Cesium快速上手9-Camera和Scene中的其他函数使用)
2024年9月9日 18:01
day函数是什么意思(函数DAY($A$3)*4-4 代表什么意思)
2024年9月8日 10:45
递归算法解决八皇后问题(用递归函数设计八皇后问题的回溯算法C++代码)
2024年9月8日 09:01
c语言lseek函数的用法(问一个关于lseek函数的效率问题)
2024年9月7日 14:45
python递归函数考试题(python题目:要求用递归、递推和Lambda三种方式编写power(n,x)函数)
2024年9月6日 03:40
c语言中函数abs 和 fabs有什么区别?C语言中fabs表示什么意思
2024年9月4日 08:10
matlablength函数用法(如何使用MATLAB作出如下函数ns关于x变化的函数,x的取值范围为0到10)
2024年9月1日 04:40
php截取字符串以特定的字符分割(PHP怎么用substr函数截取字符串中的某部分)
2024年9月1日 03:45
small函数相反的函数(excel中small函数有什么作用)
2024年9月1日 01:40
easyx安装教程(【C语言】如何在VC++6.0中使用TC2.0特有的函数呢)
2024年8月31日 06:40
更多文章:
usb万能驱动下载win7(华硕x45vd的usb3.0驱动下载在哪里啊)
2024年7月27日 17:15
惠普1000打印机驱动(惠普laserjet 1000 series win7驱动)
2024年6月14日 21:55
cad教学视频全集免费(哪里有免费可下载的CAD视频教程 从入门开始的)
2024年9月7日 01:10
cf修复工具(我打游戏(CF)老是出现网络异常,与主机连接失败,怎么解决呀)
2023年9月21日 19:40
可以赚钱并提现到微信的游戏(挣钱游戏软件一天赚100微信提现没有广告)
2024年6月23日 13:09
nds4ios(nds4ios游戏放哪里nds4ios模拟器游戏存放路径)
2024年5月15日 07:48
龙城战歌手游官网(手游龙城战歌为什么别人看不到我说话是不是被禁言了)
2024年6月26日 02:17
卫星定位天气预报免费下载(即刻天气预报几点几分下雨免费下载)
2024年5月16日 23:20
第一ppt课件免费下载(向您推荐几个比较好的ppt模板下载网站)
2024年9月9日 13:15
今晚世界杯预选赛直播(中国VS新加坡直播 中国对新加坡直播 世界杯预选赛中国国足VS新加坡男足电视转播CCTV5)
2024年7月24日 21:05
安卓系统的手机怎么查看有没程序在后台运行?为什么我安装进程终结者提示更新错误
2023年7月12日 01:00