请教,右击TreeCtrl如何判断是否发生在节点上及如何选择被右击的节点

xiaosun 2001-11-21 10:55:10
1.如何判断是否发生在一个树节点上
2.右击后焦点又会跳回原选择的节点,如何右击节点即选择它
谢谢
...全文
52 1 打赏 收藏 举报
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xiaosun 2001-11-21
解决了。
  • 打赏
  • 举报
回复
相关推荐
1.JPDL的流程定义元素 1)第一层:GraphElement 这个容易理解,因为画流程定义时,每个拖拉的对象都是一个graph的元素。GraphElement有四个属性: (1)processDefine 表示当前元素属于哪个流程定义 (2)events 表示可以接收哪些event (3)name 名字 (4)exceptionHandlers 异常处理类集合(List) 2)第二层:node、processDefinition、Transition、Task 它们都继承自GraphElement (1)processDefinition表示流程定义(implements NodeCollection),它有下面的属性:name、version、nodes、startState。nodes表示流程中所有的node,startState用于启动流程时找到首节点。 (2)Transition表示转移,它有三个属性:from(Node),to(Node),supportedEventTypes表示支持的event类型 (3)node表示节点,它有四个属性:leaving transitions、arriving transitions、action、superState。 (4)Task 定义任务 3)第三层:各种不同的node 它们都继承自node。 Decision、EndState、Fork、Join、Merge、Milestone、 InterleaveEnd、InterleaveStart、ProcessState、State。 2.jBPM的token jbpm中最重要的概念,应该是令牌(Token)和信令(Signal)。整个流程实例运行过程中,我们可以迅速的利用token得到其当前的current state。解决“并行”等(比如Fork)问题时,jBpm让Token对象维护了父子关系,这种关系涉及到Fork的时候会产生。 jBpm让Token这个对象身兼了多种使命: (1)快速定位current state (2)用于fork,join算法 (3)用于告知任务执行者的任务索引。 如下代码: //pd是process definition,pi是process instance ProcessInstance pi = new ProcessInstance( pd ); //得到根令牌 Token token = pi.getRootToken(); //发信令 token.signal(); Token的signal方法也可以传入transition参数,这个方法把信令发送给Token,这样,令牌将激活,并沿指定的transition离开当前的状态(如果没有指定transition,将沿缺省的transition 离开当前状态)。 jbpm是怎么实现的呢?其实很简单: 1)Token记录了当前的状态(current state),只有当前的状态(或称节点)拥有该令牌 2)向TOKEN发signal后,当前状态收到该signal 3)当前状态把令牌传给signal中指定的transition 4)transition收到令牌后,不强占,马上把令牌传给下个状态. 5)根据令牌的位置,流程的状态已经发生改变. 3.process definition 一个process definition代表了一个正式的业务流程,它以一个流程图为基础。这个流程图由许多node和transition组成。每个node这个流程图里都有着各自特殊的类型,这些不同的类型决定了node运行时的不同行为。一个process definition只有一个start state 。 4.token 一个token代表了一条执行路径,它包含了这条执行路径的当前的执行状态(current state)。 5.process instance 一个process instance(流程实例)即一个process definition(流程定义)的流程执行实例。一个process definition可以对应多个process instance。当一个process instance创建的时候,一个主执行路径token同时创建,这个token叫做root token,它指向流程定义的start state(processDefinition.getStartState()==token.getNode())。 6.signal 一个signal 发送给token通知token 继续流程的执行。如果signal 没有指定transition,token将沿缺省的transition离开当前状态,如果signal 指定transition,token将沿指定的transition离开当前的状态。看源代码可以看到发给process instance的signal 其实都是发送给了root token。 7.Actions jbpm提供了灵活的action ,当流程执行,token 进入node和transition时,会触发相应的一些event(事件)。这些event上附上我们自己写的action,就会带动action 的执行。action里是我们自己的相关java操作代码,非常方便。注意的是event(事件)是内置的,无法扩展。另外,action也可以直接挂node上,而不依赖于event(事件)的触发,这个很重要。 8.node 一个流程图由许多node和transition组成。每个node都有一种类型,这个类型决定了当流程执行到这个node时的不同行为。jbpm有一组node type可以供你选择,当然你可以定制自己node 。 node的作用 node有两个主要的作用: 1)执行java代码,比如说创建task instance(任务实例)、发出通知、更新数据库等等。很典型的就是node 上挂上我们的action 2) 控制流程的执行: A、等待状态:流程进入到这个node时将处于等待状态,直到一个signal 的发出 B、流程将沿着一个leaving transition越过这个node,这种情况特殊一点,需要有个action挂这个node上(注意这个action不是event触发的!),action中将会调用到API里 executionContext.leaveNode(String transitionName),transitionName即这里的leaving transition名字。 C、创建新的执行路径: 很典型的就是fork node。流程这里会分叉,产生新的执行路径。这样就创建了新的token,每个新的token代表一个新的执行路径。注意的是,这些新的token和产生前的token是父子关系! D、结束执行路径:一个node可以结束一条执行路径,这同样意味着相应的token的结束和流程的结束。 9.流程图中的node type 1)task-node 一个task-node可以包含一个或多个task,这些task分配给特定的user。当流程执行到task-node时,task instance将会创建,一个task对应一个task instance。task instances 创建后,task-node就处于等待状态。当所有的task instances特定的user执行完毕后,将会发出一个新的signal 到token,即流程继续执行。 2)state state是一个纯粹的wait state(等待状态)。它和task-node的区别就是它不会创建task instances。很典型的用法是,当进入这个节点时(通过绑定一个action到node-enter event),发送一条消息到外部的系统,然后流程就处于等待状态。外部系统完成一些操作后返回一条消息,这个消息触发一个signal 到token,然后流程继续执行。(不常用) 3)decision 当需要流程中根据不同条件来判断执行不同路径时,就可以用decision节点。两种方法:最简单的是transitions里增加condition elements(条件),condition是beanshell script写的,它返回一个boolean。当运行的时候,decision节点将会它的 leaving transitions里循环,同时比较 leaving transitions里的condition,最先返回'true'的condition,那个leaving transitions将会执行;作为选择,你可以实现DecisionHandler接口,它有一个decide()方法,该方法返回一个String(leaving transition的名字)。 4)fork fork节点把一条执行路径分离成多条同时进行(并发)的执行路径,每条离开fork节点的路径产生一个子token。 5)join 默认情况下,join节点会认为所有到达该节点的token都有着相同的父token。join 节点会结束每一个到达该节点的token,当所有的子token都到达该节点后,父token会激活。当仍然有子token处于活动状态时,join 节点是wait state(等待状态)。 6)node node节点就是让你挂自己的action用的(注意:不是event触发!),当流程到达该节点时,action会执行。你的action要实现ActionHandler接口。同样,你的action里要控制流程。 10. Actions的说明 存两种action,一种是 event触发的action,一种是挂node 节点的action。要注意它们的区别,event触发的action无法控制流程,也就是说它无法决定流程经过这个节点后下一步将到哪一个leaving transition;而挂node 节点的action就不同,它可以控制流程。不管是哪一种action都要实现ActionHandler接口。 11. Task(任务) jbpm一个相当重要的功能就是对任务进行管理。Task(任务)是流程定义里的一部分,它决定了task instance的创建和分配。Task(任务)可以task-node节点下定义,也可以挂process-definition节点下。最普遍的方式是task-node节点下定义一个或多个任务。默认情况下,流程task-node节点会处于等待状态,直到所有的任务执行完毕。任务的名称整个流程中必须是唯一的。一个TaskNode对应多个Task。 对于这样的流程定义: xml 代码 1. 2. 3. 4. 5. 6. 只有当节点中的三个任务都完成后,流程才进入后面的节点 对于这样的流程定义: xml 代码 1. > 2. 3. 4. 5. 6. 当第一个任务完成后,token就指向后面的节点 对于这样的流程定义: xml 代码 1. > 2. 3. 4. 5. 6. 三个任务都完成后,token仍然不会指向后面的节点;需要自己手动调用processInstance.signal()才会驱动流程到下面的节点。 对于这样的流程定义: xml 代码 1. > 2. 3. 4. 5. 6. token不会节点停留,而是直接到后面的节点 12. jbpm的任务管理实现 一个Task instance(任务实例)可以分配给一个actorId (java.lang.String)。所有的Task instance都保存数据库中的表jbpm_taskinstance里。当你想得到特定用户的任务清单时,你就可以通过一个与用户关联的actorId来查询这张表。 一个流程定义有一个TaskMgmtDefinition;一个TaskMgmtDefinition对应多个swimlane,同时对应多个task;一个swimlane有多个task,可以从TaskMgmtDefinition中通过task的名称直接获取相应的task; swimlane对象有四个属性,分别是name(名字)、assignmentDelegation(分配代理类)、taskMgmtDefinition、tasks(Set 对应多个task),可以增加task task对象主要的属性:taskMgmtDefinition、swimlane、assignmentDelegation、taskNode,需要注意的是swimlane和assignmentDelegation中间只是可以一个属性有值,因为它们都和任务的分配有关系。 一个流程实例有一个TaskMgmtInstance;一个TaskMgmtInstance对应多个swimlaneInstance,同时对应多个taskInstance;一个swimlaneInstance有多个taskInstance,可以从TaskMgmtInstance中直接获取相应的taskInstance; swimlaneInstance对象主要有五个属性,分别是name、actorId、pooledActors(Set)、swimlane、taskMgmtInstance。 taskInstance对象的主要属性:name、actorId、task、swimlaneInstance、taskMgmtInstance、pooledActors。 当对任务进行分配时,一般需要实现AssignmentHandler这个接口,这个接口的方法只有一个: void assign( Assignable assignable, ExecutionContext executionContext) throws Exception; 一个典型的实现(把名字是'change nappy'的任务交给NappyAssignmentHandler这个类来分配) xml 代码 1. 2. 3. task> NappyAssignmentHandler类: java 代码 1. public void assign(Assignable assignable, ExecutionContext executionContext) { 2. assignable.setActorId("papa"); 3. } 同样,Assignable只是一个接口,它有两个方法:setActorId()和setPooledActors(),Assignable的具体实现类也是两个:swimlaneInstancehe和taskInstance。这样就不不难理解整个任务分配流程了: 1、流程进入TaskNode节点,执行TaskNode类的execute()方法,该方法首先获得TaskMgmtInstance实例,然后通过它来创建TaskInstance。taskMgmtInstance.createTaskInstance(task, executionContext); 2、上面的createTaskInstance(task, executionContext)里,该方法调用了taskInstance.assign(executionContext)对taskInstance进行分配。 3、assign(executionContext)方法里,首先会判断task属性里是否swimlane,如果有的话,这个taskInstance就会分配给swimlane指定的ActorId或 PooledActors;如果不存,再去找task属性里 assignmentDelegation(分配代理类)通过代理类(即我们自己写的实现AssignmentHandler这个接口的类)指定ActorId或 PooledActors。 13. jbpm的用户角色管理 jbpm用户角色管理上共设计了四个类:Entity、Membership、Group、User。 Entity类是其他三个类的父类,它包含了两个属性:name(String)、permissions(Set); User类继承Entity类,包含三个属性:password(String)、email(String)、memberships(Set); Group类继承Entity类,包含四个属性: type(String)、parent(Group)、children(Set)、memberships(Set); Membership类继承Entity类,包含三个属性:role(String)、user(User)、group(Group) 很明显,一个user对应一个用户,一个group对应一个用户组,它们之间通过membership关联,并且一个user可以属于多个不同类型(type)的group,user和 group之间是多对多的关系。Membership类的role属性个人感觉用途不大,反倒是name属性代表了usergroup里的role(角色)。
远程连接sql server 2000服务器的解决方案 一.看ping 服务器IP能否ping通。 这个实际上是看和远程sql server 2000服务器的物理连接是否。如果不行,请检查网络,查看配置,当然得确保远程sql server 2000服务器的IP拼写正确。 二.Dos或命令行下输入telnet 服务器IP 端口,看能否连通。 如telnet 202.114.100.100 1433 通常端口值是1433,因为1433是sql server 2000的对于Tcp/IP的默认侦听端口。如果有问题,通常这一步会出问题。通常的提示是“……无法打开连接,连接失败"。 如果这一步有问题,应该检查以下选项。 1 检查远程服务器是否启动了sql server 2000服务。如果没有,则启动。 2 检查服务器端有没启用Tcp/IP协议,因为远程连接(通过因特网)需要靠这个协议。检查方法是,服务器上打开 开始菜单->程序->Microsoft SQL Server->服务器网络实用工具,看启用的协议里是否有tcp/ip协议,如果没有,则启用它。 3 检查服务器的tcp/ip端口是否配置为1433端口。仍然服务器网络实用工具里查看启用协议里面的tcp/ip的属性,确保默认端口为1433,并且隐藏服务器复选框没有勾上。 事实上,如果默认端口修改,也是可以的,但是客户端做telnet测试时,写服务器端口号时必须与服务器配置的端口号保持一致。如果隐藏服务器复选框勾选,则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接,但是Tcp/ip协议的默认端口将隐式修改为2433,客户端连接时必须作相应的改变。 4 如果服务器端操作系统打过sp2补丁,则要对windows防火墙作一定的配置,要对它开放1433端口,通常测试时可以直接关掉windows防火墙(其他的防火墙也关掉最好)。 5 检查服务器是否1433端口侦听。如果服务器没有tcp连接的1433端口侦听,则是连接不上的。检查方法是服务器的dos或命令行下面输入 netstat -a -n 或者是netstat -an,结果列表里看是否有类似 tcp 127.0.0.1 1433 listening 的项。如果没有,则通常需要给sql server 2000打上至少sp3的补丁。其实服务器端启动查询分析器,输入 select @@version 执行后可以看到版本号,版本号8.0.2039以下的都需要打补丁。 如果以上都没问题,这时你再做telnet 服务器ip 1433 测试,将会看到屏幕一闪之后光标左上角不停闪动。恭喜你,你马上可以开始企业管理器或查询分析器连接了。 三.检查客户端设置 程序->Microsoft SQL Server -> 客户端网络使用工具。像服务器网络实用工具里一样,确保客户端tcp/ip协议启用,并且默认端口为1433(或其他端口,与服务器端保持一致就行)。 四.企业管理器里或查询那分析器连接测试 企业管理器->右键SQlserver组->新建sqlserver注册->下一步->写入远程IP->下一步->选Sqlserver登陆->下一步->写入登陆名与密码(sa,password)->下一步->下一步->完成 查询分析器->文件->连接->写入远程IP->写入登录名和密码(sa,password)->确定 通常建议查询分析器里做,因为默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是4秒,而查询分析器是15秒。 修改默认连接超时的方法: 企业管理器->工具->选项->弹出的"SQL Server企业管理器属性"窗口中,点击"高级"选项卡->连接设置-> 登录超时(秒) 后面的框里输入一个较大的数字 查询分析器->工具->选项->连接-> 登录超时(秒) 后面的框里输入一个较大的数字 通常就可以连通了,如果提示错误,则进入下一步。 五.错误产生的原因通常是由于SQL Server使用了"仅 Windows"的身份验证方式,因此用户无法使用SQL Server的登录帐户(如 sa )进行连接。解决方法如下所示:  1 服务器端使用企业管理器,并且选择"使用 Windows 身份验证"连接上 SQL Server。   2 展开"SQL Server组",鼠标右键点击SQL Server服务器的名称,选择"属性",再选择"安全性"选项卡。   3 "身份验证"下,选择"SQL Server和 Windows "。   4 重新启动SQL Server服务。(dos或命令行下面net stop mssqlserver停止服务,net start mssqlserver启动服务,也是一种快捷的方法)。 附注:连接本地服务器时,通常使用的是命名管道协议(服务器网络实用工具里可以看到启用的协议有这个),默认端口是445,因此本地能连通是不能说明什么问题的,连接远程服务器是完全不同的协议) SQL Server连接中的四个最常见错误 ---------------------------------- 一."SQL Server 不存或访问拒绝" 这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多. 一般说来,有以下几种可能性: 1,SQL Server名称或IP地址拼写有误 2,服务器端网络配置有误 3,客户端网络配置有误 要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因. ============= 首先,检查网络物理连接 ============= ping 服务器IP地址/服务器名称> 如果 ping 服务器IP地址> 不成功,说明物理连接有问题,这时候要检查硬件设备,如网卡,HUB,路由器等. 还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,比如 ISA Server.防火墙软件可能会屏蔽对 ping,telnet 等的响应 因此检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有封闭的端口. 如果ping 服务器IP地址> 成功而,ping 服务器名称> 失败 则说明名字解析有问题,这时候要检查 DNS 服务是否正常. 有时候客户端和服务器不同一个局域网里面,这时候很可能无法直接使用服务器名称来标识该服务器,这时候我们可以使用HOSTS文件来进行名字解析, 具体的方法是: 1.使用记事本打开HOSTS文件(一般情况下位于C:\WINNT\system32\drivers\etc). 添加一条IP地址与服务器名称的对应记录,如: 172.168.10.24 myserver 2.或 SQL Server 的客户端网络实用工具里面进行配置,后面会有详细说明. ============= 其次,使用 telnet 命令检查SQL Server服务器工作状态 ============= telnet 服务器IP地址> 1433 如果命令执行成功,可以看到屏幕一闪之后光标左上角不停闪动,这说明 SQL Server 服务器工作正常,并且正监听1433端口的 TCP/IP 连接 如果命令返回"无法打开连接"的错误信息,则说明服务器端没有启动 SQL Server 服务, 也可能服务器端没启用 TCP/IP 协议,或者服务器端没有 SQL Server 默认的端口1433上监听. =============接着,我们要到服务器上检查服务器端的网络配置,检查是否启用了命名管道.是否启用了 TCP/IP 协议等等 ============= 可以利用 SQL Server 自带的服务器网络使用工具来进行检查. 点击:程序 -- Microsoft SQL Server -- 服务器网络使用工具 打开该工具后,"常规"中可以看到服务器启用了哪些协议. 一般而言,我们启用命名管道以及 TCP/IP 协议. 点中 TCP/IP 协议,选择"属性",我们可以来检查 SQK Server 服务默认端口的设置 一般而言,我们使用 SQL Server 默认的1433端口.如果选中"隐藏服务器",则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接. ============= 接下来我们要到客户端检查客户端的网络配置 ============= 我们同样可以利用 SQL Server 自带的客户端网络使用工具来进行检查, 所不同的是这次是客户端来运行这个工具. 点击:程序 -- Microsoft SQL Server -- 客户端网络使用工具 打开该工具后,"常规"项中,可以看到客户端启用了哪些协议. 一般而言,我们同样需要启用命名管道以及 TCP/IP 协议. 点击 TCP/IP 协议,选择"属性",可以检查客户端默认连接端口的设置,该端口必须与服务器一致. 单击"别名"选项卡,还可以为服务器配置别名.服务器的别名是用来连接的名称, 连接参数中的服务器是真正的服务器名称,两者可以相同或不同.别名的设置与使用HOSTS文件有相似之处. 通过以上几个方面的检查,基本上可以排除第一种错误. ----------------------------------------------------------------------------- 二."无法连接到服务器,用户xxx登陆失败" 该错误产生的原因是由于SQL Server使用了"仅 Windows"的身份验证方式, 因此用户无法使用SQL Server的登录帐户(如 sa )进行连接.解决方法如下所示: 1.服务器端使用企业管理器,并且选择"使用 Windows 身份验证"连接上 SQL Server 操作步骤: 企业管理器中 --右键你的服务器实例(就是那个有绿色图标的) --编辑SQL Server注册属性 --选择"使用windows身份验证" --选择"使用SQL Server身份验证" --登录名输入:sa,密码输入sa的密码 --确定 2.设置允许SQL Server身份登录 操作步骤: 企业管理器中 --展开"SQL Server组",鼠标右键点击SQL Server服务器的名称 --选择"属性" --再选择"安全性"选项卡 --"身份验证"下,选择"SQL Server和 Windows ". --确定,并重新启动SQL Server服务. 以上解决方法中,如果第 1 步中使用"使用 Windows 身份验证"连接 SQL Server 失败, 那就通过修改注册表来解决此问题: 1.点击"开始"-"运行",输入regedit,回车进入注册表编辑器 2.依次展开注册表项,浏览到以下注册表键: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer] 3.屏幕右方找到名称"LoginMode",双击编辑双字节值 4.将原值从1改为2,点击"确定" 5.关闭注册表编辑器 6.重新启动SQL Server服务. 此时,用户可以成功地使用sa企业管理器中新建SQL Server注册, 但是仍然无法使用Windows身份验证模式来连接SQL Server. 这是因为 SQL Server 中有两个缺省的登录帐户: BUILTIN\Administrators 机器名>\Administrator 删除. 要恢复这两个帐户,可以使用以下的方法: 1.打开企业管理器,展开服务器组,然后展开服务器 2.展开"安全性",右击"登录",然后单击"新建登录" 3."名称"框中,输入 BUILTIN\Administrators 4."服务器角色"选项卡中,选择"System Administrators" 5.点击"确定"退出 6.使用同样方法添加 机器名>\Administrator 登录. 说明: 以下注册表键: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode 的值决定了SQL Server将采取何种身份验证模式. 1.表示使用"Windows 身份验证"模式 2.表示使用混合模式(Windows 身份验证和 SQL Server 身份验证). ----------------------------------------------------------------------------- 三.提示连接超时 如果遇到第三个错误,一般而言表示客户端已经找到了这台服务器,并且可以进行连接, 不过是由于连接的时间大于允许的时间而导致出错. 这种情况一般会发生当用户Internet上运行企业管理器来注册另外一台同样Internet上的服务器, 并且是慢速连接时,有可能会导致以上的超时错误.有些情况下,由于局域网的网络问题,也会导致这样的错误. 要解决这样的错误,可以修改客户端的连接超时设置. 默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是 4 秒, 而查询分析器是 15 秒(这也是为什么企业管理器里发生错误的可能性比较大的原因). 具体步骤为: 企业管理器中的设置: 1.企业管理器中,选择菜单上的"工具",再选择"选项" 2.弹出的"SQL Server企业管理器属性"窗口中,点击"高级"选项卡 3."连接设置"下的"登录超时(秒)"右边的框中输入一个比较大的数字,如 20. 查询分析器中的设置: 工具 -- 选项 -- 连接 -- 将登录超时设置为一个较大的数字 --------------------------------------------------------------------------------- 四.大部分机都用Tcp/ip才能成功,有次我发现用Named Pipes才可以? 这是因为WINDOWS 2000以后的操作系统中,MS为解决SQL SERVER的安全问题将TCP/IP配置 为SQLSERVER的默认连接协议,你可以CLIENT NETWORK UTILITY中看到TCP/IP和NAME PIPE 的顺序。 你也可以: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib] "ProtocolOrder"=hex(7):74,00,63,00,70,00,00,00,00,00 看到默认的协议。 2.怎么程序中更改Named Pipes , Tcp/ip ,其sql语句怎么写? 你可以上面提到的注册表的位置修改: CLIENT端: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib] "ProtocolOrder"=hex(7):74,00,63,00,70,00,00,00,00,00 SERVER端: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib]
非常详细的资源,历时三天整理。摄影技巧学习 机器上的参数 镜头上的 OIS 相机上的 为什么要用取景器? 没有取景器的微单拍摄,以下场景非常苦恼: 1、强光下 2、老花眼,尤其是我这样37岁就开始老花眼的人 3、尤其是长焦拍摄,需要稳定的状态下。单反相机机身和脸部是一个重要的支撑点。 4、液晶取景非常费电,为了抓拍又不能随时关机,得多带几块电池。 除非看取景器非常困难的情况下需要显示屏辅助取景(比如相机高度已高过头顶或机位很低)一般情况还是看取景器。 1是因为取景器是光学成像,镜头所拍摄的东西通过相机里的反光板能一点不差的传送到眼睛里,显示屏是电子的,从真实度和清晰度都不如取景器。 2显示屏取景更费电,如果出门拍摄一天都用显示器取景会很费电。 3一般单反相机显示屏模式下按下快门时,快门不是马上释放,而是要有一个1秒钟左右的间隔,如果拍摄移动物体,这个世界可能摄体已经不预先构图中预计出现的位置了。 当然,微单用的是电子取景器,这个是要耗电的,不过关掉电子屏还是会节省很多点。 如何关闭自动连接手机传输图像? 耗电情况如何? 后期 capture one 后期 导入图片后不能编辑,所有的编辑图标都是灰色的 首选项-图像-打开JPEG编辑、打开tiff编辑、打开png编辑都勾上。 没找着 打开JPEG编辑 然后,查看英文界面发现乃session一词,就是允许用户直接访问硬盘上的图像文件并对其直接操作的意思。 这个功能是C1与LR的最大不同之一,用LR时,不导入就无法对图像进行编辑调整,而C1用户则可会话的方式下,直接查看硬盘的目录树,任意位置上打开图像文件。 然后,从目录树里直接选择图像文件并打开编辑,会话是首选。当用此法查看图像时,也会图像所的文件夹里同时生成一个CaptureOne子文件夹。 是不是和图层有关? 也无法联机拍摄? 是不是xt30不支持 是不是和激活不成功有关? 重新激活pro模式 c1 的几种模式 Express版本免费提供给Sony用户使用(Pro for Sony的基础上,对有一些功能进行了阉割); Pro for Sony为收费版本,功能与Capture One Pro一样,但是只支持Sony机器。 DB版本免费提供给Phase One和Leaf的数码后背用户使用,不支持135系列相机。 Capture One Pro的售价为239欧元/279美刀(国内售价2390元),支持市场上绝大部分的135相机和数码后背(据我的经验来看,只不支持宾得),功能最为齐全。 如何查看已经激活? 重新安装 Capture One有几个核心功能: 1.最好的Raw格式解析算法 2.最好的联机拍摄(商业摄影师联机拍摄首选) 3.颜色编辑器 4.图层遮罩 5.关键字管理(Capture One Pro 9新功能) 6.与PS、LR相比,Capture One 提供了另外的一套后期思路,我看来学习Capture One的成本要比LR低,但因为国内相关教程较少,所以Capture One中国的用户没有LR的多,知名度也没有LR的高。 通俗讲capture one的优势 Capture One 可以创建属于你自己的色彩管理文件 Capture One 可以让你马上看到画面中对焦对实了的部分 有点像观看照片时的峰值 Capture One 可以用色彩编辑器做你想做的关于色彩的一切调节 Capture One 联机拍摄无人能比 还可以用iPad或iPhone无线实时监看画面 拿过去给模特看 做动作或表情调整 ram格式是个什么格式? affinity photo 拍摄技巧 如何保持手持拍摄? ①双手握持三点接触法 ②贴身握机发 ③颈部拉直肩带发 能拍一些平移的画面 ④机身防抖 ⑤后期 ⑥人肉独脚架(利用重力下坠) ⑦广角拍摄,短焦开启防抖 ⑧拍成慢动作,也能防抖 用更高的帧数 其他 有时手持拍摄也是有独特的效果的 机器拍摄 画面有点不自然,有点假 光圈快门感光度调节顺序 首先根据需要的景深选择光圈, 用光圈优先模式:这样快门速度就自动了。 这个曝光只能由相机自动决定,差不了太多。 大多数摄影师大多数场景常用光圈优先模式拍摄? 如何设置为光圈优先? 根据物体移动速度选快门速度, 快门速度会适合抓拍,或者是记录轨迹 如果用快门优先模式,可以设置相对比较快的快门速度,光圈自动,同样能满足大部分拍摄。 最后根据需要的曝光选感光度。 B什么意思? 曝光补偿和感光度的区别? 元素要少!(做减法) 元素统一 云和天空 人为产生的元素 黑夜会弱化掉所有的元素,只留下点亮的那些东西 减法 虚化 虚化了背景,统一了元素 元素划分 调色上做减法 处理前 处理后(去掉了几种颜色) 处理前 处理后 对焦 如何手动对焦? 想要收获最好的虚化效果,要达到以下三个条件 手动对焦一般都是一些很极限的情况下才会用了。 不要太意专业啊、手动啊啥的,千万别以为手动就是专业的,自动对焦本身就是技术的进步,没有那个摄影师会自动能满足的情况下去考虑手动对焦,除非是职业装13的。 手动对焦适用场合大致如下: 1、弱光环境 很多拍星空的朋友都有这样的体验,当你想拍摄清晰的前景,对远处暗淡的主体对焦时,你半按快门,却发觉相机无法对焦。 低光低对比的环境下,相机是无法准确对焦的,此时,手动对焦便是最好的选择。 2、微距拍摄   近距离拍摄物体,半按快门,图像一直对焦和失焦之间徘徊,始终无法全按快门拍照,此时是最尴尬的时刻,这是因为景深太浅,导致相机无法自动对焦。 这时使用手动对焦就可以解决大部分问题。 3、主体前有遮挡物   一些场合,你想拍摄的摄主体前面,有其他物体前景位置遮挡,比如栏杆,玻璃等等,自动对焦往往就会将焦点放前景物体上,而不是你想拍摄的主体,此时,用手动对焦能快速解决问题。 4、使用老镜头   老镜头多没有自动对焦模式,只支持手动对焦,此时便毫无其他选择了。 5、摄影乐趣 以前很喜欢蔡司镜头,它拍出的图片色彩浓郁,德味甚浓,但蔡司头都是手动头。 犹豫再三,半年前还是禁不住诱惑进了一只蔡司50/1.4镜头。 其后,我多次用它进行街拍或人像拍摄,不得不说,手动对焦的乐趣,是旁人无法体会的。 二、手动对焦方法 1、相机设置:(以尼康相机为例) 1.1.镜头的对焦模式,调为手动,即 “M”档。 1.2.相机的对焦模式,调为手动,即 “M”档。 1.3.另外,我拍摄风光类题材,相机的拍摄模式也是手动“M”档。 2、对焦点选择: 2.1.静态风光摄影中,一般选择全景深的近三分位对焦。 2.2.城市夜景风光,对焦部位尽量选择窗户等相对高光比区域,便于合焦确认。 2.3.强光手电辅助照亮主体,也是手动快速对焦的法宝。 3、手动对焦方法: 3.1.稳定:使用三角架等设备固定相机。 3.2.光圈:一般风光摄影的光圈设置为F8-F16,对焦时,先把它设置为镜头的最大光圈,以得到最浅景深便于合焦识别。这一步是手动精准对焦的关键! 3.3.打开相机背屏显示模式: 3.4.选择对焦点: 左右上下移动背屏上的红色方块,来选择对焦点。 3.5.最大限度放大对焦点: 按相机上的放大键,最大限度放大对焦点。 3.6.手动转动镜头的对焦环,调节到对焦点最清晰为止。 3.7.把光圈设置再调整回实拍光圈,即F8-F16。 3.8.手动对焦完毕,可以实拍。 其他的合焦确认方法: 1、相机合焦提示 调节对焦环,观察单反相机目镜,里面有合焦显示提示。尼康相机是白色的圆点,没有合焦时,是向右或向左的白色三角。 2、峰值对焦 峰值对焦是索尼微单相机所具备的一种对焦方式,其原理是将画面对比度最高的区域用高亮的方式显示出来。越是接近合焦,画面上出现的红色(颜色也可设定为其他颜色)颗粒就越是明显。而这些红色的颗粒就是所谓的峰值。 对焦环 如何手动对焦? 想要收获最好的虚化效果,要达到以下三个条件 手动对焦一般都是一些很极限的情况下才会用了。 不要太意专业啊、手动啊啥的,千万别以为手动就是专业的,自动对焦本身就是技术的进步,没有那个摄影师会自动能满足的情况下去考虑手动对焦,除非是职业装13的。 手动对焦适用场合大致如下: 1、弱光环境 很多拍星空的朋友都有这样的体验,当你想拍摄清晰的前景,对远处暗淡的主体对焦时,你半按快门,却发觉相机无法对焦。 低光低对比的环境下,相机是无法准确对焦的,此时,手动对焦便是最好的选择。 2、微距拍摄   近距离拍摄物体,半按快门,图像一直对焦和失焦之间徘徊,始终无法全按快门拍照,此时是最尴尬的时刻,这是因为景深太浅,导致相机无法自动对焦。 这时使用手动对焦就可以解决大部分问题。 3、主体前有遮挡物   一些场合,你想拍摄的摄主体前面,有其他物体前景位置遮挡,比如栏杆,玻璃等等,自动对焦往往就会将焦点放前景物体上,而不是你想拍摄的主体,此时,用手动对焦能快速解决问题。 4、使用老镜头   老镜头多没有自动对焦模式,只支持手动对焦,此时便毫无其他选择了。 5、摄影乐趣 以前很喜欢蔡司镜头,它拍出的图片色彩浓郁,德味甚浓,但蔡司头都是手动头。 犹豫再三,半年前还是禁不住诱惑进了一只蔡司50/1.4镜头。 其后,我多次用它进行街拍或人像拍摄,不得不说,手动对焦的乐趣,是旁人无法体会的。 二、手动对焦方法 1、相机设置:(以尼康相机为例) 1.1.镜头的对焦模式,调为手动,即 “M”档。 1.2.相机的对焦模式,调为手动,即 “M”档。 1.3.另外,我拍摄风光类题材,相机的拍摄模式也是手动“M”档。 2、对焦点选择: 2.1.静态风光摄影中,一般选择全景深的近三分位对焦。 2.2.城市夜景风光,对焦部位尽量选择窗户等相对高光比区域,便于合焦确认。 2.3.强光手电辅助照亮主体,也是手动快速对焦的法宝。 3、手动对焦方法: 3.1.稳定:使用三角架等设备固定相机。 3.2.光圈:一般风光摄影的光圈设置为F8-F16,对焦时,先把它设置为镜头的最大光圈,以得到最浅景深便于合焦识别。这一步是手动精准对焦的关键! 3.3.打开相机背屏显示模式:
发帖
VC/MFC

1.6w+

社区成员

VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
帖子事件
创建了帖子
2001-11-21 10:55
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……