想實作主題功能,主要在于做出自己的檔案格式.
如下,是一個按鈕代碼
typedef struct tagBTNX
{//
HWND hWnd; // handle of owner window
BOOL x1; //默認是185
BOOL x2; //默認是170
BOOL rcx1;
BOOL rcy1;
LPWSTR in;
COLORREF crf;
UINT style;
} BTN_PARAMX;
//
//
LRESULT CALLBACK BTProcX(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{//
PAINTSTRUCT ps;
HDC hdc = NULL;
RECT rc;
GetClientRect(hWnd, &rc);
LOGFONT lf;
HFONT hFont = 0;
HBRUSH br;
TCHAR txt[40];
//TODO:
//這里,它讀取了rgb.txt
/*
我們假設main.txt的內容是
Button[RGB(37,42,51),TEXT(文字)]
*/
char* buffer;
char* bufferB;
HANDLE hFile;//定義一個句柄。
hFile = CreateFileA("main.txt",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);//使用CreatFile這個API函式打開檔案
DWORD dwDataLen;
char FileContent[100];
ReadFile(hFile, FileContent, 100, &dwDataLen, NULL);//讀取資料
FileContent[dwDataLen] = 0;//將陣列未尾設零。
CloseHandle(hFile);//關閉句柄
switch (Msg)
{//
case WM_PAINT:
{
//MessageBoxA(0, FileContent, "NOTHING", 0);//輸出結果
//MessageBox(NULL, NULL, NULL, NULL);
hdc = BeginPaint(hWnd, &ps);
br = CreateSolidBrush(RGB(/*在這里加載識別后的rgb.txt里的RGB值,37,42,51*/));
FillRect(hdc, &rc, br);
GetWindowText(hWnd, txt, 40);
SetBkMode(hdc, TRANSPARENT);
SetTextColor(hdc, TEXTBLACK);
if (hFont == 0)
{
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = -16;
wcscpy(lf.lfFaceName, L"黑體");
hFont = CreateFontIndirect(&lf); // create the font
}
HFONT old = (HFONT)SelectObject(hdc, hFont);
TextOut(hdc, 18, 7, txt, wcslen(txt) /*&ps.rcPaint*//*DT_SINGLELINE | DT_CENTER | DT_VCENTER*/);
//DrawText(hdc, txt, wcslen(txt), &ps.rcPaint, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
ReleaseDC(hWnd, hdc);
UpdateWindow(hWnd);
//DeleteObject(br);
EndPaint(hWnd, &ps);
break;
}
case WM_MOUSEMOVE:
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.dwFlags = TME_HOVER | TME_LEAVE;
tme.dwHoverTime = 1;
tme.hwndTrack = hWnd;
BOOL boRet = _TrackMouseEvent(&tme);
}break;
case WM_MOUSELEAVE:
{
//PAINTSTRUCT ps1;
HBRUSH hbr;
hdc = GetDC(hWnd);
hbr = CreateSolidBrush(RGB(/*在這里加載識別后的rgb.txt里的RGB值,37,42,51*/));
SelectObject(hdc, hbr);
FillRect(hdc, &rc, hbr);
GetWindowText(hWnd, txt, 40);
SetTextColor(hdc, TEXTBLACK);
SetBkMode(hdc, TRANSPARENT);
if (hFont == 0)
{
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = -16;
wcscpy(lf.lfFaceName, L"黑體");
hFont = CreateFontIndirect(&lf); // create the font
}
HFONT old = (HFONT)SelectObject(hdc, hFont);
TextOut(hdc, 18, 7, txt, wcslen(txt) /*&ps.rcPaint*//*DT_SINGLELINE | DT_CENTER | DT_VCENTER*/);
//SetWindowText(hWnd, L"關閉");
ReleaseDC(hWnd, hdc);
DeleteObject(hbr);
OutputDebugStringA("Leave\n");
break;
}
case WM_MOUSEHOVER:
{
HBRUSH hbr = NULL;
hdc = GetDC(hWnd);
hbr = CreateSolidBrush(RGB(99, 184, 255));
SelectObject(hdc, hbr);
FillRect(hdc, &rc, hbr);
GetWindowText(hWnd, txt, 40);
SetTextColor(hdc, TEXTBLACK);
SetBkMode(hdc, TRANSPARENT);
if (hFont == 0)
{
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = -16;
wcscpy(lf.lfFaceName, L"黑體");
hFont = CreateFontIndirect(&lf); // create the font
}
HFONT old = (HFONT)SelectObject(hdc, hFont);
TextOut(hdc, 18, 7, txt, wcslen(txt) /*&ps.rcPaint*//*DT_SINGLELINE | DT_CENTER | DT_VCENTER*/);
//SetWindowText(hWnd, L"關閉");
ReleaseDC(hWnd, hdc);
//SetWindowText(hWnd, L"[關閉]");
DeleteObject(hbr);
OutputDebugStringA("Over\n");
break;
}
}
//
return CallWindowProc(BToldProc, hWnd, Msg, wParam, lParam);
}
//如果需要進行訊息處理,case IDC_XX:
//TODO:剛才所說的main.txt里的TEXT(文字),下面按鈕的創建會顯示這個東西
int ButtonEx(
HWND hWnd, // handle of owner window
BOOL x1,
BOOL x2,
BOOL rcx1,
BOOL rcy1,
UINT style //從定義獲取按鈕控制元件依賴
)
{
static HFONT hFont;
BTN_PARAMX btn;
btn.hWnd = hWnd;
btn.style = style;
g_bt1 = CreateWindow(L"Button", /*讀取檔案中TEXT()里的字符*/, WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW,//默認按鈕樣式
x1, x2, rcx1, rcy1, hWnd, (HMENU)style, b_hInstance, NULL);
ButtonProc = (WNDPROC)SetWindowLong(g_bt1, GWL_WNDPROC, (LONG)BTProcX);
return -1;
}
同上代碼,要做的東西做了TODO注釋了
呼叫方式
#define Button 0x10c1
ButtonEx(x,y,面積x,面積y,Button);
如上了,那么這個實作后,按鈕會以顏色為RGB37,42,51的背景顯示"文字"
uj5u.com熱心網友回復:
從檔案讀取 基本的 檔案讀寫操作就可以
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <crtdbg.h>
void Test()
{
FILE *fp = NULL;
//打開檔案
if(fopen_s(&fp, "D:\\m.txt", "rt") == 0)
{
//Button[RGB(37,42,51),TEXT(文字)]
INT r=0,g=0,b=0;
CHAR sString[64]={0};
if(fscanf_s(fp, "Button[RGB(%d,%d,%d),TEXT(%s)]",
&r, &g, &b, sString, _countof(sString)) == 4)
{
//RGB
COLORREF cr = RGB(r, g, b);
//洗掉字串的結尾部分)]
for(int n=(int)strlen(sString)-1; n>1; n--)
{
if(sString[n] == ']' && sString[n-1] == ')')
{
sString[n-1] = 0;
break;
}
}
CHAR szDbg[256];
sprintf_s(szDbg, "Color is %u=RGB(%d,%d,%d), Text=%s\r\n",
cr, r, g, b, sString);
OutputDebugStringA(szDbg);
}
else
{
_ASSERT(0);
}
fclose(fp);
}
}
//除錯輸出
//Color is 3353125=RGB(37,42,51), Text=文字
uj5u.com熱心網友回復:
但是由于我用這種讀取的方法總是出現亂碼,因為這是WIN32,最侄訓是要屬于LPCTSTR一類的,所以如果用專用于WIN32的代碼:
HANDLE hFile;//定義一個句柄。
hFile = CreateFileA("main.txt",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);//使用CreatFile這個API函式打開檔案
DWORD dwDataLen;
char FileContent[100];
ReadFile(hFile, FileContent, 100, &dwDataLen, NULL);//讀取資料
FileContent[dwDataLen] = 0;//將陣列未尾設零。
CloseHandle(hFile);//關閉句柄
之后對那個FileContent進行處理呢?
uj5u.com熱心網友回復:
已經讀取的字串,可以用 scanf , 和 fscanf 差不多使用uj5u.com熱心網友回復:
而且這個放在那個按鈕里面也不知道怎么做轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/206106.html
標籤:界面
上一篇:跪求,用MFC寫一個隨機抽查程式
