createwindow,win32与winCE有什么区别
本文目录索引
- 1,win32与winCE有什么区别
- 2,API中怎么用CreateWindowEx创建一个窗体或控件
- 3,为何每次用CreateWindowEx创建的窗口使用完关闭后句柄和内存占用都不会释放啊?
- 4,MFC中CToolbar的Create与CreateEx有什么区别
- 5,MFC怎么封装CreateWindow
- 6,请问CreateWindow创建的窗口怎样才能在关闭后立刻Set m_wcMyWin=Nothing销毁它的类实例呢?
- 7,用createwindow 为什么没窗口出来???
- 8,delphi如何用CreateWindowEx创建一个窗体?
- 9,生成windows游戏的时候如何设置成窗口模式
- 10,如何得到MFC中edit控件,多行数据的每一行
1,win32与winCE有什么区别
将WIN32应用程序移植到WINCE平台时通常遇到API不可用,这是因为WinCE仅实现了win32 API的一个子集。在移植的时候必需检查应用程序中的所有WIN32 API调用,包括函数、消息以及相关的数据结构,对不兼容的函数调用作一些修改或寻求可替代的函数。主要从以下几个方面入手:
1,有些WIN32提供的函数在WINCE函数库中完全不支持,其中一些在WINCE中有新的函数替代,例如,在WIN32界面编程中用到的MENU BAR和TOOL BAR相关的函数,在WINCE中将他们捆绑成COMMAND BAR,构键了一个新的API。还有一些不支持的函数就必需通过调用其他函数间接实现他们的功能。如C运行库中不存在内存分配函CALLOC,可以通过调用MALLOC,并显示初始化内存来实现。再如,可以用POLYLINE实现MOVETO和LINETO函数功能。
2,有些WIN32函数在WINCE中虽然支持但多了一些限制,如减少了参数个数或缩小了参数的可选范围。例如,创建窗口函数CREATEWINDOW和CREATEWINDOWEX在WINCE中是支持的,但可供选择的窗口类型有所减少。这一点也是在程序移植过程中应该注意的。
3,WINCE程序也可以用MFC开发,但是程序消息定义有所不同,他不完全支持以WM_和EM_开头的消息。例如,WINCE设备通常用输入笔替代鼠标,因而没有DOSKTOP PC中的鼠标右击动作,不支持WM_RBOTTONDOWN消息。同时WINCE自身又产生了一些新的消息。因为内存限制,该平台上的所有应用程序都运行在低内存状态下,他们必须具备和操作系统协同管理内存的能力。当系统可用内存低于某个阀值时,WINCE系统会向正在运行的应用程序发送消息,使其关闭或释放暂时不用的内存。新增消息WM_HIBERNATE即完成此功能。
因此,在移植应用程序时首先要考察WINCE对WIN32 API的支持程度。可采用替换、修改现有API调用或增加新的API等方法来适应系统的要求。
2,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 //指向窗口的创建数据);
3,为何每次用CreateWindowEx创建的窗口使用完关闭后句柄和内存占用都不会释放啊?
The CloseHandle function closes handles to the following objects:
Communications device
Console input
Console screen buffer
Event
File
File mapping
Job
Mailslot
Mutex
Named pipe
Process
Semaphore
Socket
Thread
Token
closehandle不是用来关闭窗口对象的,你用createwindow创建的句柄,只能到任务线程销毁的时候才会被释放,你关闭的时候不释放,因为创建的时候你是要指定instance的,创建的对象会绑定到这个实例上,直到任务结束才销毁。当然你也不用担心用户反复打开新窗口的问题,如果如果一直都是同样的窗口,不会导致新句柄增加
4,MFC中CToolbar的Create与CreateEx有什么区别
我没有接触过MFC,但是我在学习API时建立窗口的时候有两个函数与之类似吧~!
我所函数是用来建立窗口的分别是CreateWindow与CreateWindowEx。前者是win16使用的API函数,后者是win32使用的API函数。所谓Ex其实是扩展的意思。
CreateWindow与CreateWindowEx的区别在于后者有一个窗口的扩展风格的参数,而前者只有一个风格的参数而没有这个扩展风格的参数。
我不知道是否一致。
5,MFC怎么封装CreateWindow
创建窗口的函数CreateWindow在MFC中被封装到了CWnd中,所以凡是继承自CWnd的类都可以生成窗口。
以CFrameWnd为例说明怎么封装的(它继承自CWnd).
(1) m_pMainWnd = new CMyFrameWnd;//实例化类CMyFrameWnd,调用它的构造函数
(2) CMyFrameWnd::CMyFrameWnd(){
Create(....); //该虚函数没被重写,所以调用父类CFrameWnd的Create函数
}
(3) BOOL CFrameWnd::Create(.....){ //见MFC源码winfrm.cpp
//其他代码
CreateEx(.....); //又是虚函数没改写,于是调用父类CWnd的CreateEx函数
}
(4) BOOL CWnd:CreateEx(.....){ //见MFC源码wincore.cpp
CREATESTRUCT cs;
//对cs的一系列初始化,这里的CREATESTRUCT跟Win32中的WNDCLASSEX起类似作用,最后它的值会与WNDCLASS的类关联起来的
PreCreateWindow(cs); //该虚函数就是作注册窗口的作用.它被CFrameWnd改定了.见第(5)步
AfxHookWindowCreate(this); //钩子函数,跟窗口回调函数有关
HWND hWnd = ::AfxCtxCreateWindowEx(.....); //正式创建窗口了,跟CreateWindow的作用一样.
}
6,请问CreateWindow创建的窗口怎样才能在关闭后立刻Set m_wcMyWin=Nothing销毁它的类实例呢?
我觉得你这么写不对吧?
WM_DESTROY过程中你调用QueryDestroy,然后就把这个对象设置成nothing了,但是这个对象还“正在删除过程中”你就直接把它撤销了,这样不行,set nothing的动作应该在对象完全close以后才可以做,不可以在close的过程中做你把setnothing去掉就可以了,如果你怕删不掉的话,那么你不去处理WM_DESTROY,让系统自己去处理也可以删除窗口
==============
这个貌似没有什么方法吧,不过从数据库对象的创建和删除过程中可以看到的就是显示执行了close操作,然后再set nothing。
你看看你的类里能不能提供一个close方法,然后再set nothing即可我觉得你的set nothing只要写在类的外面就可以了,写在引用它的地方,如果是全局结构的话我觉得你不set nothing可能也是没有问题的
7,用createwindow 为什么没窗口出来???
首先,你的窗口类注册了吗?也就是RegisterClass。。。 没注册窗口类CreateWindow就会调用失败。 其次,你创建的窗口没有WS_VISIBLE 属性,这样的窗口需要调用ShowWindow来显示。 给你一个完整的小实例吧 #include LRESULT CALLBACK WinProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow) { TCHAR szname[]=TEXT("classname"); HWND hwnd; MSG msg; ZeroMemory(&msg,sizeof(msg)); WNDCLASS wndclass; wndclass.style=CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc=WinProc; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); wndclass.hInstance=hInstance; wndclass.lpszClassName=szname; wndclass.lpszMenuName=NULL; RegisterClass(&wndclass); hwnd=CreateWindow(szname,TEXT("windowsnametest"),WS_OVERLAPPEDWINDOW ,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL); if(hwnd) ShowWindow(hwnd,SW_SHOW); else { MessageBox(NULL,TEXT("创建窗口失败!"),TEXT("提示"),MB_OK); UnregisterClass(szname,hInstance); return 1; } UpdateWindow(hwnd); while(GetMessage(&msg,hwnd,0,0)>0) { TranslateMessage(&msg); DispatchMessage(&msg); } UnregisterClass(szname,hInstance); return msg.wParam; } LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { switch(message) { case WM_CLOSE: DestroyWindow(hwnd); PostQuitMessage(0); break; default: return DefWindowProc(hwnd,message,wParam,lParam); } return 0; }
8,delphi如何用CreateWindowEx创建一个窗体?
这个都没人来答么,那我来大概说说吧。
首先你得先写一个注册窗口的函数:
function tmainform.RegClass:Boolean;
var
WndClass:TWndClass;
begin
//这里面是你注册的WndClass窗体的信息,代码麻烦我就不打了。
end;
然后是创建窗口的过程:
procedure tmainform.CreateForm;
var
Wnd:HWND;
begin
RegClass;
Wnd:=CreateWindow('MyFormClass', //注册窗口类名
'窗口标题', //窗口标题栏
WS_OVERLAPPEDWINDOW, //窗口风格
CW_USEDEFAULT, //默认left
CW_USEDEFAULT, //默认top
CW_USEDEFAULT, //默认width
CW_USEDEFAULT, //默认height
SELF.HANDLE, //父窗口句柄
MainMenu1.Handle, //窗口菜单
HInstance, //程序实例
nil //窗体附加参数
);
IF Wnd0 THEN
BEGIN
ShowWindow(Wnd,SW_SHOWNORMAL); //SHOW窗口
UpdateWindow(Wnd); //刷新窗口
END;
end;
完了,以上是以 CreateWindow 为例 创建窗口,仅作参考。
PS:没有分的回答还要打N多代码,怪不得没人来答。
9,生成windows游戏的时候如何设置成窗口模式
虽然游戏的优化做得已经非常好了,但是我们仍然可以通过一系列的设置来提高我们的游戏帧数从而让我们更容易吃鸡。 前言: Epic Games的堡垒之夜在一年之内游戏玩家数量迅猛增长,在10月29日,堡垒之夜的同时在线人数多达81万,竟致使服务器崩溃,毫无疑问这个游戏火了!它们的PVP(大逃杀)游戏模式于2017年9月26日发布,PVP(大逃杀)完全免费,PVE(拯救世界)也将在2018年完全免费。 电脑设置优化篇: 你如果是使用笔记本电脑玩堡垒之夜,请将“电池模式”设置为“高性能”或“超频”。还有就是要确保你的显卡驱动是最新的! 1. 如果你的电脑是N卡。请点击右键,然后打开NVIDIA控制面板然后再点击“ 管理3D设置” 2. 选择“ 程序设置 ” 并找到Fortnite。如果找不到,点击添加并在那里找到它。(要在这一步找到Fortnite,必须是要至少运行过一次游戏。如果没有运行过游戏,就运行游戏然后再关闭游戏就能找到了) 如下图 游戏应用程序优化1. 在你的电脑中找(你游戏安装的位置/ Fortnite / FortniteGame / Binaries / Win64)。找到一个名字为FortniteClient-Win64-Shipping.exe的应用程序 2. 用鼠标右键单击该文件,然后选择 属性 3. 选择选项卡兼容性然后勾选 替代高DPI缩放行为和 禁用全屏优化 4. 点击确定 2. 解压缩文件并复制文件夹最优化游戏文件里面的内容 4. 找到AppData/Local/FortniteGame / Saved / Config / WindowsClient 5. 将最优化游戏文件里面的内容(CTRL + V)粘贴到文件夹WindowsClient中并全部替换掉之前的文件 游戏客户端优化1. 打开 游戏客户端Epic Games Launcher选中Fortnite后,点击启动按钮右边那个齿轮一样的图标,然后选择设置 2. 勾选额外的命令行参数 3. 将Launch Options.txt 文件(之前下载)的内容粘贴到下面的长方形文本框中。 4. 按下设置 视野距离调太高对找人没有帮助反而有干扰。视野距离只影响建筑物和宝箱生成,不影响人物生成。城区建筑多,帧数自然就下来了。材质调高能帮助你分别出远处的是人还是杂物。 WINDOWS优化篇本篇是基于win10做的优化教程,以下很多内容win7和win10都是一样的,win7可以参考着做。 2.打开Local文件夹,再打开Temp文件夹。 找到 此电脑/本地磁盘C/Users/你的用户名(图中的kwy是我的用户名)/AppData/Local/Temp 然后将Temp中的文件全部删除,出现图中文件夹正在使用的提示后全部选择跳过。 3.点击左下角windows图标,选择设置,再选择游戏,然后选择游戏栏, 把使用游戏栏录制的开关关了。 在选择游戏DVR,把后台录制,录制音频和录制中捕获鼠标光标都关了。最后选择游戏模式,把游戏模式打开。 4.左下角用windows搜索,输入服务 然后回车。 找到名称叫Superfetch的一项 ,然后右键属性,在启动类型里面选择禁用。 再继续找xbox accessory management service ,xbox live身份验证管理器,xbox live网络服务和xbox live游戏保存,把这四项按照上面的方式禁用。 5.左下角用windows搜索,输入运行 然后回车。 在打开的窗口中输入prefetch 堡垒之夜设置最优化详解教程就到这里,希望对玩家有所帮助。
10,如何得到MFC中edit控件,多行数据的每一行
在使用CEdit控件的时候经常添加一个与CString类型的成员变量与这个控件关联,m_sEdit,使用m_sEdit我们就可以直接操作CEdit中的数据。因为这个变量是CString类型的,它只能实现一些与CString类相关的操作。
如果想灵活适用CEdit“多行数据”输入的时候,添加一个CString类型的成员变量就不是很好了,得添加一个CEdit类型的成员变量m_hwdEdit,这个变量就是我们画的这个控件,用CEdit的CEdit::GetLine()方法,就可以把指定行的数据放到一个缓存里面。
两种类型的成员变量是有区别的,一个是以数据为中心,而另一个是以控件为中心。