当前位置:  编程技术>其它
本页文章导读:
    ▪CFileDialog 打开当前目录      http://hi.baidu.com/xiao%BF%D5%BF%D5/blog/item/3c418716a6cadf12962b4344.htmlCFileDialog打开当前路径TCHAR Buffer[size];GetCurrentDirectory(size, Buffer);CFileDialog dlg(true,"*BIN",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "二进制文件(*.BI.........
    ▪Android窗口管理(http://blog.csdn.net/huanxido/article/details/7879529)      一、 概述 在Android系统中,从设计的角度来看,窗口管理系统是基于C/S模式的。整个窗口系统分为服务端和客户端两大部分,客户端负责请求创建窗口和使用窗口,服务端完成窗口的维护,窗.........
    ▪MySQL数字的进制转换       MySQL数字的进制转换(conv的使用)CONV(N,from_base,to_base)在不同的数字基数之间转换数字。将数字 N 从from_base 转换到 to_base,并以字符串形式返回。如果任何一个参数为 NULL,那么返回值也为 NUL.........

[1]CFileDialog 打开当前目录
    来源:    发布时间: 2013-11-15

http://hi.baidu.com/xiao%BF%D5%BF%D5/blog/item/3c418716a6cadf12962b4344.html

CFileDialog打开当前路径

TCHAR Buffer[size];

GetCurrentDirectory(size, Buffer);

CFileDialog dlg(true,"*BIN",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "二进制文件(*.BIN)|*.bin|All Files (*.*)|*.*|",NULL); 
dlg.m_ofn.lpstrInitialDir=Buffer;

if(dlg.DoModal())

{

//your code;

}

 

========================

http://hi.baidu.com/g168999/blog/item/9ef3ab517977f1571038c2ba.html

VC获取当前程序文件的路径,文件名以及路径2种方法对比建议
2010-01-01 13:49

1.方法1

   char pBuf[MAX_PATH];                                               //存放路径的变量
   GetCurrentDirectory(MAX_PATH,pBuf);                   //获取程序的当前目录
   strcat(pBuf,"//");
   strcat(pBuf,AfxGetApp()->m_pszExeName);   
   strcat(pBuf,".exe");                                                       //获取程序的全文件名

2.方法2

   //函数返回应用程序所在的路径  

   CString    CClientApp::ReturnPath()  

   {   
   CString    sPath;   
   GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);   
   sPath.ReleaseBuffer    ();   
   int    nPos;   
   nPos=sPath.ReverseFind('//');   
   sPath=sPath.Left(nPos);   
   return    sPath;   
   }

3.对比及建议

方法1获取的是程序的工作路径,如某个程序安装在C,D盘或者其它任何,当你从[开始]-[程序]后的菜单中打开该文件,此时获取的是用户工作路径,如:C:/Documents and Settings/[计算机当前用户名]/....../....
如果你想通过这个路径来加载你放在程序目录下的文件,必定出错。通常这种情况在你编译调试程序时是不会出错的,你跟踪得到的绝对路径,但打包安装后一定出问题。

方法2获取的是程序的绝对路径,用这个路径加载同目录下的文件是不会有问题的。

如果你要确保成功加载文件,建议使用方法2!!!!!!


新建目录CreateDirectory

第一个参数值为文件夹名称,第二个参数值为安全属性,一般设置为NULL即可。如果正确创建,返回值为1,如果没有正常创建文件夹,则返回0。

  特别的:该函数每次调用时都只能创建一级文件夹,即文件夹中不能再包含子文件夹。
  当希望创建含有子文件夹的文件夹时,可以先使用该函数创建一级文件夹,然后再使用该函数在一级文件夹下创建子文件夹。如:
  希望创建:d:\\TEST\\temp,
  则:CString str = “d:\\TEST”;
  CreateDirectory(str, NULL);
  str = str + \\temp;
  CreateDirectory(str, NULL);


    
