全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1591
推到 Plurk!
推到 Facebook!

利用圖片作為視窗背景

尚未結案
ricel
一般會員


發表:6
回覆:6
積分:2
註冊:2005-03-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-25 08:13:52 IP:218.163.xxx.xxx 未訂閱
我想以bmp檔作為視窗背景 可是跑不出想要的結果 所以請各位幫幫忙    以下為程式碼  
#include 
#include 
#include "resource.h"
const  char* szAppName = "MyWndClass";    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int nTopXY(UINT, UINT);
LOGBRUSH background;    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX Windows;
    HWND hwnd;
    MSG Msg;
    int wnd_W=400; 
    int wnd_H=300;         Windows.cbSize        = sizeof(WNDCLASSEX);
    Windows.style         = 0;
    Windows.lpfnWndProc   = WndProc;
    Windows.cbClsExtra    = 0;
    Windows.cbWndExtra    = 0;
    Windows.hInstance     = hInstance;
    Windows.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(ID_ICON_1));
    Windows.hCursor       = LoadCursor(NULL, IDC_ARROW);     
    Windows.lpszMenuName  = NULL;
    Windows.lpszClassName = szAppName;
    Windows.hIconSm       = LoadIcon(hInstance,"myIcon");        background.lbStyle     = BS_PATTERN;
    background.lbHatch     = (long) LoadImage(NULL,"bg2.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);        
    Windows.hbrBackground = CreateBrushIndirect(&background);        if(!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "視窗類別登記失敗!", "發生錯誤!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }        
    hwnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        szAppName,
        "利用圖片作為視窗背景",
        WS_OVERLAPPEDWINDOW,
        nTopXY(wnd_W, GetSystemMetrics(SM_CXSCREEN)),
        nTopXY(wnd_H, GetSystemMetrics(SM_CYSCREEN)),
        wnd_W,wnd_H, 
        NULL, NULL, hInstance, NULL);        if(hwnd == NULL)
    {
        MessageBox(NULL, "視窗建立失敗!", "發生錯誤!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }        ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);
    
    while(GetMessage(&Msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}    LRESULT WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 HDC        hMyDC;
 PAINTSTRUCT        ps;     char        szText[] = "背景圖片測試!!";  
 int        nLen = sizeof(szText)-1;
 
    switch(msg)
    {
        case WM_PAINT:
                hMyDC=BeginPaint(hwnd, &ps);
                
                //SetRect(&MyRECT,100,200,100,120);
                SetTextColor(hMyDC, RGB(255,80,80));
                SetBkMode(hMyDC, TRANSPARENT);
                
                TextOut(hMyDC,100,100,szText,lstrlen(szText));        
               
                EndPaint(hwnd, &ps);
                
        break;
        case WM_CLOSE:
            DestroyWindow(hwnd);
            DeleteObject(&background);
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
}    int nTopXY(UINT wnd_XY, UINT wnd_Dim)
{
int resl;
resl=((wnd_Dim/2)-(wnd_XY/2)); 
return resl;
}
 
發表人 - ricel 於 2005/04/25 16:18:50
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-25 09:19:04 IP:210.68.xxx.xxx 未訂閱
您好: PO程式碼的方式請參考版規說明,煩請修改謝謝您的配合 < href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58991">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58991
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-25 10:35:06 IP:218.165.xxx.xxx 未訂閱
請問妳的程式碼是BCB的嗎?怎麼好像是VC的。 還有程式碼前面Include的地方沒有顯示出來,請妳修改一下
ricel
一般會員


發表:6
回覆:6
積分:2
註冊:2005-03-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-25 19:48:40 IP:218.163.xxx.xxx 未訂閱
真不好意思    po錯地方 發表人 -
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-26 10:52:43 IP:61.229.xxx.xxx 未訂閱
1 我沒有 resource.h, 所以 //#include "resource.h" 2 Windows.hIcon = NULL; ///LoadIcon(hInstance, MAKEINTRESOURCE(ID_ICON_1)); 3 if(!RegisterClassEx(&wc)) 改成 if(!RegisterClassEx(&Windows)) 4 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM) 改成 LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 5 WndProc() 的最後一行加上 return 0; 6 在 VC 測試下 OK
ricel
一般會員


發表:6
回覆:6
積分:2
註冊:2005-03-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-26 19:29:46 IP:218.163.xxx.xxx 未訂閱
多謝windblown的指教 但我己經照windblown的方式去修改 還是無法把"bg2"秀出來 跑出來的仍是透明的視窗背景
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-26 22:57:17 IP:211.76.xxx.xxx 未訂閱
ricel 您好: 純插花! 有沒有可能是您的圖檔不是bitmap格式或不在您執行檔的目錄下。 檢查一下或嘗試重新換個圖檔試試。 我在Dev C 中測試您的程式碼,是可以繪出背景圖的。 RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-27 08:57:21 IP:61.229.xxx.xxx 未訂閱
我也覺得 richtop 說的就是你的問題所在。在 LoadImage() 時,該 bmp 的所在路徑全部都要寫進去,應該就會對了 ex: bg2.bmp 放到 c:\bg2.bmp 時, 寫成下面 LoadImage(NULL,"c:\\bg2.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); 這樣應該就可以了
系統時間:2024-04-29 3:46:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!