=============================mymain.h檔案=====================================
#include <Windows.h>
#include <stdlib.h>
//測試區
//http://www.baidu.com
#define IDM_STATIC_DOMAIN1 101
#define IDM_BTN_OPEN1 102
//http://www.google.com
#define IDM_STATIC_DOMAIN2 103
#define IDM_BTN_OPEN2 104
//http://www.youtube.com
#define IDM_STATIC_DOMAIN3 105
#define IDM_BTN_OPEN3 106
//http://www.51cto.com
#define IDM_STATIC_DOMAIN4 107
#define IDM_BTN_OPEN4 108
HWND doman1;
HWND btnOpen1;
HWND doman2;
HWND btnOpen2;
HWND doman3;
HWND btnOpen3;
HWND doman4;
HWND btnOpen4;
//end 測試區
//系統預設筆刷
HBRUSH sysDefBrush;
LRESULT CALLBACK WindowProc(
_In_ HWND hwnd,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
//視窗的x y 坐标
int mainPox, mainPoy;
void setCenterPos(_In_ HWND hwnd);
=============================mymain.cpp檔案===================================
#include "mymain.h"
int CALLBACK WinMain(
_In_ HINSTANCE hInstance,
_In_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow
) {
sysDefBrush = CreateSolidBrush(RGB(30, 30, 30));
WCHAR* cls_Name = L"my window";
WNDCLASS wc = { sizeof(WNDCLASS) };
//wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.hbrBackground = sysDefBrush;
wc.lpfnWndProc = WindowProc;
wc.lpszClassName = cls_Name;
wc.hInstance = hInstance;
wc.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wc);
HWND hwnd = CreateWindow(
cls_Name,//類名
L"我的導航",//視窗标題文字
WS_DLGFRAME | WS_SYSMENU,//Win32中禁止視窗調整大小
//(WS_OVERLAPPEDWINDOW^WS_THICKFRAME)|WS_MINIMIZE,//視窗外觀樣式 將WS_OVERLAPPEDWINDOW和WS_THICKFRAME進行按位異或運算來實作 禁止改變視窗大小方法
38,//視窗相對于父級的x坐标
20,//視窗相對于父級的y坐标
800,//視窗的寬度
600,//視窗的高度
NULL,//沒有父視窗,為NULL
NULL,//沒有菜單,為NULL
hInstance,//目前應用程式的執行個體句柄
NULL//沒有附加資料,為NULL
if (hwnd == NULL) {
return 0;
}
//ShowWindow的第一個參數就是剛才建立的視窗的句柄,第二個參數控制視窗如何顯示
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
switch (uMsg)
{
case WM_CREATE: {
//設定視窗位置居中
setCenterPos(hwnd);
HBRUSH brush;
brush = CreateSolidBrush(RGB(30, 30, 30));
SetClassLong(hwnd, GCL_HBRBACKGROUND, (long)brush);
doman1 = CreateWindow(TEXT("static"), TEXT("http://www.baidu.com"), WS_CHILD | WS_VISIBLE | SS_LEFT, 240, 40, 260, 20, hwnd,(HMENU)IDM_STATIC_DOMAIN1,
((LPCREATESTRUCT)lParam)->hInstance, NULL);
btnOpen1 = CreateWindow(
TEXT("button"),
TEXT("打開導航"),
WS_CHILD | WS_VISIBLE,
500, 40, 80, 20,
hwnd, (HMENU)IDM_BTN_OPEN1,
((LPCREATESTRUCT)lParam)->hInstance, NULL
doman2 = CreateWindow(TEXT("static"), TEXT("http://www.google.com"), WS_CHILD | WS_VISIBLE | SS_LEFT, 240, 80, 260, 20, hwnd, (HMENU)IDM_STATIC_DOMAIN2,
btnOpen2 = CreateWindow(
500, 80, 80, 20,
hwnd, (HMENU)IDM_BTN_OPEN2,
doman3 = CreateWindow(TEXT("static"), TEXT("http://www.youtube.com"), WS_CHILD | WS_VISIBLE | SS_LEFT, 240, 120, 260, 20, hwnd, (HMENU)IDM_STATIC_DOMAIN3,
btnOpen3 = CreateWindow(
500, 120, 80, 20,
hwnd, (HMENU)IDM_BTN_OPEN3,
doman4 = CreateWindow(TEXT("static"), TEXT("http://www.51cto.com"), WS_CHILD | WS_VISIBLE | SS_LEFT, 240, 160, 260, 20, hwnd, (HMENU)IDM_STATIC_DOMAIN4,
btnOpen4 = CreateWindow(
500, 160, 80, 20,
hwnd, (HMENU)IDM_BTN_OPEN4,
case WM_DESTROY: {
PostQuitMessage(0);
case WM_COMMAND: {
switch (LOWORD(wParam))
case IDM_BTN_OPEN1:
ShellExecute(NULL,TEXT("open"),TEXT("http://www.baidu.com"),NULL,NULL,SW_SHOWNORMAL);
break;
case IDM_BTN_OPEN2:
ShellExecute(NULL, TEXT("open"), TEXT("http://www.google.com"), NULL, NULL, SW_SHOWNORMAL);
case IDM_BTN_OPEN3:
ShellExecute(NULL, TEXT("open"), TEXT("http://www.youtube.com"), NULL, NULL, SW_SHOWNORMAL);
case IDM_BTN_OPEN4:
ShellExecute(NULL, TEXT("open"), TEXT("http://www.51cto.com"), NULL, NULL, SW_SHOWNORMAL);
default:
case WM_PAINT: {
// Windows提供了一個消息,叫做WM_CTLCOLORSTATIC。這個消息看上去很長,我們拆分看,即WM_、CTL、COLOR、STATIC,分别表示視窗消息、CTL(Control控件)、顔色、靜态的。合起來一看,就是靜态控件顔色消息。這個消息給我們提供了修改
static靜态控件的文字顔色、文字背景顔色以及static靜态控件的表面顔色。
case WM_CTLCOLORSTATIC: {
if ((HWND)lParam == doman1) {
//SetBkColor((HDC)wParam,RGB(30,30,30));
SetBkMode((HDC)wParam, TRANSPARENT);
SetTextColor((HDC)wParam, RGB(250,250,250));
else if ((HWND)lParam == doman2)
SetTextColor((HDC)wParam, RGB(250, 250, 250));
else if ((HWND)lParam == doman3)
else if ((HWND)lParam == doman4)
return (INT_PTR)sysDefBrush;
return DefWindowProc(hwnd, uMsg, wParam, lParam);
void setCenterPos(_In_ HWND hwnd) {
int srcWidth, srcHeight;
RECT rect;
srcWidth = GetSystemMetrics(SM_CXSCREEN);
srcHeight = GetSystemMetrics(SM_CYSCREEN);
GetWindowRect(hwnd, &rect);
mainPox = (srcWidth - rect.right) / 2;
mainPoy = (srcHeight - rect.bottom) / 2;
SetWindowPos(hwnd, HWND_TOP, mainPox, mainPoy, rect.right, rect.bottom, SWP_SHOWWINDOW);