现在的位置: 首页 > 综合 > 正文

资源脚本

2013年11月03日 ⁄ 综合 ⁄ 共 6558字 ⁄ 字号 评论关闭

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

标题:资源脚本

备注:参考《Windows CE 6.0开发者参考》

日期:2011.4.1

姓名:朱铭雷

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

主要功能

用来存放对话框,字符串,位图,图标,菜单等资源数据。因为资源不需编译,所以可直接修改资源而无需重新编译整个应用程序。

菜单

ID_MENU MENU DISCARDABLE

BEGIN

       POPUP "&File"

       BEGIN

              MENUITEM "&New",         IDM_NEW

              MENUITEM "&Open",         IDM_OPEN

              MENUITEM SEPARATOR

              MENUITEM "&Exit",           IDM_EXIT

       END

END

ID_MENU是资源ID,接着MENU是资源类型,DISCARDABLE关键字告诉系统在该资源没被用到时可以从内存中删除。POPUP指明File菜单项是附加在主菜单上的弹出式菜单。&后面的字符作为加速键分配给这个菜单项。语法比较清晰,很容易看懂。

在代码中使用该菜单资源:

HMENU hMenuMain, hMenu;

MapWindowPoints (hWnd, HWND_DESKTOP, &pt, 1);

pt.x += 5;

hMenuMain = LoadMenu (hInst, MAKEINTRESOURCE (ID_MENU));

hMenu = GetSubMenu (hMenuMain, 0);

TPMPARAMS tpm;

tpm.cbSize = sizeof (tpm);

GetClientRect (hWnd, &tpm.rcExclude);

TrackPopupMenuEx (hMenu, TPM_LEFTALIGN | TPM_TOPALIGN,

       pt.x, pt.y, hWnd, &tpm);

DestroyMenu (hMenuMain);

DestroyMenu (hMenu);

图标

ID_ICON ICON "res//WRENCH.ICO"

在代码中使用该图标资源:

HICON hIcon = (HICON)SendMessage(hWnd, WM_GETICON, FALSE, 0);

if (hIcon == 0)

{

       hIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(ID_ICON), IMAGE_ICON, 16, 16, 0);

       SendMessage(hWnd, WM_SETICON, FALSE, (LPARAM)hIcon);

}

这段代码的功能是给窗口分配图标。

加速键

提供一种直接的方法,使一个按键组合可以触发WM_COMMAND消息并发送到一个窗口。

ID_ACCEL ACCELERATORS DISCARDABLE

BEGIN

       "E", IDM_EXIT, VIRTKEY, CONTROL

END

VIRTKEY代表这个字实际上是虚拟键,CONTROL表示Ctrl键必须同时按下。

在代码中使用该加速键资源:

HACCEL hAccel;

hAccel = LoadAccelerators (hInst, MAKEINTRESOURCE (ID_ACCEL));

MSG msg;

while (GetMessage (&msg, NULL, 0, 0))

{

       // Translate accelerators

       if (!TranslateAccelerator (hwndMain, hAccel, &msg))

       {

              TranslateMessage (&msg);

              DispatchMessage (&msg);

       }

}

这段代码首先加载加速键表,然后对消息循环做简单修改,以使加速键起作用。

位图

IDB_BITMAP BITMAP "res//abc.bmp"

在代码中使用该位图资源:

RECT rect;

GetClientRect (hWnd, &rect);

PAINTSTRUCT ps;

HDC hdc;

hdc = BeginPaint (hWnd, &ps);

HDC hdcMem = CreateCompatibleDC(hdc);

HBITMAP hBitmap = CreateCompatibleBitmap(hdc, 20, 20);

HBITMAP hOldMemBmp = (HBITMAP)SelectObject(hdcMem,hBitmap);

HDC hdcBmp = CreateCompatibleDC(hdc);

HANDLE hBmpDis = LoadImage(hInst,MAKEINTRESOURCE(IDB_BITMAP), IMAGE_BITMAP, 0, 0, 0);

HBITMAP hOldBmp = (HBITMAP)SelectObject(hdcBmp,hBmpDis);

BitBlt(hdcMem, 0, 0, 20, 20, hdcBmp, 0, 0, SRCCOPY);

BitBlt(hdc, 0, 0, 20, 20, hdcMem, 0, 0, SRCCOPY);

SelectObject(hdcBmp,hOldBmp);

SelectObject(hdcMem,hOldMemBmp);

DeleteObject(hBitmap);

DeleteDC(hdcMem);

DeleteDC(hdcBmp);

 

EndPaint (hWnd, &ps);

这段代码采用双缓存绘制位图。

字符串

STRINGTABLE DISCARDABLE

BEGIN

       IDS_TEXT1, "Hello "

       IDS_TEXT2, "Windows CE!"

END

在代码中使用该字符串资源:

PBYTE pRes, pBuff;

int nStrLen = 0, i = 0;

pBuff = (PBYTE)LocalAlloc (LPTR, 8);

while (pRes = (PBYTE)LoadString (hInst, IDS_TEXT1 + i++, NULL, 0))

