الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]اضافة Listview للنافدة

مغلق
بدأه aderfiad في 30 سبتمبر 2009 · 8 رد · 1,939 مشاهدة · في أرشيف قسم Windows APIs
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

ابتدأت البرمجة بالـ

api

مؤخرا وارجو مساعدتكم لاني مبتدأفي المجال

المهم

عملت كود لعمل نافدة



const char g_szClassName[] = "myWindowClass";

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;


wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}


hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
g_szClassName,
"The title of my window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 400, 500,
NULL, NULL, hInstance, NULL);

if(hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
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;
}
#include <windows.h>

ما اريده هو اضافة

ListView

باستعمال الدالة

CreatWindowEx()

واستعمال

InsertColumn

لانشاء حقول

ارجو مساعدتكم وشكرا

#2
#include <windows.h>
#include <commctrl.h>
#pragma comment(lib, "comctl32")


const char g_szClassName[] = "myWindowClass";


LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	static HWND hwndLV;

	switch(msg)
	{
	case WM_CREATE:
		//
		// Create the listview window
		//
		hwndLV = CreateWindowEx(WS_EX_STATICEDGE, WC_LISTVIEW, "",
				 LVS_REPORT | LVS_ALIGNLEFT | WS_TABSTOP | WS_CHILD | WS_VISIBLE,
				 0, 0, 0, 0,
				 hwnd, 0, 0, 0);
		if (hwndLV)
		{
			LV_COLUMN lvc;
			LV_ITEM lvi;

			lvc.mask = LVCF_TEXT | LVCF_WIDTH;
			lvi.mask = LVIF_TEXT;
			lvi.iItem = 0;

			//
			// Insert 1st column
			//
			lvc.cx = 200;
			lvc.pszText = "Path";
			ListView_InsertColumn(hwndLV, 0, &lvc);

			//
			// Insert 2nd column
			//
			lvc.cx = 80;
			lvc.pszText = "Process ID";
			ListView_InsertColumn(hwndLV, 1, &lvc);

			//
			// Insert 3rd column
			//
			lvc.cx = 80;
			lvc.pszText = "Threads";
			ListView_InsertColumn(hwndLV, 2, &lvc);

			//
			// Add 1st element in 1st ROW
			//
			lvi.iItem = 0;
			lvi.iSubItem = 0;
			lvi.pszText = "SYSTEM IDLE PROCESS";
			ListView_InsertItem(hwndLV, &lvi);

			//
			// Add 2nd element in 1st ROW
			//
			lvi.iSubItem ++;
			lvi.pszText = "0";
			ListView_SetItem(hwndLV, &lvi);

			//
			// Add 3rd element in 1st ROW
			//
			lvi.iSubItem ++;
			lvi.pszText = "2";
			ListView_SetItem(hwndLV, &lvi);

			//
			// Add 1st element in 2nd ROW
			//
			lvi.iItem ++;
			lvi.iSubItem = 0;
			lvi.pszText = "SYSTEM";
			ListView_InsertItem(hwndLV, &lvi);

			//
			// Add 2nd element in 2nd ROW
			//
			lvi.iSubItem ++;
			lvi.pszText = "4";
			ListView_SetItem(hwndLV, &lvi);

			//
			// Add 3rd element in 2nd ROW
			//
			lvi.iSubItem ++;
			lvi.pszText = "17";
			ListView_SetItem(hwndLV, &lvi);

			//
			// Add 1st element in 3rd ROW
			//
			lvi.iItem ++;
			lvi.iSubItem = 0;
			lvi.pszText = "SMSS.EXE";
			ListView_InsertItem(hwndLV, &lvi);

			//
			// Add 2nd element in 3rd ROW
			//
			lvi.iSubItem ++;
			lvi.pszText = "468";
			ListView_SetItem(hwndLV, &lvi);

			//
			// Add 3rd element in 3rd ROW
			//
			lvi.iSubItem ++;
			lvi.pszText = "6";
			ListView_SetItem(hwndLV, &lvi);
		}
		break;
	case WM_SIZE:
		if(hwndLV && wParam != SIZE_MINIMIZED)
		{
			MoveWindow(hwndLV, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
		}
		break;
	case WM_CLOSE:
		DestroyWindow(hwnd);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hwnd, msg, wParam, lParam);
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
				   LPSTR lpCmdLine, int nCmdShow)
{
	WNDCLASSEX wc;
	HWND hwnd;
	MSG Msg;

	InitCommonControls();


	wc.cbSize   = sizeof(WNDCLASSEX);
	wc.style   = 0;
	wc.lpfnWndProc  = WndProc;
	wc.cbClsExtra  = 0;
	wc.cbWndExtra  = 0;
	wc.hInstance  = hInstance;
	wc.hIcon   = LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor   = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wc.lpszMenuName  = NULL;
	wc.lpszClassName = g_szClassName;
	wc.hIconSm   = LoadIcon(NULL, IDI_APPLICATION);

	if(!RegisterClassEx(&wc))
	{
		MessageBox(NULL, "Window Registration Failed!", "Error!",
			MB_ICONEXCLAMATION | MB_OK);
		return 0;
	}


	hwnd = CreateWindowEx(
		WS_EX_CLIENTEDGE,
		g_szClassName,
		"The title of my window",
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, CW_USEDEFAULT, 400, 500,
		NULL, NULL, hInstance, NULL);

	if(hwnd == NULL)
	{
		MessageBox(NULL, "Window Creation Failed!", "Error!",
			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;
}

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#3

بارك الله فيك اخي GM كود مفهوم فقط لم افهم هده العبارة #pragma comment(lib, "comctl32")

وهناك مشكل في عملية الربط

[Linker error] undefined reference to `InitCommonControls@0'

ld returned 1 exit status

C:\Dev-Cpp\Makefile.win [build Error] [Project1.exe] Error 1

استعمل DEV ++C

#4

هذه عبارة عن pragma لربط البرنامج بمكتبة comctl32 تلقائياً .

في حالة انها لا تعمل لدى المترجم لديك فقم فقط باضافة المكتبة comctl32.lib الى مكتبات الربط من خصائص المشروع (ليس لدي DEV C++) .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#5

قمت باضافة المكتبة comctl32.lib الى linker من خلال Project Options

لكن الان يضهر خطأ واحد عن الربط ايضا

C:\Dev-Cpp\Makefile.win [build Error] [Project1.exe] Error 1

#6

ساجرب على Code::Blocks

#7

بارك الله فيك اخي GM اشتغل على Code::Blocks بعد تضمين المكتبة comctl32

ما اريد عمله بالضبط هو التقاط النوافد الفعالة والمخفية متل هدا البرنامج ( في المرفقات )

لو امكن ان تساعدني فقط بتلميحات بسيطة عن الدوال التي ساستعمل

الهدف ليس البرنامج بل فهم التعامل مع هده الدوال

ساستعمل الدالة GetWindow + SendDlgItemMessage ؟

في جلب النوافد وارسال الناتج

لو امكن توضيح كيف ارسل الناتج ليضهر على listview

programm.rar

تم تعديل هذه المشاركة بواسطة aderfiad في 1 أكتوبر 2009 في 00:23

#8

lvi.iItem ++;

lvi.iSubItem = 0;

lvi.pszText = (GetWindow(hwnd,GW_HWNDLAST)) ;

ListView_InsertItem(hwndLV, &lvi);

حاولت هكدا لجلب مقبض النوافد المفتوحة

لكن المقبض الدي ترجعه الدالة ليس CHAR اضن علي تحويله او ان الطريقة فاشلة اصلا

المهم انا احاول وانتضر عونا من احد الاخوة المتمكنين من الـ API

تم تعديل هذه المشاركة بواسطة aderfiad في 1 أكتوبر 2009 في 15:21

#9

هناك ملاحظة اخرى : حجم البرنامج كبير 712 ko وعند فحصه يعطي [Overlay] هناك زياداة في البرنامج

هل هدا ناتج عن تضمين المكتبة comctl32 ؟

هذا الموضوع مغلق.

مواضيع مشابهة