棋牌源码吧

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 268|回复: 0

如何开发绚丽、高效率的界面

[复制链接]

2971

主题

0

回帖

8930

积分

超级版主

Rank: 8Rank: 8

积分
8930
发表于 2023-8-9 03:17:19 | 显示全部楼层 |阅读模式
1.如何让界面绚丽?
  怎么样的算绚丽?有很漂亮的图片?有Alpha透明?有Animation?
  每个人的审美观点都不同,所以如果你的界面很多人认为绚丽那就可以了。设计界面主效率公式要是De界面剂signer的工作,包括UI逻辑的设计,色彩图片转pdf搭配设计等,我认为这也可以进一步分工:熟悉用户习惯的Designer、美学Desi控件被阻止怎么解除g界面剂和墙固的区别ner等。但是一般情况下这些让程序员给代劳了。
  下面介绍Windows提供给开发人员的相关接口,利用这些接口设计你认为绚丽的界面。
  2.如何透明?如何半透明?如何颜色渐变?
  以下是我使用Imaging COM组件封装的效率公式一个函数,绚丽人生狮子鬼可以使用其绘制PNG图片,当然也可以绘制其它图片。绘制带Alpha通道的PNG图绚丽多彩拼音片即实现了透明。
  #include
  #include
  #include
  #pragma comment(lib, "Imaging.lib")
  BOOL DrawPNG(HDC h控件无法安装怎么办DC, TCHAR szPicString, RECT &rcDraw)
  {界面剂是什么东西
  BOOL br = FALSE;
  IIma效率的英文gingFactory效率的英文 pImgFactory = NULL;
  IImage pImage = NULL;
  Imag控件是什么eInfo sImgInfo;
  CoInit界面剂ializeEx(NULL, COINIT_MULTITHREADED);
  // Creat图片识别e the imaging factory.
 效率是什么意思 if (SUCCEEDED(CoCreateInstance(CLSID_ImagingFactory,
  NULL,
  CLSCTX_INPROC_SERVER,
  IID_IImagingFactory,
  (void )&pImgFactory)))
  {
  // Load the image from the JPG file.
  if (图片转文字SUCCEEDED(pImgFactory界面剂->CreateImageFromFile(
  szPicString,
  &pImag绚丽人生狮子鬼e)))
 控件数组 {
  // Draw the image.
  pImage->Draw(hDC效率公式, &a图片识别mp;rcD图片识别raw, NULL);
  pImage->Release();
  pImage = NULL;
  br = TR绚丽UE;
  }
  pImgFactory->Release();
  }界面新闻
  CoUninitialize();
  return br;
 控件是什么意思 }----------绚丽多彩拼音---------------------效率是什么意思-----绚丽的什么填空------------------------------------------------------------------
  而封装的这个函数实现了将一个DC根据Alpha值半透明绘控件是什么意思制到另一绚丽个DC上,使用GDI函数AlphaBlend实现界面剂起什么作用。
  BOOL AlphaBlt(HDC hdcDest, int nXOriginDest, int图片识别在线 nYOriginDest,
  in图片搜索图片识别t nWidthDest, int nHeightDest,
  HDC hdcSrc, int nXOriginSrc, int nYor界面iginSrc,
  int nWidthSrc, int nHeightSrc,
  BYTE alpha) {
  BLENDFUNCTION bf;绚丽多彩拼音
  bf.BlendOp = AC_SRC_OVE绚丽的拼音R;
  bf.BlendFla绚丽gs = 0;
  bf.SourceConstantAlpha = alpha;
  bf.AlphaFormat = 0;
  return AlphaBlend(hdcDest, nXOr效率高发票查验iginDest, nYOriginDest, nWidthDest, nHeightDest,
  hdcSrc控件报文错误是什么意思, nXOriginSrc, nYoriginSrc, nWidthSrc, nHeightSrc,界面设计 bf);
  }
  如果你的设备界面设计支持AlphaBlend硬件加速那将是非常棒的事情,否则软件方式会有点影响性能。
  ---------界面----------------------------------------------------绚丽多彩的意思-----------------------------------图片2021新图片微信头像------
  颜色渐变也是直接有API可以支持:
  BOOL GradientFil控件被阻止怎么解除l(
  HDC hdc,
  PTRIVERTEX pVertex,
  ULONG nVertex,
  PVOID界面是什么意思 pMesh,
  ULONG nCount,
  ULONG ulMode
  );hdc
  [in] Handle to the destination device context.
  pVertex
  [in] Pointer to an array of TRIVERTEX structures, each of which defines a triangle vert控件ex.
  nVe控件数组rtex
  [in] The number of vertices in pVertex.
  pMesh
  [in] Array of GRADIENT_RECT structures in rectangle mode.
  nCount
  [in] The number of rectangles in pMesh.
  ulMode
  [in] Specifies gradient fill mode. The following table shows the possible values for ulMode.
  Th图片2021新图片微信头像is function fills recta绚丽的拼音ngu控件怎么安装lar regions with a background color that i界面s interpolated from color values specified at the vertices.
  不管你使用。Net CF平台调用这些API,还是Win32/MFC/ATL/WTL直接调用这些API,你都是可以实现这些效果的。更多内容请查询开发文档,毕竟那才是最好的参考资料。
  3.如何实现动画?
  动画的原理就是一帧一帧的画面按照时间轴向后移动,在骗过眼睛之后就成了动绚丽人生画,所以你得到动画界面设计最简单的方法就是按照一定间控件是什么隔将不同图片一张一张绘制到屏幕上,虽然很简单,图片但是在编图片程中经常使用绚丽的什么填空这种方法。有时简单的往往是最好的。
  这里还有个技巧,比如将每张图片使用Photoshop中的运动滤镜模糊下,这样使用上面方法得到效率至上主义的快穿游戏的动画会有种非常快速的感觉。也可以用类似的方法来用2D表现三维的事物,得到3D动画的效果。
  还可以使用GIF动画的方式,比如在开机和关机时。以下封装的函数仅供参考,控件报文错误我没用心整理。
  BOOL DisplayG图片转文字IF(TCHAR szPicString)
  {
  HANDLE hFile = CreateFile(strFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
  if (hFile == INVALID_HANDLE_VALUE)
  {
  return FALSE;
  }
  DWORD dwFileSize = GetFileS界面新闻ize(hFile, NULL);
  if ( (DWORD图片识别在线)-1 == dwFileSi控件ze )
  {
  CloseHandle(hFile);
  return FALSE;
  }
  HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
  if (hGlobal == NULL)
  {
  CloseHandle(hF绚丽多彩拼音ile);
  return FALSE;
  }
  绚丽多彩的反义词LPVOID pv图片转文字Data = GlobalLock(hGlobal);
  if (pvData == NULL)
  {
  GlobalUnlock(hGlobal);
  CloseHandle(hFil图片e);
  return FALSE;
  }
  DWORD dwBytesRead = 0;
  BOOL bR控件是什么ead = ReadFi效率的英文le(hFile, pvData, dwFileSize图片翻译, &dwBytesRead, NULL);
  GlobalU绚丽多彩意思相近的词nlock(hGlobal);

  CloseHandle(hFile);
  if (!bRead)
  {效率的英文
  return FALSE;
  }
  IStream pStream = NULL;
  if ( FAILED(CreateStreamOnHGlobal(hGlobal, TRUE, &绚丽的近义词am界面剂和墙固的区别p;pStream)) )
  {
  return FALSE;
  }
  if( NULL == pStream )
  {控件是什么
  return FALSE;
  } IImage pImage = NULL;
  RECT rc;
  IImagingFactory pImgFactory效率与公平的关系是什么 = NULL;

  CoInitializeEx(NULL, COINIT_MULTITHREADED);
  if ( !SUCCEEDED(CoCreateInstance(CLSID_效率符号ImagingFactory, NULL, CLSCTX_INPROC_SER绚丽多彩意思相近的词VER控件怎么安装, IID_IImagingFactory, (void )&pImgFactory)) )
  {
  return FALSE;界面剂是什么材料
  }
  IImageDecoder pDecoder = NULL;
  界面剂起什么作用UINT n= 0;
  图片识别在线if ( !SUCCEEDED(pImgFactory->CreateImageDecoder(pStream, DecoderIn图片大全itFlagNone, &pDecoder)) )
  {
  return FALSE;
  }
  pDecoder->GetFrameDimensionsCount(&nCount);图片去水印
  GUID pDimensionID图片2021新图片微信头像s = (GUID)new GUID[nCount];
  pDecoder->效率GetFrameDimensionsList(pDimensionIDs,nCount);
  TCH控件报文错误是什么意思AR strGuid[39];
  StringFromGUID2(pDimensionIDs界面, strGuid, 39);
  UINT frame= 0;
  pDecoder->GetFrameCount(&pDimensionIDs界面,&frameCount);
  UI控件是什么NT iSize = 0;
  pDecoder-&控件报文错误gt;GetPropertyItemSize(PropertyTagFram界面剂和墙固的区别eDelay,&iSize);
  BYTE pBuff = new BYTE[iSize];
  界面剂Pr图片2021新图片微信头像opertyIt界面医疗em pItem = (PropertyItem)pBuff;
  pDecoder-&效率控gt;GetPropertyItem(PropertyTagFrameDelay,iSize控件报文错误是什么意思,pItem);
  int f= 0;
  ImageInfo Info;
  pImgF绚丽的拼音actory->CreateImageFromStream(pStream,&pImage)界面;
  pImage->GetImageInfo(&Info);
  rc.图片大全left = rc.top = 0;
  rc.right = Info.Width;
  rc.bottom = Info.Height;
  HDC tempDC;
  HBITMAP hbmNew = NULL;
  void pv;
  BITMAPINFO bmi = { 0 };
  HBITMAP hbmOld = NULL界面新闻;
  tempDC = CreateC控件报文错误ompa界面医疗tibleDC(NULL);
  bmi.bmiHeader控件报文错误是什么意思.biSize = sizeof(界面剂使用方法BITMAPINFOHEADER);
 控件工具栏在哪里 bmi.b控件无法安装怎么办miHeader.biWidth = Info.Width;
  bmi.bmiHeader.图片去水印biHeight = Info.Height;
  bmi.bmiHeader.biPlanes = 1;
  bmi.bmiHeader.biBit= (SHORT) max(16, GetDevice图片Caps(tempDC, BITSPIXEL));
  bmi.bmiHeader.biCompression = BI_RGB;
  hbmNew = CreateDIBSection(tempDC, &bmi, DIB_RGB_COLORS, &pv, NULL, 0);
  hbmOld = (HBITMAP)SelectObject(tempDC, hbmN控件是什么ew);
  pImage->Draw界面剂使用方法(tempDC, &rc, NULL);
  pDecoder->SelectActiveFrame(&pDimensionIDs界面, ++fCount);
  BitBlt(g_hdc, 0, 0, rc.rig界面剂和墙固的区别ht - rc.left, rc.bottom - rc.top, tempDC, 0, 0, SRCCOPY);
  []pBuff;
  []pDimensionIDs;
  pDecoder->Release(绚丽多彩拼音);
  pImage->Release();
  pImgFactory->Release();
  CoUninitialize();
  return T界面剂RUE;
  }
  4.如何有较高的运行效率?
  后面的内容会介绍到使用GDI这些“较高层次”的接口是很难有较高的运行效率。
  但是可以使控件被阻止怎么解除用一些技巧,比如“空间换取时间”。相信"Lazy Computation”你有听过,延迟处理这项任务直到真正需要的时候(在编程中我们也会经常用到,需要有这个意识。)这里使用的技巧有点恰恰相反的味道,把用户将来很可能用到的地方先处理好,然后储存起来,而并不是等到用户真正需要的时候才去处理。
  比如使用Imaging COM组件绘制PNG图片时,每次都需要加载组件的库文件,然界面剂起什么作用后卸载,界面可能要反复刷新,然后反复绘制PNG图控件怎么安装片。这时可以考虑在程序启动的时候使用非界面主线程将绘制好的PNG效率与公平的关系是什么图片保存起来(比如以Device Context的形式),界面刷新的时候仅仅是BitBlt到目标设备。BitBlt的效率是比较高的,如果仍然不能满足你的图片翻译效率要求,可以考虑下面介绍的DirectDraw等技术。
  上面的方法绚丽的近义词对于具有丰富开发经验的应该比较清楚,但是新手往往会忽略。在开发界面时我们要保证一个基本原则:想尽一切办法在现有的条件下提高界面响应用控件被阻止怎么解除户的速度,界面要以用效率的拼音户为中心。所以开发时需要保持这个意识。
  5.如何提高程序启图片2022新图片动速度?
  第4部分说过效率控,为了提高运行效率,可以将常用的界面在程序启动时一起缓存到内存中,那么程序的启动时间会大效率符号大增加,如何解决这个问题?我的建议是UI主线程仅仅加载少量的用户启动后直接就能看到的界面,而另起一个子线程(界面剂是什么材料叫A)用于加载其它界面,其它界面加载完之后这个子线程退出,当用户点击其它界面时,主线程如果发现子线程A并没有退出,说明其它界面还没有加载完,让用户等待。
  这么设计的好处是,将最耗时的任务分摊出去,即能保证了用图片2021新图片微信头像户快速看到界面,又能在之后的运行中有较高的效率。
  6.如何在绚丽和效率之间平衡?
  最好的方法是得到界面运行时具体的时间消耗数据,如果必要可以精确到每个函数。得到一份系统正常情况下的数据,得到几份环境恶劣情况下的数据(比如系统非常繁忙、设控件报文错误备电量很少、要处理的数据非常多等)。定量的去分析解决这些问题。如果在恶劣的环境下你的绚丽界面表现的仍然不错,恭喜你,你太棒了!绚丽多彩的反义词
  W界面剂indows CE/Windows Mobile也提供了些基本的Perform绚丽人生ance A效率与公平的关系是什么PI(像DirectDraw等技术还有自己的Performance接口和工具):
  BOOL QueryPerformanceCoun控件工具栏在哪里ter(
  LARGE_INT绚丽EGER lpPerformanceCount
  );lpPerformanceCount
  [in] Poin效率ter to a variable that the function sets, in counts, to the current performance-counter value. If the instal效率至上主义的快穿游戏led hardwar图片2022新图片e does not support a high-resolution performance counter, this paramet绚丽人生狮子鬼er can绚丽人生 be set to zero.
  This function retrieves the current value of the high-绚丽多彩拼音resolution performance counter if one is provided by the OEM.
  BOOL图片2022新图片 QueryPerformanceFreque图片2022新图片ncy(
  LARGE_INTEGER lpFrequency
  );lpFrequency
  [out] Poin效率至上主义的快穿游戏ter to a variable that the function sets, in counts per second, to the current p界面设计erformance-count图片翻译er frequency. If控件报文错误是什么意思 the installed hardware does not support a high-resolution performance counter效率, the value passed back th绚丽人生rough this pointer c图片识别an be zero.
  This function retrieves the frequency of the high-res图片识别olution p界面剂是什么材料erformance counter if one is provided by the OEM.
  上面两个API需要OEM在OAL层提供实现,精度可以低于1ms,否则可以使用控件报文错误是什么意思下面的API。
  DWORD GetTickCount(void);For Release con界面剂figurations, this function returns the number of milliseconds since the device booted, e效率高发票查验xcluding any time that the sy效率stem was suspended. GetTickstarts at zero on boo界面剂t then counts up from there.
  For debug configurations, 180 seconds is subtracted from the the number of milliseconds since the device booted. This enables code that uses Get界面剂使用方法Tickto be easily tested for correct overflow界面剂是什么材料 handling.
  另外优化PNG、Bit效率的英文map、GIF等图片,让图片清晰度和大小刚好满足要求。
  7.控件为什么如此降低运行效率?怎样减少控件的使用?图片去水印
  手机软件不绚丽同于桌面系统软件,一方面手机的处理速度更低、电池容量更小,另一方面用户会效率至上主义的快穿游戏使用手机处理更紧急的事情。所以这也是我认为 不应该图片识别在线完全把桌面系统软件开发经验借鉴到手机软件开发上的原因。一个240x320分图片2022新图片辨率大小的手机界面,你给放上5、6个控件,甚至更多,这个界面注定不会太高效率,这样的界面也不适合作为用户最常用的界面,比如今日界面。另一方面,Windows的标准、控件通用控件不会有太绚丽的外观,即使自定义的。但是这些控件能够带来很明显的开图片翻译发速度。所以我们要协调好。效率公式不能为了窗口而窗口,更不能一切皆窗口。
  那么你会问如何协调。我的建议是能不用控件的地方就不要用,大多地方可以直接使用图片,比如实现多状态按钮你可以这样做:
 控件是什么意思 WM_LBUTTONDOWN消息处理里面先判断Point是否在按钮的Rect中,如果是将按下状态的图片DC BitBlt到屏幕对应位置,WM_LBUTTONUP消息处理里面再BitBlt回来。
  8.基于Win32的界面运行效率比基于。Net CF高,但是开发效率控件无法安装怎么办低,怎么办?
  Win32编程已经很古老、很“落后”了。但是在处理速度还不及奔三的Windows嵌入式设备上有时你不得不选择。把界面常用的功能代码封装成库(类库也可以),积累这样的资源可以提高团队的开发效率。C++泛型编程就是控件工具栏在哪里以牺牲编译时效率换取界面新闻代码重用,但是不影响运行时效率,值得去深入学习下,而且有现成的库可用,比效率至上主义的快穿游戏如STL。
  还有其它的技术可供选择:DirectDraw(后面介绍的)、Direct3DM、OpenGL ES等。但是开发难度较高。
  9.如绚丽人生何使用GDI+(Native控件是什么意思/Managed绚丽)?
  GDI+是GDI的下一个版本,它进行了很好的改进,并且易用性更好。GDI的一个好处就是你不绚丽多彩拼音必知道任何关于数据怎样在设备上渲染的细节,GDI+更好的实现了这个优点,也就是说,GDI是一个中低层API,你还可能要知道设备,而GDI+是一个高层的API,你不必知道设效率的英文备。以下引用自MSDN文档:
  "2-D vector graphics involves drawing primitives (such as lines, curves,控件工具栏在哪里 figures) that are specified by sets of points on a coordinate system.
  For example, the Rect class stores the location size of a rectangle; the Pen class stores information about line color, line width, line style;控件数组 the Graphics class has methods for dra图片识别wing lines, rectangles, paths, other figu效率计算公式res.效率控 There are also several Brush classes that st效率控ore information about界面剂是什么东西 how clo控件工具栏在哪里sed figures paths are to b效率符号e filled with colo界面剂是什么材料rs or patterns图片搜索图片识别.
  Certain kinds of pictures are diffic控件怎么安装ult or impossible to display with the techniques of vector graphics. Ima控件工具栏在哪里ging part will resolve this problem. An examp绚丽的近义词le of such a class is CachedBitmap, which is used to store a bitmap in memory for fast access displ绚丽人生ay.
  Typography is concerned wit控件无法安装怎么办h the d效率至上主义的快穿游戏isplay of text in a variety of fonts, sizes, styles. One of the new features in GDI+ is subpixel antialiasing. “效率符号
  Win界面剂使用方法dows CE/Windows Mobile下的GDI+仅仅是Windows桌面系统的一个很小的子集。OpenNETCF中封装了GDI+,可以为基于。Net CF的开发者提供便利,微软提供的N控件怎么安装ative Code版本就是前面有提到的Imaging COM组件,你也可以直接调用gdiplus.dll里面的类和方法。效率的拼音网上已经有绚丽人生人将Windows CE版本GDI+不支持的部界面是什么意思分桌面系统版本绚丽GDI+的功能整理进来,你可以使用其提供的Lib库和头文件进行开发。但可能不是很稳定。
  Windows Mobile 6中的gdiplus.dll文件:
  将上面的dll文件导出得到的函数:
  10.如何实现透明绚丽人生狮子鬼控件等其效率公式它问题?
  效率符号因为Windows系统目前不支持窗口Alpha界面剂透明,所以无法直接使控件背景透明,我们常用的方法是将控件后面的窗口中对应的背景作为控件的背景。控件是什么
游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|棋牌源码吧

GMT+8, 2024-11-22 13:49 , Processed in 0.066098 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表