{

       // Get the length of the string resource

       int nLen = *(PWORD)(pRes-2) * sizeof (TCHAR);

       // Resize buffer

       pBuff = (PBYTE)LocalReAlloc (pBuff, nStrLen + 8 + nLen, LMEM_MOVEABLE | LMEM_ZEROINIT);

       if (pBuff == NULL) return 0;

       // Copy resource into buffer

       memcpy (pBuff + nStrLen, pRes, nLen);

       nStrLen += nLen;

}

 

*(TCHAR *)(pBuff + nStrLen) = TEXT ('/0');

LPTSTR pszText;

pszText = (LPTSTR)pBuff;

DrawText (hdc, pszText, -1, &rect,

       DT_CENTER | DT_VCENTER | DT_SINGLELINE);

这段代码输出字符串Hello Windows CE!

完整测试程序

HelloCE.rc

#include "windows.h"

#include "HelloCE.h"

//----------------------------------------------------------------------

// Main window dialog template

//

ProgWinCE DIALOG discardable 10, 10, 120, 65

STYLE  WS_OVERLAPPED | WS_VISIBLE | WS_CAPTION | WS_SYSMENU |

       DS_CENTER | DS_MODALFRAME

CAPTION "ProgWinCE"

BEGIN

    LISTBOX IDD_NETLIST, 2, 2, 116, 46,

                       WS_TABSTOP | WS_VSCROLL |

                       LBS_NOINTEGRALHEIGHT | LBS_USETABSTOPS

    PUSHBUTTON "Exit", IDC_EXIT, 2, 50, 55, 12, WS_TABSTOP

END

//----------------------------------------------------------------------

// Menu

//

ID_MENU MENU DISCARDABLE

BEGIN

       POPUP "&File"

       BEGIN

              MENUITEM "&New",         IDM_NEW

              MENUITEM "&Open",         IDM_OPEN

              MENUITEM SEPARATOR

              MENUITEM "&Exit",           IDM_EXIT

       END

END

//----------------------------------------------------------------------

// Icon

//

ID_ICON ICON "res//WRENCH.ICO"

//----------------------------------------------------------------------

// Accelorator

//

ID_ACCEL ACCELERATORS DISCARDABLE

BEGIN

       "E", IDM_EXIT, VIRTKEY, CONTROL

END

//----------------------------------------------------------------------

// Bitmap

//

IDB_BITMAP BITMAP "res//abc.bmp"

//----------------------------------------------------------------------

// String table

//

STRINGTABLE DISCARDABLE

BEGIN

       IDS_TEXT1, "Hello "

       IDS_TEXT2, "Windows CE!"

END

 

HelloCE.h

#define    ID_MENU         10

#define    IDM_NEW         100

#define    IDM_OPEN        101

#define    IDM_EXIT        102

#define    ID_ICON         11     

#define    ID_ACCEL        12

#define    IDB_BITMAP      13

#define    IDS_TEXT1       14

#define    IDS_TEXT2       15

#define    IDD_NETLIST     103

#define    IDC_EXIT        104

// Returns number of elements

#define dim(x) (sizeof(x) / sizeof(x[0]))

//----------------------------------------------------------------------

// Generic defines and data types

//

struct decodeUINT

{                                              // Structure associates

    UINT Code;                                 // messages

    LRESULT (*Fxn)(HWND, UINT, WPARAM, LPARAM);// with a function.

};

struct decodeCMD

{                                              // Structure associates

    UINT Code;                                 // menu IDs

    LRESULT (*Fxn)(HWND, WORD, HWND, WORD);    // with a function

};

//----------------------------------------------------------------------

// Function prototypes

//

HWND InitInstance (HINSTANCE, LPWSTR, int);

int TermInstance (HINSTANCE, int);

int ShowContextMenu (HWND hWnd, POINT pt);

// Window procedures

LRESULT CALLBACK MainWndProc (HWND, UINT, WPARAM, LPARAM);

// Message handlers

LRESULT DoPaintMain (HWND, UINT, WPARAM, LPARAM);

LRESULT DoDestroyMain (HWND, UINT, WPARAM, LPARAM);

LRESULT DoLButtonDownMain (HWND, UINT, WPARAM, LPARAM);

LRESULT DoCommandMain (HWND, UINT, WPARAM, LPARAM);

// Command functions

LPARAM DoMainCommandExit (HWND, WORD, HWND, WORD);

HelloCE.cpp

#include <windows.h>            

#include "helloce.h" 

#include <aygshell.h>

#pragma comment( lib, "aygshell" )

//----------------------------------------------------------------------

// Global data

//

const TCHAR szAppName[] = TEXT("ProgWinCE");

HINSTANCE hInst; // Program instance handle

LPTSTR pszText;

// Message dispatch table for MainWindowProc

const struct decodeUINT MainMessages[] =

{

    WM_PAINT, DoPaintMain,

    WM_DESTROY, DoDestroyMain,

       WM_LBUTTONDOWN, DoLButtonDownMain,

       WM_COMMAND, DoCommandMain,

};

// Command Message dispatch for MainWindowProc

const struct decodeCMD MainCommandItems[] =

{

       IDM_EXIT, DoMainCommandExit,

};

//======================================================================

// Program entry point

//

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

【上篇】
【下篇】

抱歉!评论已关闭.