[2]Android窗口管理(http://blog.csdn.net/huanxido/article/details/7879529)
    来源:    发布时间: 2013-11-15

一、 概述

在Android系统中,从设计的角度来看,窗口管理系统是基于C/S模式的。整个窗口系统分为服务端和客户端两大部分,客户端负责请求创建窗口和使用窗口,服务端完成窗口的维护,窗口显示等。

 


在Client端,并不是直接和 WindowManagerService交互,而是直接和本地对象WindowManager交互,然后由WindowManager完成和 WindowManagerService的交互。对于Android应用来说这个交互是透明的,应用不能感知到 WindowManagerService的存在

 



二、 窗口的定义

在android的应用框架中,窗口主要分为两种:

第一种是应用窗口:一个activity有一个主窗口,弹出的对话框 也有一个窗口,Menu菜单也是一个窗口。在同一个activity中,主窗口、对话框、Menu窗口之间通过该activity关联起来。和应用相关的 窗口表示类是PhoneWindow和Window,PhoneWindow继承于Window,针对手机屏幕做了一些优化工作。PhoneWindow 只是一个窗口封装类,里面核心的是mDecorView这个变量,mDecorView是一个顶层的View,窗口的添加就是通过调用 getDecorView()获取到mDecorView并且调用WindowManager.addView()把该View添加到 WindowManager中。

第二种是公共界面的窗口:如最近运行对话框、关机对话框、状态栏下拉 栏、锁屏界面等。这些窗口都是系统级别的窗口,不从属于任何应用,和activity没有任何关系。这种窗口没有任何窗口类来封装,直接调用 WindowManager.addView()来把一个view添加到WindowManager中。

在应用初始化的时候,会首先生成一个Activity对象,此时该 activity还没有属于他的一个窗口。紧接着通过调用attach()函数,在attach()函数里面该activity会调用 PolicyManager.makeNewWindow()创建一个新的PhoneWindow,然后在activity的onCreate()生命周 期里,一般应用都会调用setContentView()设置该activity的显示界面。在setContentView()里,框架会自动生成一个 布局,该布局文件包含了如标题栏、ActionBar等元素,最重要的是包含了应用的contentView。这个布局对应的就是PhoneWindow 里面的mDecorView。最后在activity将要显示出来之前,通过getWindow().getDecorView()获取到 DecorView,并通过WindowManager.addView()把DecorView添加到WindowManager中。


 

Activity添加客户端窗口时序图

 

 



三、  窗口管理

Android的窗关管理是基于C/S模式的,并且使用独立进程的方 式实现。窗口管理的服务端WindowManagerService运行在独立的进程system_server里,当应用程序需要创建窗口时,通过进程 通信的方式请求WindowManagerService创建窗口,由WindowManagerService向应用程序传递和窗口相关的交互消息。所 有程序的窗口都在服务端管理,窗口的显示和控制都在WindowManagerService里处理。

WindowManagerService主要完成了以下几部分功能:

1.      窗口的添加和删除

2.      窗口的显示和隐藏控制

3.      Z-order顺序管理

4.      焦点窗口和焦点应用的管理

5.      输入法窗口管理和墙纸窗口管理

6.      转场动画

7.      系统消息收集和分发

 

服务端的实现代码是在/framework/base/services/java/com/android/server/wm/里,核心的几个类是:

WindowManagerService.java

WindowState.java

WindowToken.java

AppWindowToken.java

Session.java

InputManager.java

InputMonitor.java

 

类解释:

WindowManagerService负责完成窗口的管理工作;

WindowState和客户端窗口一一对应,应用调用WindowManager.addView()时,最终会在WindowManagerService添加一个WindowState与之一一对应。

WindowToken是一个句柄,保存了所有具有同一个token 的WindowState。应用请求WindowManagerService添加窗口的时候,提供了一个token,该token标识了被添加窗口的归 属,WindowManagerService为该token生成一个WindowToken对象,所有token相同的WindowState被关联到 同一个WindowToken。如输入法添加窗口时,会传递一个mCurrToken,墙纸服务添加窗口时,会传递一个newConn.mToken。

AppWindowToken继承于WindowToken,专门用 于标识一个Activity。AppWindowToken里的token实际上就是指向了一个Activity。 ActivityManagerService通知应用启动的时候,在服务端生成一个token用于标识该Activity,并且把该token传递到应 用客户端,客户端的Activity在申请添加窗口时,以该token作为标识传递到WindowManagerService。同一个Activity 中的主窗口、对话框窗口、菜单窗口都关联到同一个AppWindowToken。

Session表示一个客户端和服务端的交互会话。一般来说不同的应用通过不同的会话来和WindowManagerService交互,但是处于同一个进程的不同应用通过同一个Session来交互。

InputManager和InputMonitor负责上层的消息分发功能。

 

WindowManagerService内部的几个重要成员变量:

ArrayList<WindowState>         mWindows

HashMap<IBinder, WindowState>         mWindowMap

ArrayList<WindowToken>        mTokenList

ArrayList<AppWindowToken>         mAppTokens

 

mWindows保存了系统中所有的WindowState;

mWindowMap保存了每个WindowState和客户端窗口的映射关系,客户端应用请求窗口操作时,通过mWindowMap查询到对应的WindowState;

mTokenList保存了所有的WindowToken

mAppTokens保存了所有的AppWindowToken


 


窗口管理服务端主要类图

 

一个Activity从启动到添加窗口的整个流程如下:

ActivityManagerService在接收到启动 Activity请求时,首先生成一个token作为该Activity的唯一标识。然后调用WindowManagerService向其添加一个 AppWindowToken,此AppWindowToken封装了Activity的token。接着AMS启动应用客户端进程并把token传递到 该进程,在客户端进程里完成Activity的初始化。在Activity的attach()函数中,Activity完成PhoneWindow的创 建,并且把token传递给PhoneWindow。在Activity调用WindowManager.addView()时,在 WindowManager内部会把token和该View关联,真正向WindowManagerService申请创建窗口的时候,再把token传 递给WindowManagerService。WindowManagerService接收到创建窗口的请求的时候,通过mTokenMap查询对应 该token的AppWindowToken,如果为空则抛出异常,否则创建一个WindowState并完成初始化工作和其他数据结构的调整工作。在这 个过程中,token贯穿了服务端的AMS、WMS和客户端的Activity、Window。

 


Activity启动过程中创建窗口的时序图

 



 

四、            WMS中服务端和客户端的交互接口和数据结构

应用请求创建窗口时,和应用直接交互的是WindowManager 对象。WindowManager只是一个接口,调用addView()创建窗口时正真交互的是WindowManagerImpl对象。 WindowManagerImpl管理单个应用的所有本地窗口。应用调用addView()创建窗口时,WindowManagerImpl会生成一个 ViewRoot对象与之相对应,并且把相应的参数LayoutParams保存起来。

addView()的执行流程如下:

(1)    检查所添加的窗口是否已经添加过,不允许重复添加;

(2)    如果所添加窗口为子窗口类型,找到其父窗口,并保存在内部变量中;

(3)    创建一个新的ViewRoot,并保存对应的View(DecorView)和LayoutParams;

(4)    调用ViewRoot的setView()方法,完成真正意义上的添加工作。

 

ViewRoot本质上是一个Handler,并且实现了ViewParent接口。ViewRoot的主要功能是:

1.      负责分发消息事件,如Key、Motion事件等;

2.      负责和WMS的交互,分发WMS的交互命令;

3.      作为DecorView的parent,对DecorView进行draw、measure、layout等操作;

 

在addView()的第3、4步完成之后,ViewRoot就全权接管了和WMS的交互工作,DecorView不需要做任何交互动作。ViewRoot和WMS之间的双向对话,主要是通过以下两个数据结构进行的:

IWindowSession

IWin

    
[3]MySQL数字的进制转换
    来源:    发布时间: 2013-11-15

 MySQL数字的进制转换(conv的使用)
CONV(N,from_base,to_base)
在不同的数字基数之间转换数字。将数字 N 从from_base 转换到 to_base,并以字符串形式返回。如果任何一个参数为 NULL,那么返回值也为 NULL。参数 N 被解释为是一个整数,但是也可以被指定为一个整数或一个字符串。最小基为 2,最大基为 36。如果 to_base 是一个负值,N 将被看作为是一个有符号数字。否则,N 被视为是无符号的。CONV 以 64 位精度工作。

mysql> select conv(100,10,2);
+----------------+
| conv(100,10,2) |
+----------------+
| 1100100 |
+----------------+

insert ignore into tbl_Device_User_Info_1  (deviceKey,iggid,userid,DriveType,LastLoginTime,Param1,DeviceID) select deviceKey,iggid,userid,DriveType,LastLoginTime,Param1,DeviceID from tbl_Device_User_Info_Mix where conv(right(deviceKey,4),16,10) mod 40 +1 = 1 ;





C++技术中心 2013-01-14 17:45 发表评论

    
最新技术文章:
 




特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3