windows域的好处
第一篇:windows域的好处
魔域的装备怎么鉴定
魔域的装备怎么鉴定用自动寻路找锻造所,那有鉴定师.
最好去新手导师那拜师,升的很快.要不如果你是富人,就开祝福;如果你是穷人,就带一个法bb(一定要学风珠),一个战bb(和体),然后组队练级
你先找个级数高点的做你的师傅不过你要记住你拜完了师傅就不要轻易的判师 应为你一判师在要拜师你就要用师徒情深了 那个东西要用MS买的 如果你是有钱人 也可以是是 关于BB的问题你你就要去市场那去合多多的合 把星合的的越高越好 升级 你要是法师你就去打怪你就去打看怪名是红色的找个战士BB 一般战士BB比你自己的级数高点 你可一和战士BB和体 等到X劈的时候你可一去打下黑名的怪 我经常这样越级打怪 那益处嗷嗷的 你就等着升级吧 前提 你不要被那个黑名的怪碰到呀 那会死人的 呵呵 祝你升级快乐啊 今天就写这些吧 !
到雷鸣的鉴定师用100金币就可以鉴定啦~一定几率出现鉴定失败,宝宝天赋技能中也有鉴定天赋跟鉴定师的一样,如果你想100%鉴定成功就买魔石鉴定卷
玩魔域,魔域的装备怎么鉴定。靠的是什么?
兄弟。知道的回一声。谁都想要极品+12带2D的吧!西西。我都是。额是穷人。买是买不起拉!怎么办?。饿去趟迷宫。身上就装满了装备。回来后。如果是你们。是不是第一时间去鉴定啊!。其实这种做法是错的。应该把这些装备先存起来。最好是过几天去鉴定。(不要问为什么)。鉴定时还要注意的是。要分类。法师的放在一起,鉴定材料《魔域的装备怎么鉴定》。战士的放在一起。鉴定时。注意啊!关键时刻到了。前面的5件最好是法师装备。不是本人看不起法师
因为市场上确实是法师的装备便宜。鉴定到第6件就换战士装备去鉴定。因为第6件到第9件必出一件上品
上品虽然没什么用但比良品的要好吧。
到第14件开始全部用战士装备去鉴定,因为第14到20件这其中很容易出精品!运气好的话。极品+12带D的。我也只鉴定过一件战鞋。哎。悲哀。上品仓里一大把。还哟很多的精品拿去喂BBB了。
先写到这咯!我还得去鉴定装备呢。最后再补充一句。鉴定时间。最好是服务器重启的时候。
朋友,是不是发现你有的未鉴定装备中有的东西一鉴定就是失败啊,再鉴定就会很容易的失败+损坏啊,呵呵,你伤心吧,你把极品或者精品装备给糟蹋了,真的,没有骗你!下面,我小谈下我的鉴定史:以前,我鉴定一把极品寒月,(那时候不知道怎么鉴定)于是整天去打那中怪,希望能再掉一把,结果——————没有!而以后我就注意用不同的手法去鉴定装备,终于,我的精品上品一件件多了起来!今天早上还鉴定一个极品帽子,一件精品衣服,两件FS上品杖!下午呢,打两件装备,下机的时候去鉴定,一个是良品杖,一个精品头!是不是有点想知道怎么回事啊?别急:且听我慢慢道来!
第一:不要一有装备就去鉴定!等它多了再去!
第二:不要去那随便一放就OK!要像你+装备一样!注意那道光的位置!
第三:不要等服务器刚开就去鉴定,或者那里没有多少人的情况下去鉴定!!这点一定注意!
第四:一次不成功,就别再鉴定同一件东西!多开几次鉴定的那个窗口,然后取消,不要望里面放东西!
第五:(也要注意哦)如果你想要那个东西就不要先鉴定那件。先放你不在意的东西!等它一下就成功,不管他是什么品的,再结合上面的经验放你想要的东西!
西西,这点经验,不知道对大家是不是适合!厉害的高手别笑啊,也许哪里有错误,你厉害你就指点下!经验大家共同分享,不对之处还望海涵。
第二篇:客户端不能加入域的解决方法和步骤
客户端不能加入域?解决资料整合
加入域出现以下错误,windows无法找到网络路径,请确认网络路径正确并且目标计算机不忙或已关闭? 核心提示:
在输入管理账号和密码并点击“确定”按钮后,系统却提示“找不到网络路径”,该计算机无法加入域。
故障现象:单位有一台运行Windows XP系统的办公用计算机,由于工作需要准备将它加入到已经建立好的基于Windows Server 2003系统的域中。按照正常的操作步骤进行设置,在“系统属性”的“计算机名”选项卡中加入域的时候,系统要求输入有权限将计算机加入域的用户名和密码(这表示已经找到域控制器)。然而,在输入管理账号和密码并点击“确定”按钮后,系统却提示“找不到网络路径”,该计算机无法加入域。
解决方法:
由于客户端计算机能够找到域控制,因此可以确定网络的物理连接和各种协议没有问题。此外,由于可以在该计算机上找到域控制器,说明DNS解析方面也是正常的。那为什么能找到域控制器却又提示无法找到网络路径呢?这很可能是未安装“Microsoft网络客户端”造成的。在“本地连接 属性”窗口的“常规”选项卡中,确保“Microsoft网络客户端”处于选中状态,然后重新执行加入域的操作即可。
“Microsoft网络客户端”是客户端计算机加入Windows 2000域时必须具备的组件之一,利用该组件可以使本地计算机访问Microsoft网络上的资源。如果不选中该项,则本地计算机没有访问Microsoft网络的可用工具,从而导致出现找不到网络路径的提示。本例故障的解决方法启示用户,为系统安装常用的组件和协议可以避免很多网络故障的发生,
计算机本地连接自带的防火墙也应该关闭.以避免应该防火墙的问题造成无法与域控制器通信.服务端(域控制器):Microsoft网络文件和打印共享和网络负载平衡没选择上去, 一定要选择上Microsoft网络文件和打印共享和网络负载平衡。
客户端要加入域,相关的服务要开始:
Computer Browser
Workstation
Remote Procedure Call (RPC)
TCP/IP NetBIOS Helper
Windows Management Instrumentation
这些客户端服务是否开启,TCP/IP NetBIOS Helper和Workstation一定要开启
并非都是客户端问题,我的问题出在DC的安全策略上,是因为启用了DC上的组策略->安全选项中的“帐户: 使用空白密码的本地帐户只允许进行控制台登录”,在客户端加入域时用户名的密码正好是空白的,过了会儿就出现了“找不到网络路径”,所以应该输入有密码的域账户,或者禁用这条安全策略。
另一个问题是安装AD时更改了数据库NTDS文件夹、SYSVOL文件夹安装路径,在虚拟机上做会容易导致AD出错,DNS日记里会告诉找不到AD。
dns中的srv记录可能没有创建好:
在安装的dns服务器上
1 重新启动net stop netlogon && net start netlogon服务
2 开始--运行--cmd--ipconfig /registerdns
3 重新启动电脑
打开事件查看器,认真检查DC和DNS服务器相关信息,看有没有警告、错误的事件。
检查步骤:
1. 确认域内有DNS服务器,并能够正常工作,我们建议您将DC和DNS服务器配置一台计算机。
2. 使用本地管理员帐号登录到出现问题的客户端,运行ipconfig /all 检查TCP/IP协议的配置是否正确,请把主DNS服务器指向域内的DNS服务器。
3. 在域控制器上,运行ipconfig /all 检查TCP/IP协议的配置是否正确,请把主DNS服务器指向PDC。
4. 在Windows Server 2003 中配置 DNS 更新功能,利用 DNS 更新功能,DNS 客户端计算机便能够注册到DNS 服务器并在每次发生更改时通过 DNS 服务器动态更新其资源记录。
如何在 Windows Server 2003 中配置 DNS 动态更新,点击下面地址去看:
http://support.microsoft.com/kb/816592/zh-cn
5. 确认在客户端和服务器上没有安装防火墙或者杀毒软件。
6. 将出现问题的客户端退出域,然后重新加入到域中,测试问题是否依然存在。
相关问题:
网域中一台电脑想加入到网域,DNS已经指向了域控制器(域控制器也是DNS服务器) 但却出现以下提示:
详细信息如下:
注意: 此信息主要供网络管理员参考。如果您不是网络的管理员,请通知网络管理员您收到了此信息,记录在文件 C:WINDOWSdebugdcdiag.txt 中。
域名 janifast 可能是一个 NetBIOS 域名。如果是这种情况,请确认域名用 WINS 正确注册。 如果您确认此名称不是一个 NetBIOS 域名,那么下面的信息将帮助您对 DNS 配置进行疑难解答:
当查询 DNS 以获得服务位置(SRV)资源记录时遇到下列错误,此资源记录用来为域 janifast 定位域控制器: 错误是: "DNS 名称不存在。"
(错误代码 0x0000232B RCODE_NAME_ERROR)
查询是为 _ldap._tcp.dc._msdcs.janifast 查询 SRV 记录
此错误的一般原因包括:
- DNS SRV 记录没有在 DNS 中注册。
- 下列区域的一个或多个不包括到它的子区域的代理:
janifast
。 (根目录区域)
有关怎样更正此错误,请单击“帮助”。
hostS文件有无问题
可能是ISA防火墙引起的,要知道域控上是不能开启防火墙的,最好设置一下策略。
跨网段加入域时,要输入域全名,比如:test.com,不能只输入test(不跨网段时我经常这样输入),否则会提示无法找到域,这是因为输入test时,使用的是netbios协议广播寻找域的,而netbios协议不能跨网段通信,除非配置了wins服务器。
输入nslookup 域名,例如:nslookup abc.com看输出DNS的server名、IP,看看输出是否正常,能否解析到域名。
PING 一下DNS,是全名哦,像:XX.COM这样,最主要是去DNS服务器看那个名字,然后把在本地连接的支持里修复点一下,主DNS都指向那DNS的服务器DNS ,如果这样还不行,那要看看组策略里的计算机配置—》网络—》DNS客户端,看看有没有修改过 。
客户端的DNS设置有没有问题,要确定是你的DC的IP,因为很多DNS设置了转发功能,虽然能ping到域名,但是无法加入域,最好将你的客户端DNS只设置为DC的IP。
A
1、客户机无法加入到域?
一、权限问题。
要想把一台计算机加入到域,必须得以这台计算机上的本地管理员(默认为administrator)身份登录,保证对这台计算机有管理控制权限。普通用户登录进来,更改按钮为灰色不可用。并按照提示输入一个域用户帐号或域管理员帐号,保证能在域内为这台计算机创建一个计算机帐号。
二、不是说“在2000/03域中,默认一个普通的域用户(Authenticated Users)即可加10台计算机到域。”吗?这时如何在这台计算机上登录到域呀!
显然这位网管误解了这名话的意思,此时计算机尚未加入到域,当然无法登录到域。也有人有办法,在本地上建了一个与域用户同名同口令的用户,结果可想而知。这句话的意思是普通的域用户就有能力在域中创建10个新的计算机帐号,但你想把一台计算机加入到域,首先你得有这台计算机的管理权限才行。再有就是当你加第11台新计算机帐号时,会有出错提示,此时可在组策略中,将帐号复位,或干脆删了再新建一个域用户帐号,如joindomain。注意:域管理员不受10台的限制。
三、用同一个普通域帐户加计算机到域,有时没问题,有时却出现“拒绝访问”提示。
这个问题的产生是由于AD已有同名计算机帐户,这通常是由于非正常脱离域,计算机帐户没有被自动禁用或 手动删除,而普通域帐户无权覆盖而产生的。解决办法:
1、手动在AD中删除该计算机帐户;
2、改用管理员帐户 将计算机加入到域;
3、在最初预建帐户时就指明可加入域的用户。
四、域xxx不是AD域,或用于域的AD域控制器无法联系上。
在2000/03域中,2000及以上客户机主要靠DNS来查找域控制器,获得DC的 IP 地址,然后开始进行网
络身份验证。DNS不可用时,也可以利用浏览服务,但会比较慢。2000以前老版本计算机,不能利用DNS来定位DC,只能利用浏览服务、WINS、lmhosts文件来定位DC。所以加入域时,为了能找到DC,应首先将客户机TCP/IP配置中所配的DNS服务器,指向DC所用的DNS服务器。
加入域时,如果输入的域名为FQDN格式,形如mcse.com,必须利用DNS中的SRV记录来找到DC,如果客户机的DNS指的不对,就无法加入到域,出错提示为“域xxx不是AD域,或用于域的AD域控制器无法联系上。”2000及以上版本的计算机跨子网(路由)加入域时,也就是说,加入域的计算机是2000及以上,且与DC不在同一子网时,应该用此方法。
加入域时,如果输入的域名为NetBIOS格式,如mcse,也可以利用浏览服务(广播方式)直接找到DC,但浏览服务不是一个完善的服务,经常会不好使。而且这样虽然也可以把计算机加入到域,但在加入域和以后登录时, 需要等待较长的时间,所以不推荐。再者,由于客户机的DNS指的不对,则它无法利用2000DNS的动态更新动能,也就是说无法在DNS区域中自动生成关于这台计算机的A记录和PTR记录。那么同一域另一子网的2000及以上计算机就无法利用DNS找到它,这本应该是可以的。
若客户机的DNS配置没问题,接下来可使用nslookup命令确认一下客户机能否通过DNS查找到DC(具体见
前)。能找到的话,再ping一下DC看是否通。
nslookup XXX.COM
Ping xxx.com
A
2、用户无法登录到域?
一、用户名、口令、域
确保输入正确的用户名和口令,注意用户名不区分大小写,口令是区分大小写的。看一下欲登录的域是否还存在(比如子域被非正常删除了,域中唯一的DC未联机)。
二、DNS
客户机所配的DNS是否指向DC所用的DNS服务器,讨论同前。
三、计算机帐号
基于安全性的考虑,管理员会将暂时不用的计算机帐号禁用(如财务主管渡假去了),出错提示为“无法与域连接……,域控制器不可用……,找不到计算机帐户……”,而不是直接提示“计算机帐号已被禁用”。可到AD用户和计算机中,将计算机帐号启用即可。
对于 Windows 2000/XP/03,默认计算机帐户密码的更换周期为 30 天。如果由于某种原因该计算机帐户的密码与 LSA 机密不同步,登录时就会出现出错提示:“计算机帐户丢失……”或“此工作站和主域间的信任关系失败”。解决办法:重设计算机帐户,或将该计算机重新加入到域。
四、默认普通域用户无权在DC上登录
五、跨域登录中的问题
在2000及以上计算机上登录到域的过程是这样的:域成员计算机根据本机DNS配置去找DNS服务器,DNS根据SRV记录告诉它DC是谁,客户机联系DC,验证后登录。
如果是在林中跨域登录,是首先查询DNS服务器,问林的GC是谁。所以要保证林内有可用的GC。如果是要登录到其它有信任关系的域(不一定是本林的),要保证DNS能找到对方的域。
不同网段的机器如何加入域呢? 利用WINS实现多子网的NT域互通…
第三篇:Windows编程教案
第一课
最简单的Windows程序(2学时)
Windows编程是一个很大的主题,涉及的方面也非常的多。Windows始于90年代,至今Windows编程的发展已经非常成熟了,而单独直接使用API的开发也是越来越少了。因此,市面上很少有泛泛的简单入门级的Windows程序设计了。一个是系统级的Windows编程介绍,如Windows核心编程。一个是方向级的Windows编程介绍如Windows图形编程,Windows网络编程等等。我们这次课的主要参考用书是Windows核心编程,同时也参考了一些其他内容。鉴于教材的价格较贵,同时也需要考虑我们自身的学习内容不一定很多以及学时的原因,就没有定教材。看我的教案吧。
(1) Win32 API API : Application Program Interface。应用程序接口。 API就是在进行Windows编程时使用的函数库。 本课就是
Windows编程=API+C语言(或者C++语言) (2) 开发环境
我校机器上安装了VC++ 6.0。相信这是大家一直以来学习C,C++使用的开发环境。但VC60离我们实在太远了,它是一款90年代的产品,已经近20年的历史了。我们机器里还有VS2005 或 VS2008,那里面的C环境要比VC60强太多了,强烈建议大家使用更高级的平台。本次授课的开发环境有两个。一个是轻量级的DEV C++,一个是重量级的VS2010.简单程序我们都将用DEV C++来实现。
DEV C++是一个非常小的C环境,但性能要优于VC60,调试环境不如VC60。这个环境在我们的共享资源里有,大家可以下载安装。安装过程非常简单,一直下一步即可。
这是其主界面。
(3) 最简单的Windows程序
提到最简单的程序,几乎所有的人都会想起经典的HelloWorld。
这不是Windows程序,如果在以前这叫DOS程序,现在叫Windows控制台应用程序。它不算Windows程序,但它很简单的就把Helloword显示到屏幕上了。而Windows程序要想把HelloWorld显示在屏幕上就确实不容易了。
3.1 访问Helloworld网站,因为把Helloworld显示在屏幕上并不容易,我们可以一点一点来,先让Helloworld以文字形式出现在其他地方,这里我们通过访问网站。把helloworld展现在网页浏览器的地址栏上。真有这个网站吗?唉,貌似还真有。
运行程序,打开浏览器并访问网站。
这是Windows程序。
Windows程序和我们以前的程序有什么不同呢?
Windows程序不能使用scanf,printf,cin,cout。所以输出helloworld变得没有以前容易了。 windows程序一定要#include windows程序的主函数不是main,是WinMain。注意区分大小写。 主函数的参数不一样了
int main(int argc ,char[] * argv) int WinMain(HINSTANCE hInstance, HINSTANCE,LPSTR lpStr,int nShow) 绝大多数的人,初次接触Windows编程都会被其冗长的名字所折服,啊,没办法,这就是Windows的命名规格,叫匈牙利命令法,是微软的一个匈牙利籍的程序员发明的,它的作用的能够让变量,类型名能够真实的反应其代表的意义,这对英语人士自然很好。对英语不好的接受起来就有点难了。
详细解释一下
WinMain是Windows编程的主函数。一定注意大小写啊。
HINSTANCE,用Windows的说法叫句柄数据类型。但它并不是一个新的数据类型,它是通过#define定义出来的。
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name DECLARE_HANDLE(HINSTANCE);
上面两行是windef.h中对HINSTANCE的定义。说到底HINSTANCE就是一个指针类型。
LPSTR 是 typedef char * LPSTR。
Windows编程里有大量通过#define和typedef定义出来的数据类型名。本质上它们都不是新的东西,都是以前我们在C语言学过的哪些数据类型另起了一个名字。为什么要这么做呢?一般Windows 程序比较大,好的命名利于维护和避免错误。总之,说到底,旧壶装新酒,貌似多了很多数据类型,不要被它们吓到,它们就是比C语言你们学过的东西多穿了件马甲。 第二课 在窗口中显示HelloWorld中(4学时)
一、第一课的HelloWorld出现在网页上。这不是我们的目的,我们要生成正常一点的HelloWorld。Windows程序中要显示HelloWorld看来还不是太容易。 (1) 将HelloWorld绘制到桌面
补充说明
如果要让这个程序顺利执行,需要
写的内容是lgdi32 运行的效果,helloworld显示在桌面上了
看到HelloWorld了吗。 说明
WinMain是Window的主函数
HDC 是个什么呢,本质上是个指针,但是我们不需要了解它指向了什么,因此,简而化之HDC是一个32位的无符号整数。HDC叫设备上下文句柄。设备上下文指显示器屏幕或打印机什么的。句柄有点类似文件句柄的意思,有了它才能操作设备。在这里有了它才能向设备上绘制。所有涉及绘图的地方都涉及HDC。GetDC(窗口句柄)。如果使用GetDC(NULL)得到桌面的设备上下文。否则可以得到一个窗口的设备上下文,我们可以在窗口上进行绘制。
(2) LPTSTR 是 TCHAR * 的另一个写法
(3) TextOut是Windows API的一个函数,功能是将文本写到设备上下文上。
TextOut(HDC,横坐标,纵坐标,字符串,字符串长度) (4) ReleaseDC(窗口句柄,HDC)释放设备上下文
GetDC的得到的HDC一定要用ReleaseDC释放,否则机器容易资源耗尽。
二、在一个独立窗口中显示HelloWorld,这是重点了,涉及一些Windows编程重要的内容
分如下几个步骤
(1) 定义一个全局函数
(2) 定义WinMain函数
(3) 在WinMain函数内注册窗口类
lpszClassName:自己取个名字,字母
lpfnWndProc:函数指针,为我们在第一步定义的函数名。用强制类型转换 在Windows中显示一个窗口,一定要先注册窗口类。函数式RegisterClassEx(&wc) (4) 创建并显示窗口
(5) 建立消息循环
(6) 补充处理WM_PAINT,补充WndProc函数
总结:创建窗口的模式是基本是固定的,本课的代码很大一部分就是这么写。主要在WndProc内存在不同。 涉及的API函数
RegisterClassEx(&WNDCLASSEX) WinMain(HINSTACNE,HINSTANCE,LPSTR,int nShow) DefWindowProc(HWND,UINT,WPARAM,LPARAM) GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax).如果得到WM_QUIT返回0 TranslateMessage(&MSG) DispathMessage(&MSG) BeginPaint(&PAINTSTRUCT) TextOut(HDC,INT,INT,LPSTR,INT) EndPaint(HWND,&PAINTSTRUCT) 作业:
自己建立应用,在窗口100,100位置显示HelloWorld 第三课 坐标位置及大小(4学时)
在我们写控制台应用的时候,不能自由的控制输出显示的位置。因此,没有学习过这方面的内容,现在我们创建了窗口,并且在窗口上显示了Hello World。这个过程涉及到很多涉及位置和大小的因素,如窗口的大小,显示的位置,文字显示的位置。说到位置,就涉及定位,说到定位就要说坐标系。在屏幕上显示内容涉及到坐标空间的知识。在Windows应用中坐标空间分如下几部分内容
1、物理坐标空间
物理坐标空间,指的是物理设备上对应的坐标系。如显示器
坐标原点在左上角。如下是一个1024*768的屏幕物理坐标 (0,0) (1024,0)
(0,768)
2、设备坐标空间
基于设备上下文指定的坐标空间。如窗口内显示的文本,使用的坐标就是基于窗口内上下文的坐标。
可以看到设备空间是物理空间体系的一个子空间。设备空间可以依赖于一个窗口。换句话可以把设备空间理解为在物理空间上显示的一个对象,其子空间。 下面我们通过一个小例子理解物理空间和设备空间
在窗口的标题条,以设备坐标,和物理坐标的形式显示鼠标在窗口内的位置
WndProc处理消息循环
WM_MOUSEMOVE,鼠标移动时消息标识,是个整数。其参数lParam,的第16位代表设备坐标中的X,高16位代表设备坐标的Y。 POINT 是结构体。只有x,y两个成员 ClientToScreen,将设备坐标转换为屏幕坐标(物理坐标) sprintf:格式化字符串
SetWindowText:设Window标题
3、页面坐标空间(逻辑坐标空间的一种)
作用,可以任意指定坐标原点,坐标轴方向,比例尺等信息。可以用来与设备无关的大小如厘米,毫米等。
页面坐标叫窗口,其表示有原点(X,Y),宽度,高度组成(WIDTH,HEIGHT) 设备坐标叫视口,其表示有原点(x,y),宽度,高度组成(width,height)
页面坐标和设备坐标的变换关系,大写为设备坐标,小写为页面坐标
PX=X+(px-x)*WIDTH/width PY=Y+(py-y)*HEIGHT/height
px=x+(PX-X)*width/WIDTH py=y+(PY-Y)*heigh/HEIGHT
GDI函数使用页面坐标,显示出来时是设备坐标
通过对窗口,是否对应的四个参数的设置,可以实现特殊的变换。 页面坐标是逻辑坐标的一种。在这个例子中我们一直使用 MoveToEx(ps.hdc,0,0,NULL);
LineTo(ps.hdc,30,30); 划线,MoveToEx是把画笔移动到指定位置(页面坐标),LineTo是从画笔所在位置到目标位置画一条线。
在这个例子中,每次划线前通过设置视口,窗口结果使划线的结果不同。 这种形式的坐标转换无法实现旋转
4、世界坐标空间(逻辑坐标空间的另一种) 功能:比页面坐标空间方便,可以实现旋转 结构体 XFORM{ FLOAT eM11, FLOAT eM12, FLOAT eM21, FLOAT eM21, FLOAT eDx, FLOAT eDy, } 世界坐标到设备坐标的变换。小写到大写。 PX=eM11*px+eM21*py+eDx; PY=eM12*px+eM22*py+eDy; 默认为{1,0,0,1,0,0} 和设备坐标相同 {1001dxdy} {mx00my00}缩放 {-100-100}映像
旋转{cos(a),sin(a),-sin(a),cos(a),0,0}顺时针旋转a度 {cos(a),-sin(a),sin(a),cos(a),0,0}逆时针旋转a度
我们下面的例子通过Rectangle(ps.hdc,0,0,50,50);绘制50*50的矩形,用循环配合世界坐标变换绘制特殊的图形
循环20次,每次旋转坐标轴的方向,绘制正方形。 总结:
物理坐标指的是屏幕坐标,不能改变坐标轴 设备坐标指的是窗口坐标,不能改变坐标轴
页面坐标和世界坐标均是逻辑坐标,可以改变坐标轴,世界坐标功能更强,可以旋转。理解这些概念的绘图是很重要的。
相关函数
BOOL ClientToScreen( HWND hWnd, LPPOINT lpPoint); 设备坐标转屏幕坐标
BOOL ScreenToClient( HWND hWnd,
LPPOINT lpPoint); 屏幕坐标转设备坐标 int MapWindowPoints( HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT cPoints);
各个窗口设备坐标之间的转换
BOOL SetWindowOrgEx( HDC hdc, int X,
int Y,
LPPOINT lpPoint ); 设置窗口的原点
SetViewportOrgEx( HDC hdc,
int X,
int Y,
LPPOINT lpPoint); 设置视口的原点
BOOL SetViewportExtEx( HDC hdc, int nXExtent, int nYExtent,
LPSIZE lpSize); 设置视口的width,height BOOL SetWindowExtEx( HDC hdc, int nXExtent,
int nYExtent, 设置窗口的width,height SetMapMode设置页面坐标的映射模式 SetGraphicsMode设置世界坐标的映射模式 Rectangle绘制矩形,并填充内部 SetWorldTransform设置世界坐标变换 LineTo:换线
MoveToEx:移动画笔
SetWindowText设置窗口标题
LPtoDP(hdc,LPPOINT,int)把逻辑坐标点转换为设备坐标点 作业:
使用movetoex,lineto,LPtoDP及世界坐标变换,绘制正六边形
LPSIZE lpSize );
提示:
画一条水平线后,将坐标原点移动到线的末尾,并将坐标轴旋转60度*n,重复上步 要将坐标移动到线尾需要使用LPtoDP
第四课 色彩及绘制(6学时)
(1)画点
像素:计算机屏幕上的一个点。是计算机屏幕显示的最小单位。点的个数取决于计算机的分辨率。如1024*768,则屏幕由1024*768个点组成。每个点都可以独立的显示一个颜色。计算机能够表示的颜色有256*256*256=16777216种。 颜色的表示 COLORREF 。定义颜色RGB COLORREF color=RGB(红,绿,蓝) 随机绘制颜色点
需要#include srand:随机种子函数,传递的参数不同,可以生成不同的随机数序列
GetTickCount(): API函数,得到系统开机后到现在的滴答数,特点就是每次返回的结果不重复。
两者的配合得到不重复的随机数序列
rand得到函数
SetPixel设置某点的颜色
(2)画线
在以前的例子里我们一直用1个像素宽的黑色实现来画线。现在我们学习创建画笔,用画笔来画线。
步骤
1、创建画笔CreatePen(画笔类型,宽度,颜色)
2、将画笔选入设备上下文SelectObject
3、用画笔绘制
4、将画笔选出设备
5、删除创建的画笔对象
SelectObject是将GDI对象画笔选入设备上下文,并将当前的选出返回。因此我们两次使用SelectObject,最后一个将以前的画笔选入,返回我们创建的,并在下一步删除画笔。
虚线只能支持宽度1.
画线函数
Polygon(HDC,LPPOINT,INT).连接指定点,画多边形,封闭。如果画4边形则确认3个点即可。
Polyline(HDC,LPPOINT,INT).连接指定点,画多边,不封闭 MoveToEx:移动画笔
LineTo:用当前的画笔划线
Arc:画圆弧 BOOL Arc( HDC hdc, int nLeftRect, int nTopRect, int nRightRect,
int nBottomRect, int nXStartArc,
int nYStartArc,
int nXEndArc,
int nYEndArc
); 前4个是画圆弧的矩形,后四个指定了弧开始和结束的位置 作业:画一条正弦曲线
使用SexPixel,LineTo,MoveToEx实现
(3)画面
画面就是用画刷来填充 步骤
1、创建画刷CreateSolidBrush(颜色)
2、将画刷选入设备上下文SelectObject
3、用画刷填充
4、将画刷选出设备
5、删除创建的画刷对象
用蓝色画刷填充矩形,矩形的边框是黑色。 CreateSolidBrush:创建颜色画刷
Rectangle:绘制矩形,用当前的Pen绘制边框,用当前的Brush来填充矩形内部 FillRect:画刷填充矩形。FillRect(hdc,&RECT,HBRUSH)
使用FillRect不绘制边框,因为参数中有画笔,也不用SelectObject了。 Ellipse:椭圆,圆。画边框,填充 Pie:圆饼 (4)位图
将文件系统中的位图显示到窗口中。 绘制位图步骤
1、根据现有的设备上下文创建兼容的设备上下文
2、加载位图
3、绘制图像
4、删除加载的位图
5、删除兼容的设备上下文
BitBlt是在设备上下文之间拷贝图像的函数,非常常用
在上一个列子的基础上,得到位图的大小并绘制实际大小的位图 作业:
在一个窗口上显示一副位图文件(*.bmp)。 (5)字体和文本
创建逻辑字体并显示文本 步骤
1、创建逻辑字体
2、选入字体
3、输出文本
4、选出字体
5、删除字体
另一个与文本绘制有关的功能更强的函数是DrawText 总结:本课介绍了一些基本的绘图操作,其中涉及了较多的函数,这里只是介绍了基本的使用方式和原理。 函数 srand rand GetClientRect SetPixel LineTo MoveToEx CreatePen CreateSolidBrush CreateFontIndirect BitBlt SelectObject DeleteObject CreateCompatibleDC LoadImage Rectangle FillRect DeleteDC 等等。
第五课 常用控件的使用(6学时)
在上面的几节课程中我们学习了如何建立Windows 应用,并在图形环境下绘制图形。这些操作都是控制台应用中没有的。本章我们介绍如何在窗口中加入按钮等常规控件,并且处理它们。
一般控件种类,按钮,列表组合,编辑,列表,滚动条,静态文本。控件是一种特殊的窗口。这些特殊窗口的类已经由Windows系统注册了,不需要我们注册。这些类的名字分别为。
BUTTON,COMBOBOX,EDIT,LISTBOX,SCROLLBAR,STATIC (1) 创建
任何时候均可,但通常在WM_CREATE事件中处理
WM_CREATE是在窗口创建时触发 WM_DESTORY是在窗口销毁时触发
控件用CreateWindow创建,返回控件窗体的句柄,窗体的类型一定为WS_CHILDWINDOW。附加的类型以或关系叠加。具体要参见MSDN (2) 操控
控制这些控件是通过向这些控件的窗体句柄发送特点消息来实现的 如 SendMessage(控件句柄,消息指,参数1,参数2)具体设置参见MSDN 在上面的例子,我们处理下拉列表的时候使用了SendMessage发送消息 (3) 反馈
我们操作控件会触发控件的事件得到一些反馈,下面介绍如何得到这些反馈。总体上,我们把这些反馈过程叫通知。通知的过程是将反馈发送给父窗体,一般父窗体有两个事件接收控件的反馈
WM_NOTIFY,WM_COMMAND。 WM_COMMAND HIWORD(wParam)通知消息号 LOWORD(wParam)控件标识 WM_NOTIFY wParam :控件标识 lParam:NHMDR的指针
比如按钮的单机对应的事件是BN_CLICKED。该事件通过WM_COMMAND通知。
我们把上个例子补充完整,并且为每个控件指定ID,指定的方式是在(HMENU)的后面写个整数,原则上应该不同。
HIWORD,得到一个字的高字节。LOWORD得到一个字的低字节。 (4) 通用控件
我们上面介绍的是基本的控件,除了这些基本控件外还有一些通用控件。这些控件的使用和处理和基本的控件差不多,但功能更强大。 ANIMATE_CLASS : 动画控件,播放AVI动画 DATETIMEPICK_CLASS :日期时间下拉控件 HOTKEY_CLASS :定义热键的控件 MONTHCAL_CLASS : 月份选择控件 PROGRESS_CLASS :进度条控件 REBARCLASSNAME :rebar控件 STATUSCLASSNAME:状态条控件 TOOLBARCLASSNAME :工具条 TOOLTIPS_CLASS :提示控件 TRACKBAR_CLASS :轨迹条 UPDOWN_CLASS :上下箭头
WC_COMBOBOXEX :组合框扩展 WC_HEADER :头控件
WC_IPADDRESS :IP地址控件 WC_LISTVIEW :listview控件
WC_PAGESCROLLER :页滚动控件 WC_TABCONTROL :tabControl控件 WC_TREEVIEW :树视图控件
通用控件在使用前使用InitCommonControlsEx初始化。 使用这些通用控件要include 同时在连接时要连接 comctl32.dll
头部
这些控件和IE有关系,根据IE版本不同,控件的外观和功能有区别。
(5) 创建菜单
CreateMenu:创建一个菜单
CreatePopupMenu:创建一个子菜单 AppendMenu:向菜单增加项目 SetMenu:将菜单联系到窗口
第六课 进程及线程(2学时)
进程:是一个正在运行的程序的实例。由两个部分组成
1、一个是操作系统用来管理进行的内核对象。内核对象是系统用来存放关于进程信息的地方。
2、地址空间,每个进行都有自己的地址空间
进程本身不执行代码,进程要至少拥有一个线程,由线程来执行代码。每个线程都拥有自己的CPU寄存器和堆栈。当创建一个进程时系统会自动创建一个主线程。
CreateProcess创建进程
内部执行细节:1 创建一个小的结构存放进程信息
2 分配地址空间
3 创建一个小的结构存放线程信息
4 执行C/C++启动代码,最终会调用WinMain或main。 结束一个进程 TerminateProcess
TerminateProcess 1 使用ToolHelp遍历系统进程
列举系统全部的进程
需要
#include #include using namespace std;
线程
线程由两个部分组成
1 内核对象
2 线程堆栈,用于维护执行代码时所有的函数参数和局部变量 进程是活波的,进程不执行任何东西,它是线程的容器。线程在进程的地址空间中执行代码。如果一个进程拥有多个线程则这些线程共享进程地址空间内的代码和数据。进程的地址空间要比线程占用更多的系统资源,因此要更多的使用线程。每个线程必须有个入口点函数,主线程是main,WinMain。如果要创建一个线程,则这个线程的函数原型是这样的。 DWORD WINAPI ThreadProc(PVOID pvParm) {
return value; } 因为线程会共享全局变量,因此多线程应该少使用全局变量 1 线程创建
线程的创建不能直接使用CreateThread API函数。而要使用C编译环境自带的创建进程函数。
#include unsigned uThreadid=0; uintptr_t hThread=
_beginthreadex(NULL, 0,ThreadProc,NULL,CREATE_SUSPENDED,&uThreadid); 第3个参数是线程函数地址,第4个参数是传递到线程的LPVOID,第5个参数为0线程马上运行、CREATE_SUSPENDED需要激活才能运行。最后一个保存线程的ID 进程和线程ID是一个标识。不重复。进程和线程对象是系统对象,关闭这些对象对进程和线程的运行没有影响。
第7课 线程的调度和同步(6学时) 线程暂停:
创建时使用CREATE_SUSPENDED创建一个暂停的线程
使用SuspendThread暂停线程
长时间不使用窗体 恢复线程:
ResumeThread
ResumeThread和SuspendThread使用次数要对应。
休眠线程 Sleep(毫秒) 线程的同步是比较容易出错的地方,要多多实践和理解。 参见线程冲突的例子。
每个线程对变量g累加10000次,创建6个线程,这是其中一次的运行结果。可以看到结果不是60000.
对线程冲突问题的解释
一条C的g++对应的汇编指令为3条 mov eax,[g] inc eax mov [g],eax
如果我们创建两个线程,这两个线程将共享上面的代码。如果只有一个CPU的话,那同一时刻只能志执行一条汇编指令。但Windows的调度机制可以保证代码按顺序执行,但不能保证不被打断。 举例 g=0 mov eax,[g] //1 eax=0 inc eax
//1 eax=1 mov [g],eax //1 g=1 eax=1 mov eax,[g] //2 eax=1 inc eax
//2 eax=2 mov [g],eax //2 g=2 eax=2 1和2两个线程分别执行上面的3行代码,则g被加了两次,得到2。但实际上这是多线程的特例。真实的情况是CPU下条要执行那个线程的代码是随机的。如下
g=0 mov eax,[g] //1 eax=0 inc eax
//1 eax=1 mov eax,[g] //2 eax=0 inc eax
//2 eax=1 mov [g],eax //2 g=1 eax=1 mov [g],eax //1 g=1 eax=1
线程1在增加后没有及时赋值给g,然后线程2执行。最后g为1。这就是线程没有同步导致的问题,也是我们程序中出现的问题。 解决方法(1) 原子操作函数
使用InterlockedExchangeAdd,加减
InterlockedExchange 赋值
InterlockedCompareExchange 比较赋值
使用这些函数加减变量,保证只有执行完后其他进程才能进入。
结果是60000了,但是按理应该输出六次“线程运行了结束了”。但只显示两次,其实每次的结果多不会一样。这也是并发带来的问题。
解决方法(2) 关键代码段
在使用关键段之前使用该函数
输出了6次,但每次对应的g值不一定以10000递增。如果把进入关键段的位置提前到最前面可以得到常规的理解
这时这6个进程某种意义上没有并发执行。
局限:关键代码段只能在一个进程内使用,没有等待时长的限制容易死锁。 解决方法(3) 内核对象 具备通知状态的内核对象 进程 线程 作业
文件修改通知 事件
可等待定时器 文件 信标
控制台输入 互斥对象 举个例子
取消注释后,一次显示一个。体现了该函数对线程的控制。
(1)事件控制
尽管WaitForSingleObject可以等待很多对象的反应,但其主要还是用来处理事件等对象。 事件是一种内核对象,有两个状态,一个用于表示该事件是自动重置事件还是人工重置事件。人工重置事件等待该事件的线程都会得到通知,自动重置事件只有一个线程会得到通知。另一个是事件的通知状态。一是未通知状态线程等待,一个是已通知状态,线程运行。 CreateEvent( NULL,自动(false)还是手工(true),通知(true)未通知(false)。 HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes,
BOOL bManualReset,
BOOL bInitialState,
LPTSTR lpName ); 最后一个是为事件起个名字,同名事件不能建立两次。保证同名事件只能建立一次,可以为空。 SetEvent:设为已通知状态 ResetEvent:设为未通知状态
OpenEvent:打开一个已经存在的时间,返回Handle
创建自动通知,立即通知事件
对自动通知事件SetEvent有意义,对手工通知事件无意义。 手工通知同时显示6个窗口,自动通知一次显示1个 (2)信标内核对象
使用信标可以确定让几个线程同时运行
CreateSemaphore(NULL,初始数,最大数,名称) OpenSemaphore
最多同时有3个线程运行。 (3)互斥对象
互斥对象和关键代码段的作用相同,效率比关键代码段低。但运行不同进程间使用互斥对象,同时可以设置最大的等待时长。互斥对象和其他内核对象的区别,互斥对象可以记录调用的线程ID,一旦线程得到该对象同线程的其他地方的等待将不会等待。 CreateMutex(NULL,初始等待,名称) OpenMutex(0,NULL,名称) ReleaseMutex(HANDLE),只能是否本线程得到的对象
(4)
第四篇:windows实验一
(1)在“student1”文件夹下建立一个名为“课题组”的文件夹,并于此文件夹下新建下列子文件夹:
“个人简介、我的论文、教改成果、教学资源、资料”;在文件夹“教学资源”下新建子文件夹:“图片、课件、教案”;在文件夹“资料”中新建文件夹:“文本文件类、压缩文件类”。
(2)在“student1”文件夹中新建word文件,文件名为“文学作品.doc”,将该文件的属性设置为隐藏。
(3)设置最后一个硬盘盘所有文件和文件夹的显示方式为:显示隐藏文件,不隐藏已知文件的类型的扩展名。
(4)设置文件夹“student1”的显示方式为详细信息。
(5)查找系统提供的应用程序calc.exe,并在桌面上建立其快捷方式,快捷方式命名为“计算器”
(6)将子文件夹“dos”中的含有“X”字母的文件移动到“student1课题组教改成果”文件夹中。
(7)用附件——画图 画一个蓝色的三角形,并保存为扩展名为PNG的文件,放到图片文件夹。
(8)在“个人简介“文件夹中,创建一记事本文件,文件名”个人简介“,内容:学号,姓名,性别,爱好等,并将文件属性设置为只读,存档。
(9)将“开始”菜单“所有程序附件”中的记事本程序锁定到任务栏
(10)搜索一张关于“薰衣草”的图片,并将该图片设置为自己的桌面,隐藏任务栏,将桌面截图,截图文件名为“桌面”并保存在"student1教学资源图片"文件夹中。
(11)搜索c盘中的压缩文件,并将找到的文件复制到文件夹“student1资料压缩文件类”中。
(12)查找C盘上扩展名为.gif,文件大小在10KB—100KB的文件。选择2个拷贝到文件夹"student1win"中。
(13)删除文件夹“student1”中的子文件夹“linux”。
(14)使用计算器选择“科学型”和“程序员型”,将计算结果写在记事本中,并以“计算结果”为名保存到student1文件夹中。
(a)计算十进制数2013,用二进制、八进制、十六进制各表示为多少?
(b)换算:100加仑等于多少立方米?100磅等于多少千克?
(c)日期计算:从今天到2013年12月31日还有多少天?
(15)将文件夹“student1”移入张三文件夹,再将张三文件夹改为自己的学号+姓名。
将自己的文件夹压缩,并把压缩文件上传到老师指定地址。
第五篇:window.showModalDialog()
基本介绍:
showModalDialog() (IE 4+ 支持)
showModelessDialog() (IE 5+ 支持)
window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框。
window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。
使用方法: vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures]) vReturnValue = window.showModelessDialog(sURL [, vArguments] [,sFeatures])
参数说明:
sURL--
必选参数,类型:字符串。用来指定对话框要显示的文档的URL。
vArguments--
可选参数,类型:变体。用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。
sFeatures--
可选参数,类型:字符串。用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。
1.dialogHeight :对话框高度,不小于100px,IE4中dialogHeight 和 dialogWidth 默认的单位是em,而IE5中是px,为方便其见,在定义modal方式的对话框时,用px做单位。
2.dialogWidth: 对话框宽度。
3.dialogLeft: 离屏幕左的距离。
4.dialogTop: 离屏幕上的距离。
5.center: {yes | no | 1 | 0 }:窗口是否居中,默认yes,但仍可以指定高度和宽度。
6.help: {yes | no | 1 | 0 }:是否显示帮助按钮,默认yes。
7.resizable: {yes | no | 1 | 0 } [IE5+]:是否可被改变大小。默认no。
8.status: {yes | no | 1 | 0 } [IE5+]:是否显示状态栏。默认为yes[ Modeless]或no[Modal]。
9.scroll:{ yes | no | 1 | 0 | on | off }:指明对话框是否显示滚动条。默认为yes。
下面几个属性是用在HTA中的,在一般的网页中一般不使用。
10.dialogHide:{ yes | no | 1 | 0 | on | off }:在打印或者打印预览时对话框是否隐藏。默认为no。
11.edge:{ sunken | raised }:指明对话框的边框样式。默认为raised。
12.unadorned:{ yes | no | 1 | 0 | on | off }:默认为no。
参数传递:
1.要想对话框传递参数,是通过vArguments来进行传递的。类型不限制,对于字符串类型,最大为4096个字符。也可以传递对象,例如:
parent.htm
var obj = new Object();
obj.name="i5tt";
window.showModalDialog("modal.htm",obj,"dialogWidth=200px;dialogHeight=100px");
modal.htm
var obj = window.dialogArguments
alert("您传递的参数为:" + obj.name)
2.可以通过window.returnValue向打开对话框的窗口返回信息,当然也可以是对象。例如: ------------------------------
parent.htm
str =window.showModalDialog("modal.htm",,"dialogWidth=200px;dialogHeight=100px"); alert(str);
modal.htm
window.returnValue="http://";